데이터 증강 :: 컴퓨터 비전 - mindscale
Skip to content

데이터 증강

실습 이미지 불러오기

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt

img = Image.open('balloon.webp')
image = np.array(img)
image = np.expand_dims(image, 0)

크기 및 배율 조정하는 모델

import tensorflow as tf
from tensorflow.keras.layers import *

IMG_SIZE = 180
shape = tf.keras.Sequential([
    Resizing(IMG_SIZE, IMG_SIZE),
    Rescaling(1/255)])

함수처럼 적용 가능

shape_result = shape(image)
plt.imshow(shape_result[0])
<matplotlib.image.AxesImage at 0x1722b097580>

데이터 증강 레이어

모든 factor는 0~1 범위(0%~100%)

  • RandomContrast(factor): 대비(contrast)를 무작위로 조절한다
  • RandomCrop(height, width): 이미지를 무작위로 자른다
    • heightwidth는 자를 크기
  • RandomFlip(mode): 이미지를 무작위로 뒤집는다
    • mode="horizontal_and_vertical": 수평과 수직으로(기본값)
    • mode="horizontal": 수평 방향으로, mode="vertical": 수직 방향으로만
  • RandomHeight(factor): 높이를 무작위로 바꾼다
  • RandomRotation(factor): 이미지를 무작위로 회전시킨다
  • RandomTranslation(height_factor, width_factor): 이미지를 무작위로 대칭 이동 시킨다
  • RandomWidth(factor): 폭을 무작위로 바꾼다
  • RandomZoom(height_factor, width_factor): 무작위로 확대한다

증강 모델

aug = tf.keras.Sequential([
    RandomFlip(),
    RandomRotation(0.2)
])

함수처럼 적용 가능

aug_result = aug(shape_result)
plt.imshow(aug_result[0])
<matplotlib.image.AxesImage at 0x1722a021420>

증강 레이어와 predict

증강 레이어는 함수처럼 사용할 때만 적용됨 predict를 이용하면 적용되지 않음(학습이 끝난 후 예측을 할 때는 적용 X)

same_result = aug.predict(shape_result)
plt.imshow(same_result[0])
1/1 [==============================] - 0s 13ms/step
<matplotlib.image.AxesImage at 0x17224b0d960>

전처리 레이어를 모델에 직접 추가

나머지 레이어와 동기적으로 실행, GPU 가속을 이용 모델을 내보낼 때 함께 저장, 사용시 별도 처리 필요 없음 데이터 증강은 model.fit에서만 작동, 테스트할 때 비활성화

model = tf.keras.Sequential([
    shape,
    aug,
    Dense(1, activation='sigmoid')
])

전처리 레이어로 데이터셋 만들기

나머지 레이어와 비동기적으로 CPU에서 실행 전처리와 증강을 미리해둘 수 있으므로 훈련 속도 향상

preproc = tf.keras.Sequential([shape, aug])

적용

aug_dataset = train_dataset.map(lambda x, y: (preproc(x), y))