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. 위 과정을 반복한다.
성능은 향상되지만 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
반응형
'AI > 딥러닝' 카테고리의 다른 글
[최적화] Optuna , Yaml에서 Model 생성 (0) | 2021.11.25 |
---|---|
[최적화] AutoML , Surrogate Model , Acquisition Function (0) | 2021.11.23 |
[최적화] 모델 경량화 , AutoML , Pruning , Knowledge Distillation , Tensor Decomposition , Quantization , Compiling (0) | 2021.11.22 |
[MRC] Retrieval, Scaling up with FAISS (2) | 2021.10.17 |
[MRC] Passage Retrieval – Dense Embedding (0) | 2021.10.17 |
댓글