torchvision의 데이터 augmentation 기법들 살펴보기
다량의 양질의 데이터는 좋은 딥러닝 모델을 만드는데 필수 조건입니다. 그런데 실제 산업 현장에서는 데이터가 충분히 확보 되어있지 않거나 명확히 분류되어있지 않은 경우가 많습니다. 특히, 공정과정에서 발생하는 이미지는 이런 경우가 비일비재합니다. 그러므로, 모델에 학습 시키기전 데이터 augmentation 과정은 필수입니다.
torchvision.transforms은 이미지의 다양한 전처리 기능을 제공하며 이를 통해 데이터 augmentation도 손쉽게 구현할 수 있습니다. 이에 본 포스팅에서는 torchvision의 transforms 메써드에서 제공하는 다양한 데이터 증강용 함수를 기능 중점적으로 소개드리고자 합니다.
더 자세한 내용은 pytorch에서 제공하는 공식 doc을 참고해주세요.
기능별 함수
crop 관련 함수
CentorCrop
이미지를 중앙에서 crop합니다. crop 후 output의 size를 parameter로 요구합니다.
FiveCrop
이미지의 귀퉁이 4개와 중앙, 총 5개 구역에서 crop을 합니다. 결과는 tuple 형태로 반환됩니다. crop 후 output의 size를 parameter로 요구합니다.
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 함수
AutoAugment
AutoAugment:Learning Augmentation Strategeis from Data에 기반하여 자동으로 데이터를 augemntation합니다. 이때 입력 데이터는 tensor의 경우 unit8이어야합니다. PIL의 경우, L 또는 RGB에서 가능합니다. 입력 파라미터로는 변형 정책(policy)을 받으며, 기본값은 AutoAugmentPolicy.IMAGENET입니다.
RandAugment
RandAugment : Practical automated data augmentation with a reduced search space에 기반하여 자동으로 데이터를 augmentation합니다. 데이터 타입은 AutoAugment와 동일하게 설정해야합니다.
TrivialAugmentWide
TrivialAugment : Tuning-free Yet State-of-the-Art Data Augmentation에 기반하여 자동으로 데이터를 augmentation합니다. 데이터 타입은 AutoAugment와 동일하게 설정해야합니다.
데이터별 함수
Torch tensor에만 적용가능한 함수
Normalize
주어진 평균과 표준편차를 계산하여 이미지를 정규화합니다. 입력 파라미터로는 평균과 표준편차를 받습니다.
LinearTransformation
주어진 squared matrix에 따라 이미지를 변환합니다. 입력 파라미터로는 transformation matrix를 받습니다.
RandomErasing
랜덤하게 직사각형 모양의 영역을 설정하고 영역내의 픽셀을 지웁니다. 입력 파라미터로는 sampling ratio p를 받습니다.
참고자료
- Pytorch torchvision 공식 문서, https://pytorch.org/vision/stable/transforms.html
- Where the light is, Data augmentation:color jitter, https://nrhan.tistory.com/entry/Data-augmentation-color-jitter
Author And Source
이 문제에 관하여(torchvision의 데이터 augmentation 기법들 살펴보기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@injokim/torchvision의-데이터-augmentation-기법들-확인하기
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Normalize
주어진 평균과 표준편차를 계산하여 이미지를 정규화합니다. 입력 파라미터로는 평균과 표준편차를 받습니다.
LinearTransformation
주어진 squared matrix에 따라 이미지를 변환합니다. 입력 파라미터로는 transformation matrix를 받습니다.
RandomErasing
랜덤하게 직사각형 모양의 영역을 설정하고 영역내의 픽셀을 지웁니다. 입력 파라미터로는 sampling ratio p를 받습니다.
- Pytorch torchvision 공식 문서, https://pytorch.org/vision/stable/transforms.html
- Where the light is, Data augmentation:color jitter, https://nrhan.tistory.com/entry/Data-augmentation-color-jitter
Author And Source
이 문제에 관하여(torchvision의 데이터 augmentation 기법들 살펴보기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@injokim/torchvision의-데이터-augmentation-기법들-확인하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)