이미지 증강
in Deep Learning on CNN
💡 Image Augmentation
이미지 보강은 훈련데이터에 없는 이미지를 만들어내서 훈련데이터를
보강하는 기법을 말한다. Tensorflow에는 이미지 보강 작업을 쉽게 해주는
ImageDataGenerator가 있다.
✍🏼 keras-docs
import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.datasets.fashion_mnist import load_data
# fashion_mnist 데이터 로드
(x_train,y_train),(x_test,y_test) = load_data()
# input에 넣을 수 있게 shape 변환
x_train = x_train.reshape(len(x_train),28,28,1)
y_train = y_train.reshape(len(x_train),28,28,1)
# 0~1 사이의 값으로 정규화 / 255: 픽셀 값
x_train = x_train/255.0
y_train = y_train/255.0
# 이미지 증강 로직
image_generator = ImageDataGenerator(
rotation_range = 15,
zoom_range = 0.1,
width_shift_range = 0.15,
height_shift_range = 0.1,
horizontal_flip = True,
vertical_flip = False
)
# 증강할 이미지 개수
augment_size = 30000
# 0~59999 사이의 숫자에서 30000개 랜덤 추출
random_mask = np.random.randint(x_train.shape[0],size=augment_size)
# 30000개의 숫자를 리스트로 묶어줌. (copy로 원본 유지)
x_augmented = x_train[random_mask].copy()
y_augmented = y_train[random_mask].copy()
# flow 메소드를 사용하여 이미지 증강하기.
x_augmented = image_generator.flow(
x = x_augmented, # x : 입력 데이터
y = np.zeros(augment_size), # y : 라벨
batch_size = augment_size,
shuffle = False
).next()[0]
# 기존 이미지 + 증강된 이미지
x_train = np.concatenate((x_train,x_augmented))
# 기존 이미지의 라벨 + 증강된 이미지의 라벨
y_train = np.concatenate((y_train,y_augmented))
이미지 증강이 끝났으면 모델을 구축하고 학습을 시켜주면 된다.
이때 학습을 시킬 땐 “기존 이미지 + 증강된 이미지”로 학습을 시킨다.
추가적으로 flow 메소드를 사용하여 이미지를 증강할 때, next 메소드가 있다.
next 메소드는 리스트 안에 있는 요소들을 순차적으로 실행 시켜주는 로직을 갖고 있다.
그리고 뒤에 [0]을 붙혔는데 아마도 입력 데이터의 shape을 가져오려고 그런거 같다.
▪ 증강된 이미지 예시