본문 바로가기

딥러닝(Deep Learning)/컴퓨터 비전

tf.image.extract_patches(imgaes,sizes,strides,rates,padding)

[컴퓨터 비전과 딥러닝 중 P513]

sizes = [batch_size=1,row_size = 4,column_size = 4,num_channel=1]

-> 패치를 추출하기 위한 슬라이딩 윈도우 크기 지정

strides = [batch_stride=1,self.p_siz, self.p_siz,channel_stride=1]

-> 슬라이딩 윈도우를 얼마만큼 움직일 것이냐! 이 예에서는 patch_size=4이므로, 4픽셀씩 슬라이등 윈도우를 이동시킴

rate=[batch_dimension, height_rate, width_rate, channel_rate]

  1. 첫 번째 숫자 (1): 배치 차원(batch dimension)에 대한 rate입니다. 보통 1로 설정됩니다.
  2. 두 번째 숫자 (1): 이미지의 높이(height)에 대한 rate입니다. 1로 설정하면 이미지의 높이 방향으로는 건너뛰지 않고 모든 픽셀을 사용합니다.
  3. 세 번째 숫자 (1): 이미지의 너비(width)에 대한 rate입니다. 마찬가지로 1로 설정하면 이미지의 너비 방향으로는 건너뛰지 않고 모든 픽셀을 사용합니다.
  4. 네 번째 숫자 (1): 채널(channel)에 대한 rate입니다. 보통 1로 설정됩니다.

따라서 rate=[1, 1, 1, 1]은 이미지의 모든 차원에서 픽셀을 건너뛰지 않고 모든 픽셀을 사용하여 패치를 추출한다는 것을 의

미합니다.

 

rate와 strides는 모두 패치를 추출하는 과정에서 윈도우의 이동 방식을 제어하는 매개변수들이지만, 그 목적과 동작 방식에는 약간의 차이가 있습니다.

  1. Rate (간격):
    • rate는 패치를 추출할 때 [각 차원](행과 열)에서 픽셀 간의 간격을 지정합니다. 즉, 이미지에서 픽셀을 건너뛰며 패치를 추출하는 비율을 나타냅니다.
    • 예를 들어, rate=[1, 2, 2, 1]는 이미지의 각 행과 열에서 두 칸씩 건너뛰며 패치를 추출하라는 것을 의미합니다.
  2. Strides (이동 간격):
    • strides는 윈도우가 이미지를 따라 이동하는 간격을 지정합니다. 즉, 패치를 추출하는 동안 윈도우가 이미지를 얼마나 이동할지를 결정합니다.
    • 예를 들어, strides=[1, 2, 2, 1]는 윈도우가 이미지의 각 행과 열에서 두 칸씩 이동하며 패치를 추출하라는 것을 의미합니다.

간단히 말해, rate는 [패치가 추출될 때 픽셀 간의 간격]을 지정하고, strides는 윈도우가 [이미지를 따라 이동할 때의 간격]

을 지정합니다.

 

예시 이미지:

  • 가로 32픽셀, 세로 32픽셀, 3개의 색상 채널(RGB)로 구성된 이미지를 상상해보겠습니다.
  1. 원본 이미지 크기:
    • 입력 이미지의 크기는 32x32x3입니다. 이는 32픽셀 너비, 32픽셀 높이, 그리고 3개의 색상 채널(RGB)로 구성되어 있습니다.
  2. 패치 추출 과정:
    • 패치 크기는 4x4로 설정되어 있습니다. 즉, 4픽셀 x 4픽셀 크기의 작은 부분 이미지를 추출하겠습니다.
    • 윈도우는 이미지를 슬라이딩하면서 패치를 추출합니다.
    • 스트라이드(strides)는 4픽셀로 설정되어 있으므로, 윈도우가 가로 및 세로로 4픽셀씩 이동합니다.
    • 레이트(rates)는 모든 패치를 선택하도록 설정되어 있습니다.
  3. 패치 수 계산:
    • 가로 방향으로는 ( \frac{{32}}{{4}} = 8 )개의 패치가 추출됩니다.
    • 세로 방향으로도 마찬가지로 8개의 패치가 추출됩니다.
    • 따라서 각 이미지당 총 64개의 패치가 추출됩니다.
  4. 패치 재구성:
    • 추출된 패치는 초기에 4D 텐서 모양으로 있습니다: (batch_size, num_patches, patch_height, patch_width, num_channels).
    • 각 패치를 개별 데이터 포인트로 처리하기 위해 텐서를 다음과 같이 재구성합니다: (batch_size, num_patches, patch_dims).
    • 여기서 patch_dims는 각 패치의 펼친 크기를 나타냅니다. (이 경우에는 (4 \times 4 \times 3 = 48)로 계산됨)
  5. 최종 패치 크기:
    • 최종적으로 (50000, 64, 48) 모양의 텐서가 생성됩니다.
      • 50000은 배치 크기(이미지 수)를 나타냅니다.
      • 64는 각 이미지당 총 패치 수를 나타냅니다.
      • 48은 각 패치의 펼친 크기를 나타냅니다.