본문 바로가기
AI/딥러닝

[최적화] Data Augmentation , AutoML

by 채채씨 2021. 12. 15.
728x90
반응형

 

Augmentation 기법

 

Data Augmentation

  • 기존 데이터에 변화를 가해 데이터를 추가로 확보
  • 데이터가 적거나 Imbalance한 상황에서 유용
  • 모델에 데이터의 불변성을 전달함으로써 더 Robust해짐
    • ex) 강아지는 회전하거나, 늘리거나, 일부분만 보여도 강아지
  • 데이터 종류(음성, 이미지, 텍스트 등)마다 Augmentation종류 달라짐

 

AutoML관점의 Augmentation

  • 경량화와 직접적인 연결은 없지만, 성능 향상을 위한 필수 기법
  • Augmentation도 파라미터이므로, AutoML의 search space에 포함 가능

 

Object detection의 대표적인 Augmentation기법

 

Image classification의 대표적인 Augmentation기법

  • ShearX(Y)
    • Affine transformation을 통해 한 쪽 축 방향으로 비트는 것
    • 아래 코드의 (1, magnitude * random.choice([-1, 1]), 0, 0, 1, 0)은 shear행렬의 1, 2행을 나열한 것이며, 1행 2열에 있는 값을 [-1, 1]사이 값으로 조절하여 이미지를 비튼다.
      • 음수면 왼쪽으로, 양수면 오른쪽으로 밀린다. 예시는 0.5이므로 오른쪽으로 밀린 것을 볼 수 있다.

  • TranslateX(Y)
    • 이미지를 특정 방향으로 이동시키는 것

  • Rotate
    • 각도 파라미터(rot)를 두어 이미지를 회전시키는 것

  • Contrast
    • 밝은 픽셀과 어두운 픽셀의 차이값을 조절하는 것
      • 1은 원본 / 0은 gray / 1이상은 컬러 대비가 심해짐

  • Invert
    • 256개의 rgb컬러를 가진 8비트 이미지가 있을 때, 255에서 원래 값을 빼 색을 뒤집는 것

  • Equalize
    • 픽셀값들을 대상으로 histogram을 그렸을 때 특정 픽셀값에 색상이 높은 경우, 색 구분이 잘 안 되고 있음을 의미한다. 그 분포를 고르게 만들어주면 색의 분포가 넓어지면서 풍부한 색감을 가진 이미지를 만들 수 있다.

  • AutoContrast
    • 픽셀값의 분포를 equalize하여 밝은 픽셀과 어두운 픽셀의 차이를 더 커지게 하는 것
    • 별도의 파라미터 없음

  • Solarize
    • threshold를 넘는 픽셀값(magnitude)에 대해 inver를 취하는 것

  • Posterize
    • 일종의 quantization로 원래 사용된 bit보다 더 작은 bit값으로 표현하는 것
    • 촘촘한 픽셀을 널찍한 픽셀로 표현하면서 비슷한 색의 값들을 같은 값으로 묶어서 표현

  • Color
    • 흑백과 컬러 표현
    • 0은 흑백 / 1은 원본 / 1 이상은 컬러감이 진함

  • Brightness
    • 밝기를 조절하는 것

  • Cutout
    • 이미지의 특정 부분을 도려내는 것


 

Dataset과 Model에 적합한 Image Augmentation 찾는 기법

 

Issue

  • Task, Dataset의 종류에 따라 적절한 Augmentation종류, 조합,정도(magnitude)가 다를 것
    • capacity가 작은 모델에 심한 Augmentation을 적용하면? 더 혼란스러울 것
    • MNIST데이터에 심한 rotation(180˚) Augmentation하면? 라벨이 잘못될 수 있음
  • Issue에 대한 제안: AutoML로 찾아내자!

 

AutoAugmentation : AutoML로 Augmentation policy 찾기

  • Data로부터 Data augmentation policy 학습
  • 5개의 sub policy, 각 policy는 2개의 Augmentation type, 각 probability와 magnitude를 가짐
  • Data augmentation policy는 찾은 5개의 sub policy를 적절히 조합하여 적용하는 것

 

1. augmentation type, probability, magnitude와 같은 configuration을 sampling한다.
2. 위 configuration으로 네트워크를 학습시키고 validation accuracy를 계산한다.
3. AutoML에서 Bayesain Optimization역할을 하는 controller를 학습시킨다.
4. 학습된 controller가 다음 시도해볼 만한 configuration(strategy)을 결정한다.
5. 위 과정을 반복한다.  

AutoML Augmentation과정

 

 

성능은 향상되지만 CIFAR-10학습만 해도 5,000시간의 GPU를 필요로할 만큼 학습에 큰 자원이 든다.

 

 

따라서 속도를 빠르게 하려는 접근들이 나타났으며, 그 중 RandAugment를 보자.

 

Rand Augmentation

  • 파라미터를 2개로 하여 search space를 줄임
    • N : 한 번에 Augtmentation종류 몇 개 적용할 것인지
    • M : 공통의 magnitude (Augmentation종류마다 다르게주는 것이 아니라 동일하게 적용)
  • 적은 파라미터만으로도 다른 알고리즘과 거의 동일한 성능
  • RandAug: 약 10^2 , AutoAug: 약 10^32

 

 

코드

 

<기본 구조>
Transform으로 Augmentation기법 인스턴스 생성
Datasets에 transform을 넣어서 dataset 생성
Dataloader에 dataset을 넣어서 dataloader 생성

 

<RandAugmentation 추가>
operations에 Augmentation종류 추가
transform에 RandAugmentation(operation, n_select, level, n_level) 추가

※ transform은 tensor를 입력받아 tensor로 출력하는 함수

 

<RandAugmentation 클래스>

def __call__
   - 이미지를 입력받아 random.sample로 Augmentation종류 선택
   - Augmentation종류마다 magnitude를 선택
   - 이때 level값을 받아 constant magnitude를 설정하거나 [0, n_level]사이에서 random magnitude설정]

def _apply_augmentation
   - transfor_info(list)에 정의된 Augmentation종류, low, high를 받음
   - 선택된 level크기로 Augmentation 적용

 

 

 

dataloader를 만드려면 dataset이 필요하므로 get_dataset을 통해 데이터를 생성한 후 get_dataloader로 반환한다.

 

 

dataset을 만드려면 transform이 필요하므로 augmentation.policies 인스턴스를 생성한 후 Dataset에 넣는다.

 

 

 

 

 

728x90
반응형

댓글