Going Deeper(CV)
3. 잘 만든 Augmentation, 이미지 100장 안 부럽다
실습 목표
- Augmentation을 하는 이유를 알아갑니다.
- 여러 가지 Augmentation 방법을 알아둡니다.
- 학습에 Augmentation을 적용할때 주의해야 할 점을 숙지합니다.
학습 내용
1. 데이터셋의 현실
1.1 대량의 데이터셋
- 라벨 데이터를 포함해 장당 10원에 불과하다고 하더라도,
이미지넷과 같은 데이터셋을 구축하기 위에서는 1억이 넘는 비용이 들어감.
1.2 직접 구축하는 데이터셋
- 직접 데이터를 수집한다면 만 장 단위로 데이터셋을 모으기가 쉽지 않다
2. Data Augmentation이란?
2.1 개요
Data augmentation은?
갖고 있는 데이터셋을 여러 가지 방법으로 증강시켜(augment) 실질적인 학습 데이터셋의 규모를 키울 수 있는 방법
- 데이터가 많아진다는 것은 과적합(overfitting)을 줄일 수 있다는 것을 의미
- 데이터를 늘릴 뿐만 아니라 모델이 실제 테스트 환경에서 잘 동작할 수 있도록 도와주기도 합니다.
- 이미지 데이터 augmentation
2.2 다양한 Image Augmentation 방법
3. 텐서플로우를 사용한 Image Augmentation
3.1 Flip
1) 준비하기
- PIL의 Image를 import한다
- PIL.Image로 이미지를 불러와서 적절하게 리사이즈
2) Flip 해보기
- PIL.Image의 flip_left_right와 flip_up_down 두 가지로 좌우, 상하 반전을 한다
- random_flip_left_right와 random_flip_up_down은 랜덤한 확률로 flip을 진행
3.2 Center Crop
- centeral_crop을 이용하여 확대하는데 인자로 이미지와 확대 매개변수가 들어가는데, 이 매개변수에 1이 들어가면 원본과 같은 이미지가 나온다. (매개변수는 0에서 1의 범위를 가짐)
3.3 random_crop
tf.image.random_crop(value, size)
size = [crop_height, crop_width, 3]
3.4 random_brightness()
tf.image.random_brightness(image, max_delta)
max_dalta -> float, must be non-negative.
4. Albummentations 라이브러리
이미지 증강을 위한 Python 라이브러리
- 배열을 이미지의 기본 형태로 사용(
np.array 사용)
import albumentations
- Affine()
- 이미지의 스케일(scale)을 조절하거나 평행이동, 또는 회전 등의 변환을 줄 수 있음
- RandomCrop()
- MedianBlur()
- ToGray()
- MultiplicativeNoise()
- 다음의 형태로 여러 기법을 한 번에 적용 가능
transform = A.Compose(
[A.ToGray(p=1),
A.MultiplicativeNoise(multiplier=[0.5, 1.5],
elementwise=True, per_channel=True, p=1),
A.RandomCrop(width=256, height=256)
]
)
5. 더 나아간 기법들
- 딥러닝을 활용 가능
- 대표적인 딥러닝의 예: GAN(Style Transfer)