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)์ ์ฌ์ฉํ๋ฉด ํด๊ฒฐํ ์ ์์.
์์ ๋ ์ฝ๋
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()๋ ์ ์ฒด ํ
์๊ฐ ์๋, ๊ฐ๋ณ ์์์ ์ ์ฉํด์ผ ํ๋ฏ๋ก ์ฌ์ฉํ๋ฉด ์ ๋จ.
