반응형
1. tensor 로 변환된 이미지는 [C,H,W] 형태를 가지고 있으나 cv2.imshow 하려면 numpy형태로 바꾸어야한다.
numpy 형태는 [H,W,C] 형태를 말한다.
2. 원본이미지가 numpy에서 tensor로 변환되는 과정에서 normalize도 하게되는데 이때 이미지를 시각화하기 위해서는 /255. 로 normalize 됐는지,
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
이 코드처럼 IMAGENET 형식으로 normalize 됐는지를 알아야한다. 알고나면 denormalize 작업을 다음과 같이 하면 된다.
# /255. 로 normalize 된 경우
image = image * 255.0
# IMAGENET 형식으로 normalize 된 경우
IMAGENET_MEAN, IMAGENET_STD = np.array([0.485, 0.456, 0.406]), np.array([0.229, 0.224, 0.225])
image = np.clip(255.0 * (image * IMAGENET_STD + IMAGENET_MEAN), 0, 255)
3. 이 상태에서 바로 vis 하면 이미지가 전체적으로 파랗게 보이는데 이는 RGB 채널 순서를 잘못 정렬했기 때문이다. 이는
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
코드로 해결할 수 있다.
4. 정리하면 다음과 같은 코드가 될것이다.
img = data['img'] # Tensor형태의 이미지. [C, H, W]
img = img.detach().cpu().numpy() # tensor -> numpy
img = np.transpose(img, (1, 2, 0)) # [C,H,W] -> [H,W,C]
img = denormalize(img) # *255 or IMAGENET denorm 방법
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # RGB 채널
img = img.astype(np.uint8).copy() # np.float32 -> np.uint8
cv2.imshow('w', img)
cv2.waitKey(0)
반응형
'연구 > pytorch' 카테고리의 다른 글
[npz] npz 데이터에서 keys 확인하기 (0) | 2022.07.19 |
---|---|
[model freeze] layer 의 일부만 freeze 하기 (2) | 2022.02.13 |
[파이썬] 피클 pickle 파일 읽기, 쓰기 (0) | 2021.07.08 |
[error] 파이썬 data loader 시간지연문제 (1) | 2021.05.25 |
[error] RuntimeError: CUDA error: no kernel image is available for execution on the device (0) | 2021.03.21 |