Changyu Lee

Dev Log [03.05.25] : PyTorch Integer Type Conversion

Published at
2025/03/05
Last edited time
2025/03/06 05:45
Created
2025/03/05 06:32
Section
Dev Log
Status
Done
Series
Tags
Code
Trouble Shooting
AI summary
Keywords
Python
PyTorch
Language
KOR
Week
1 more property

๐Ÿฅฒ Situation

ref_outer_list = [int((x - x.min()) / (x.max() - x.min())) * 255 for x in ref_outer_list] gen_outer_list = [int((x - x.min()) / (x.max() - x.min())) * 255 for x in gen_outer_list] ValueError: only one element tensors can be converted to Python scalars
Python
๋ณต์‚ฌ

Why?

์˜ค๋ฅ˜์˜ ์›์ธ์€ int()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐ์—ด ์ „์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ๊ฐœ๋ณ„ ์š”์†Œ๋ฅผ ๋ณ€ํ™˜ํ•˜๋ ค๊ณ  ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž„
x๋Š” ํ…์„œ์ด๋ฏ€๋กœ .min(), .max()๊ฐ€ ํ…์„œ ์ „์ฒด ๊ฐ’์ด ์•„๋‹Œ, ํ…์„œ์˜ ์š”์†Œ๋ณ„ ์—ฐ์‚ฐ์œผ๋กœ ์ฒ˜๋ฆฌ๋ผ์•ผ ํ•จ.
int((x - x.min()) / (x.max() - x.min())) * 255
Python
๋ณต์‚ฌ
โ€ข
x - x.min(): x๊ฐ€ ํ…์„œ์ด๋ฏ€๋กœ ๊ฒฐ๊ณผ๋„ ํ…์„œ (์Šค์นผ๋ผ ๊ฐ’ ์•„๋‹˜).
โ€ข
/ (x.max() - x.min()): ์—ฌ์ „ํžˆ ํ…์„œ.
โ€ข
int(...): ํ…์„œ๋Š” ์Šค์นผ๋ผ ๊ฐ’์ด ์•„๋‹ˆ๋ฏ€๋กœ int()๊ฐ€ ์ ์šฉ๋  ์ˆ˜ ์—†์Œ โ†’ ValueError ๋ฐœ์ƒ.
โœ… ํ•ด๊ฒฐ์ฑ…: int()๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ง๊ณ  .to(torch.uint8) ๋˜๋Š” .numpy().astype(np.uint8)๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ.

โœ… ์ˆ˜์ • ๋ฐฉ๋ฒ•

int()๋Š” ๊ฐœ๋ณ„ ์Šค์นผ๋ผ ๊ฐ’์—๋งŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ํ…์„œ ์ „์ฒด๋ฅผ ์ •๊ทœํ™”ํ•œ ํ›„ to(torch.uint8) ๋˜๋Š” .numpy().astype(np.uint8)์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Œ.

๐Ÿ”น ์ˆ˜์ •๋œ ์ฝ”๋“œ

python ๋ณต์‚ฌํŽธ์ง‘ # ๋ชจ๋“  ๊ฐ’์ด 0~255 ๋ฒ”์œ„๋กœ ์ •๊ทœํ™”๋˜๋„๋ก ๋ณ€ํ™˜ ref_outer_list = [(x - x.min()) / (x.max() - x.min()) * 255 for x in ref_outer_list] gen_outer_list = [(x - x.min()) / (x.max() - x.min()) * 255 for x in gen_outer_list] # uint8 ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ (PIL์ด๋‚˜ OpenCV์—์„œ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ํ•„์š”) ref_outer_list = [x.to(torch.uint8) for x in ref_outer_list] gen_outer_list = [x.to(torch.uint8) for x in gen_outer_list]
Python
๋ณต์‚ฌ

๐Ÿ”น ๋˜๋Š” NumPy ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•

๋งŒ์•ฝ NumPy๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์‚ฌ์šฉํ•˜๋ ค๋ฉด .numpy().astype(np.uint8)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.
python ๋ณต์‚ฌํŽธ์ง‘ ref_outer_list = [(x - x.min()) / (x.max() - x.min()) * 255 for x in ref_outer_list] gen_outer_list = [(x - x.min()) / (x.max() - x.min()) * 255 for x in gen_outer_list] # NumPy ๋ณ€ํ™˜ ํ›„ uint8 ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ ref_outer_list = [x.cpu().numpy().astype(np.uint8) for x in ref_outer_list] gen_outer_list = [x.cpu().numpy().astype(np.uint8) for x in gen_outer_list]
Python
๋ณต์‚ฌ

๐Ÿ“Œ Conclusion

1.
PIL์ด๋‚˜ OpenCV์—์„œ ์‚ฌ์šฉํ•˜๋ ค๋ฉด: .to(torch.uint8) ๋˜๋Š” .numpy().astype(np.uint8) ๋ณ€ํ™˜ ํ•„์š”.
2.
int()๋Š” ์ „์ฒด ํ…์„œ๊ฐ€ ์•„๋‹Œ, ๊ฐœ๋ณ„ ์š”์†Œ์— ์ ์šฉํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ ๋จ.
Home
Projects
Blog
Contact