ValueError: operands could not be broadcast together with shapes (256,256) (3,) (256,256)

boingboing·2024년 10월 17일

현상

one_data = next(iter(total_dataloader))
images, labels = one_data

으로 dataloader item 확인하려는데 에러 발생함.

발생 위치

augmentations = self.transform(image=dicom_array, mask=nii_array)

데이터 증강이 설정되어 있을 경우, 이미지와 마스크에 적용한 부분에서 해당 에러가 발생함.

코드 맥락

import albumentations as A


UNET_RESIZE = 256

transform = A.Compose(
    [
        A.Resize(height=UNET_RESIZE, width=UNET_RESIZE),
        A.Normalize(),
    ]
)
if self.transform:
  augmentations = self.transform(image=dicom_array, mask=nii_array)
  dicom_array = augmentations["image"]
  nii_array = augmentations["mask"]

에러

return F.normalize(img, self.mean, self.std, self.max_pixel_value)
File \"/opt/conda/envs/torch_11/lib/python3.9/site-packages/albumentations/augmentations/functional.py\", line 105, in normalize
return normalize_numpy(img, mean, denominator)

  • 이 오류는 Albumentations의 normalize 함수에서 발생하는데, 이미지와 평균값을 사용하는 과정에서 차원이 맞지 않아 발생함.

원인

  • normalize는 보통 RGB 채널을 가진 이미지에 대해 작동하기 때문에 평균값과 표준편차를 (3,) 형태로 설정함.

  • 하지만 현재 이미지가 단일 채널(흑백 이미지)로 되어 있어 (256, 256) 형상으로 사용됬음.

dicom과 nii는 흑백 채널임 -> 흑백 채널로 충분.

해결

A.Normalize()를

A.Normalize(mean=(0.5,), std=(0.5,), max_pixel_value=255)로 바꿈.

  • 단일 채널 이미지일 경우 평균값을 (1,)로 설정함.
    : Albumentations의 Normalize 함수에 단일 채널에 맞는 평균값과 표준편차를 지정함.

0개의 댓글