_load_img_as_tensor

SSamYang·2024년 9월 4일

함수 설명

함수 정의:

python코드 복사
def _load_img_as_tensor(img_path, image_size):
  • img_path: 이미지 파일의 경로입니다.
  • image_size: 이미지를 리사이즈할 크기입니다. 결과적으로 이미지의 크기는 image_size x image_size가 됩니다.

주요 기능:

  1. 이미지 로드:

    python코드 복사
    img_pil = Image.open(img_path)
    
    • PIL을 사용하여 이미지 파일을 로드합니다.
    • img_pil은 PIL 이미지 객체가 됩니다.
  2. 이미지 리사이즈 및 RGB 변환:

    python코드 복사
    img_np = np.array(img_pil.convert("RGB").resize((image_size, image_size)))
    
    • 이미지를 RGB 모드로 변환한 후, 지정된 크기로 리사이즈합니다.
    • 변환된 이미지를 NumPy 배열로 변환합니다.
  3. 이미지 정규화:

    python코드 복사
    if img_np.dtype == np.uint8:
        img_np = img_np / 255.0
    else:
        raise RuntimeError(f"Unknown image dtype: {img_np.dtype} on {img_path}")
    
    • JPEG 이미지에서 일반적으로 사용되는 np.uint8 타입의 데이터는 0-255 범위의 값을 가지므로, 이를 0-1 범위로 정규화합니다.
    • 만약 이미지의 데이터 타입이 np.uint8이 아니면, 에러를 발생시킵니다.
  4. 텐서로 변환:

    python코드 복사
    img = torch.from_numpy(img_np).permute(2, 0, 1)
    
    • NumPy 배열을 PyTorch 텐서로 변환합니다.
    • permute(2, 0, 1)을 사용하여 이미지의 채널 순서를 (H, W, C)에서 (C, H, W)로 변경합니다. PyTorch에서는 (C, H, W) 형식의 텐서를 사용하기 때문입니다.
  5. 원본 이미지 크기 반환:

    python코드 복사
    video_width, video_height = img_pil.size
    
    • 원본 이미지의 가로와 세로 크기를 반환하기 위해 img_pil.size에서 video_widthvideo_height를 추출합니다.
  6. 결과 반환:

    python코드 복사
    return img, video_height, video_width
    
    • img: 정규화된 이미지 텐서 (C, H, W) 형식.
    • video_height: 원본 이미지의 높이.
    • video_width: 원본 이미지의 너비.

코드 예시

python코드 복사
img_tensor, height, width = _load_img_as_tensor("/path/to/image.jpg", 256)

위 코드는 /path/to/image.jpg 경로에 있는 이미지를 256x256 크기로 리사이즈하고, 정규화된 텐서로 변환한 후, 원본 이미지의 높이와 너비를 반환합니다.

이 함수는 특히 비디오 프레임이나 이미지 데이터를 PyTorch 모델에서 사용하기 전에 필요한 전처리 작업을 수행하는 데 유용합니다.

profile
공부 기록장📕

0개의 댓글