UOMOP
Data Augmentation(데이터 증강) 기본 본문
Data Augmentation(데이터 증강) :
CNN 모델의 성능을 높이고, overfitting을 극복할 수 있는 가장 좋은 방법은 다양한 우형의 학습 이미지 데이터의 양을 늘리는 것이다. 데이터 증강은 다양한 유형의 학습 이미지 데이터의 양을 늘리는 것이지만, 실제 개수를 늘리는 것이 아니라, epoch마다 변형된 image가 학습하는 데 사용되는 것이다. iteration이 돌 때마다 사진이 변형되는 것이지, 사진이 여러 개 생기는 것은 아니다.
공간(spatial) 레벨 변형, 픽셀(pixel) 레벨 변형을 분류가 되며,
keras의 대표적인 Augmentation으로는 ImageDataGenerator가 있다.
1. 각종 모듈, 함수 호출
import numpy as np
import pandas as pd
import os
import cv2
import matplotlib.pyplot as plt
from tensorflow.keras.preprocessing.image import ImageDataGenerator
def show_image(image) :
plt.figure(figsize=(8, 8))
plt.imshow(image)
plt.axis("off")
2. 사용할 이미지 불러오기
!wget https://www.sciencenews.org/wp-content/uploads/2020/03/033120_HT_covid-cat_feat-1028x579.jpg
3. 이미지를 데이터로 불러오고, RGB channel 순으로 바꾸기
cat_BGR = cv2.imread("033120_HT_covid-cat_feat-1028x579.jpg")
cat_3dim = cv2.cvtColor(cat_BGR, cv2.COLOR_BGR2RGB)
show_image(cat_3dim)
4. fit()을 위한 차원 확장
print(" 기존 사진의 shape : {}".format(cat_3dim.shape))
cat_4dim = np.expand_dims(cat_3dim, axis=0)
print("차원확장 후 사진의 shape : {}".format(cat_4dim.shape))
# augmentation을 적용시킬때는 4차원 image data가 필요하다.
기존 사진의 shape : (579, 1028, 3)
차원확장 후 사진의 shape : (1, 579, 1028, 3)
5. Augmentation!
data_generator = ImageDataGenerator(horizontal_flip=True)
data_generator.fit(cat_4dim)
data_gen_hor = data_generator.flow(cat_4dim)
aug_cat_4dim = next(data_gen_hor)
aug_cat_3dim = np.squeeze(aug_cat_4dim)
aug_cat_3dim = aug_cat_3dim.astype("int")
show_image(cat_3dim)
show_image(aug_cat_3dim)
위 상황, image가 좌우로 뒤집힌 것을 확인할 수 있지만, random한 확률로 적용이 됨을 알아야 한다.
'Ai > DL' 카테고리의 다른 글
Data Augmentation(픽셀 기반) (0) | 2022.02.10 |
---|---|
Data Augmentation(공간 기반) (0) | 2022.02.10 |
Callback (ModelCheckpoint, ReduceLROnPlateau, EarlyStopping) (0) | 2022.02.10 |
Overfitting 극복 using 가중치 규제 (0) | 2022.02.10 |
Overfitting 극복 using GAP(GlobalAveragePooling) (0) | 2022.02.09 |
Comments