torchvision의 데이터 augmentation 기법들 살펴보기

김인조·2022년 4월 8일
1

image processing

목록 보기
1/1

다량의 양질의 데이터는 좋은 딥러닝 모델을 만드는데 필수 조건입니다. 그런데 실제 산업 현장에서는 데이터가 충분히 확보 되어있지 않거나 명확히 분류되어있지 않은 경우가 많습니다. 특히, 공정과정에서 발생하는 이미지는 이런 경우가 비일비재합니다. 그러므로, 모델에 학습 시키기전 데이터 augmentation 과정은 필수입니다.

torchvision.transforms은 이미지의 다양한 전처리 기능을 제공하며 이를 통해 데이터 augmentation도 손쉽게 구현할 수 있습니다. 이에 본 포스팅에서는 torchvision의 transforms 메써드에서 제공하는 다양한 데이터 증강용 함수를 기능 중점적으로 소개드리고자 합니다.

더 자세한 내용은 pytorch에서 제공하는 공식 doc을 참고해주세요.



기능별 함수


crop 관련 함수

  • CentorCrop
    이미지를 중앙에서 crop합니다. crop 후 output의 size를 parameter로 요구합니다.
  • FiveCrop
    이미지의 귀퉁이 4개와 중앙, 총 5개 구역에서 crop을 합니다. 결과는 tuple 형태로 반환됩니다. crop 후 output의 size를 parameter로 요구합니다.

  • Tencrop
    원본 이미지에 Five crop을 실행 후, 이미지를 flip하여 다시 five crop 을 수행합니다. 이때, flip 방식을 설정해줄 수 있으며, default는 horizontal flip입니다.
  • RandomCrop
    랜덤한 위치에서 crop을 진행합니다. crop 후 output의 size를 parameter로 요구합니다. 추가로 padding 여부, padding 방법등을 지정해 줄 수 있습니다.
  • RandomResizedCrop
    랜덤한 위치에서 이미지를 crop한 후 이미지 resize를 진행합니다. Random crop에서도 출력 이미지를 지정해 줄 수 있는데 굳이 이렇게 따로 함수를 나눈 이유를 잘 모르겠네요.
               

color 관련 함수

  • ColorJitter
    이미지의 밝기, 채도 등등 컬러 관련 여러 속성들을 임의로 변경합니다. color jitter는 이미지의 lightness, hue 등을 조절함으로써 데이터를 변환하는 이미지 augmentation의 한 방법입니다. color Jitter에 대한 더 자세한 내용은 이 블로그를 참고해주세요.

  • Grayscale
    이미지를 gray scale로 변환합니다. output의 channel을 파라미터로 설정 가능합니다. num_output_channels 가 1인 경우, 1차원 이미지로 반환하고, 3인 경우, RGB 채널을 모두 동일한 값으로 설정합니다.
  • RandomGrayscale
    전체 이미지 중 일부 이미지를 랜덤으로 gray scale로 변환합니다. 입력이미지의 차원이 1인 경우는 1차원 이미지를 반환하고, 입력이미지가 3차원 컬러이미지인 경우, RGB를 동일하게 설정합니다.
  • RandomInvert
    이미지를 샘플링 후, invert를 진행합니다. 입력 파라미터로는 sampling ratio p를 받습니다. tensor의 경우, 모든 픽셀의 값이 [0,1]로 normalize 되어있습니다. 이때, Invert를 수행하면, 1-기존 pixel값을 return 합니다.
    첫번째 이미지는 기존 이미지이고, 두번째 이미지는 invert를 수행한 이미지입니다. 원본 이미지의 첫번째 픽셀값은 0.1529이고, inverted 이미지의 첫번째 픽셀값은 1-0.1529에 해당하는 0.8471입니다.

  • RandomSolarize
    이미지를 샘플링 후, threshold 이상의 값을 가지는 픽셀을 모두 invert합니다. 입력 파라미터로는 threshold와 sampling ratio p를 받습니다.

  • RandomPosterize
    각 채널별로 비트의 수를 감소시킵니다. 입력 파라미터로는 유지할 비트의 수와 sampling ratio p를 받습니다.
  • RandomAdjustSharpness
    이미지의 sharpness를 랜덤하게 조정합니다. 입력 파라미터로는 sharpness factor와 samplig ratio p를 받습니다. sharpness factor는 음수가 아닌 값을 가지며, 0은 흐릿한 이미지, 1은 원본 이미지, 2는 선명도를 2배로 증가를 의미합니다.
         

matrix transformation 관련 함수

  • RandomAffine
    이미지의 center를 유지하면서 affine transform을 진행합니다.

  • RandomHorizontalFlip
    이미지를 샘플링 후, 수평으로 flip합니다. 입력 파라미터로는 sampling ratio p를 받습니다.

  • RandomVerticalFlip
    이미지를 샘플링 후, 수직으로 flip합니다. 입력 파라미터로는 sampling ratio p를 받습니다.

  • RandomRotation
    이미지를 랜덤하게 rotation 합니다. 입력 파라미터로는 degree를 받습니다. 이때 degree는 단일 float 또는 sequence로 받을 수 있습니다. sequence를 입력으로 할 경우. (min, max)내에서 랜덤하게 degree가 결정됩니다. single float를 입력으로 할 경우, (-input, +input) 범위 내에서 랜덤하게 degree를 결정합니다.

  • RandomPerspective
    랜덤하게 perspective transform을 실행합니다. 이때, 전체 이미지 중 변환하는 데이터의 비율, distoration ratio등을 파라미터로 설정가능합니다.
             

blur 관련 함수

  • GaussianBlur
    이미지를 샘플링 후, Gaussian blur를 적용하여 이미지를 흐릿하게 변형합니다. Gaussian blur에 대한 내용은 추가 포스트로 작성할 계획입니다. 입력 파라미터로는 kernel size와 sigma를 받습니다.
           

자동 augmentation 함수

데이터별 함수


Torch tensor에만 적용가능한 함수

  • Normalize
    주어진 평균과 표준편차를 계산하여 이미지를 정규화합니다. 입력 파라미터로는 평균과 표준편차를 받습니다.
  • LinearTransformation
    주어진 squared matrix에 따라 이미지를 변환합니다. 입력 파라미터로는 transformation matrix를 받습니다.
  • RandomErasing
    랜덤하게 직사각형 모양의 영역을 설정하고 영역내의 픽셀을 지웁니다. 입력 파라미터로는 sampling ratio p를 받습니다.
              

참고자료


profile
그래프와 이미지를 연구하는 데이터사이언티스트입니다.

0개의 댓글