[AIFFEL 울산 1기 - Going Deeper(CV)] 3. 잘 만든 Augmentation, 이미지 100장 안 부럽다

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 방법

  • Flipping

    • 이미지를 대칭하는 기능
    • detection이나 segmentation처럼 정확한 정답 영역이 존재하는 경우 라벨도 함께 좌우 반전 해주어야 한다.
    • 숫자나 문자를 인식하는 경우에도 주의 필요!
  • Gray scale

    • 3가지 채널(channel)을 가진 RGB 이미지를 하나의 채널을 가지도록 하는 기능
    • 각 채널마다 가중치를 주어 가중합을 구하는데, 각 가중치의 합은 1이 된다.
  • Saturation

    • HSV 모델의 S(Saturation, 채도)를 조절하여 색의 선명도(순수함)에 변화를 주는 기능
  • Brightness

    • 밝기를 조절하는 기능
  • Rotation

    • 이미지를 회전하는 기능
    • 90도나 180도의 경우 형태를 고려하지 않아도 되지만 그 외의 경우는 직사각형에 맞춰 이미지의 형태를 고려해야 한다.
  • Center Crop

    • 이미지의 중앙을 확대하는 기능
    • 내용물의 형상을 유지하는 한도에서 해야한다.
  • 정리
    [https://github.com/aleju/imgaug]

  • 그 외

    • Gaussian noise, Contrast change, Sharpen, Affine transformation, Padding, Blurring, ...

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()
    • 이미지를 랜덤하게 crop 할 수 있음
  • 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)

좋은 웹페이지 즐겨찾기