어떤 모델이 됐던 데이터가 많아야 오버피팅을 피할 수 있음.
Data augmentation은 원래 이미지를 변형해서 이미지 수를 늘리는 것임.
우리가 학습할 때 사용한 데이터들은 실제 상황에서 없을 수도, 없는 데이터가 있을 확률이 높음.
따라서 여러 다양성을 가진 데이터들이 있어야 일반화하기 좋다.
Augmentation 유형
공간 / 픽셀 변형이 있음.
공간 : vertical, horizontal, center, random, rotate, translate ... 등 뒤집거나 돌리거나
픽셀 : bright, grayscale, blur, noise, gamma .. 등 밝게, 색상, 노이즈, 흐리거나
keras ImageDataGenerator
주피터 노트북으로 실습했습니다.
import os
import numpy as np
import pandas as pd
import cv2
import matplotlib.pyplot as plt
%matplotlib inline
!wget -O fish.jpg https://upload.wikimedia.org/wikipedia/commons/7/7a/Goldfish_1.jpg
image = cv2.cvtColor(cv2.imread('fish.jpg'), cv2.COLOR_BGR2RGB)
def show_image(image):
plt.figure(figsize=(8,8))
plt.imshow(image)
plt.axis('on')
show_image(image)
일단 image를 다운로드 받아서 보여준다.
from tensorflow.keras.preprocessing.image import ImageDataGenerator as IDG
data_gen = IDG(horizontal_flip=True)
batch = np.expand_dims(image, axis=0) #4차원으로 차원 증가 why? imagedatagenerator는 1장 이상의 이미지를 다운 받음.
data_gen.fit(batch) #fit하고
data_gen_flow = data_gen.flow(batch) #flow 적용
gen_image = next(data_gen_flow) #작동시키기
gen_image = np.squeeze(gen_image) #다시 3차원으로 다운
gen_image = gen_image.astype('int') #float로 반환되는거를 int로 바꾸고
show_image(gen_image) #출력
tensorflow.keras.preprocessing.image에 ImageDataGenerator를 불러온다.
ImageDataGenerator( 인자1, 인자2, 인자3 ... )
여러가지 인자를 넣을 수 있는데.
맨 처음 나온 Generator 유형이 여기에 해당된다.
위 코드에선 이미지를 좌우로 뒤집은 인자이다.
horizontal_flip=True
근데 여기서 중요한거는 좌우로 뒤집는 것 즉 Generator가 무조건 적용되는 것은 아니다.
이 이미지를 보면 2번 적용한 것인데
적용이 될수도, 안 될수도 있다.
왜 항상 적용이 되지 않냐면
원본 이미지를 잃을 수 있기 때문이다.
vertical_flip은 이미지를 상하로 뒤집는 인자이다.
위 처럼 적용이 될수도 안 될수도 있다.
rotation_range='각도', fill_mode='인자값', cval=명도
-60 ~ 60 도로 회전하고 돌린 후 남은 공간을 채운다. cval=0이기 떄문에 검정색으로 채움.
fill_mode의 값은 아래에 설명하겠다.
width_shift_range 는 좌우로 일정 비율만큼 이동하는 것이다.
지금 0.4로 되어있는데 이미지의 40% 이하만큼 랜덤으로 좌우로 움직인다.
그리고 fill_mode는 4가지가 있다.
nearest는 남는 공간을 가까운 픽셀값으로 바꾼다.
reflect는 남는 공간을 근처 공간처럼 바꾼다.
wrap은 이동하게 되면 잘리는 이미지가 생기는데 그 이미지를 빈공간에 채운다.
constant는 남는 공간을 특정 명도로 채우게 되는데 0~255값으로 cval=255 는 흰색으로 채움
다음은 확대, 축소이다.
zoom_range=[하한, 상산] 무작위 줌의 범위
1보다 크면 확대, 작으면 축소
'AI > 컴퓨터 비전' 카테고리의 다른 글
GoogleNet (InceptionNet) 정리해보기 (1) | 2023.10.10 |
---|---|
IOU : 모델이 예측한 결과와 실측 Box가 얼마나 정확하게 겹치는 가를 나타내는 지표 (0) | 2022.12.04 |
NMS : 여러 Bounding Box 중 확실한 Box만 선택하는 기법 (0) | 2022.12.04 |
[Python, OpenCV 4로 배우는 컴퓨터 비전과 머신러닝] CH03 (0) | 2022.12.04 |
[Python, OpenCV 4로 배우는 컴퓨터 비전과 머신러닝] CH02 (0) | 2022.11.25 |