CNN은 영상의 2차원 변환인 회전(Rotation), 크기(Scale), 밀림(Shearing), 반사(Reflection), 이동(Translation)과 같은 2차원 변환인 Affine Transform에 취약하여 변환된 사진 또는 영상을 다른 자료로 인식한다.
ImageDataGenerator는 Noise삽입, 색상, 밝기 변형 등을 활용하여 실시간으로 데이터 증강을 사용하고, 텐서 이미지 데이터 배치를 생성하여 데이터 학습의 정확도를 높이는 역할을 한다.
#ImageDataGenerator의 호출
from keras.preprocessing.image import ImageDataGenerator
#이미지 증강을 위한 옵션 사용
TRAINING_DIR = '/tmp/cats-v-dogs/training'
train_datagen = ImageDataGenerator(rescale = 1/255.0,
rotation_range=40,
width_shift_range=0.2,
height_shift_range = 0.2,
shear_range = 0.2,
zoom_range = 0.2,
horizontal_flip = True,
vertical_flip = True,
fill_mode = 'nearest')
train_generator = train_datagen.flow_from_directory(TRAINING_DIR, target_size=(150,150), batch_size=20, class_mode='binary')
VALIDATION_DIR = '/tmp/cats-v-dogs/testing'
validation_datagen = ImageDataGenerator(rescale = 1/255.0)
validation_generator = validation_datagen.flow_from_directory(VALIDATION_DIR, target_size=(150,150), batch_size=20, class_mode='binary')
rotation_range = 90
지정된 각도 범위내에서 임의로 원본이미지를 회전시킴. 단위는 도이며, 정수형이다. 예를 들어 90이라면 0도에서 90도 사이에 임의의 각도로 회전시킨다.
width_shift_range = 0.1
지정된 수평방향 이동 범위내에서 임의로 원본이미지를 이동시킨다. 수치는 전체 넓이의 비율(실수)로 나타낸다. 예를 들어 0.1이고 전체 넓이가 100이면, 10픽셀 내외로 좌우 이동시킨다.
height_shift_range = 0.1
지정된 수직방향 이동 범위내에서 임의로 원본이미지를 이동시킨다. 수치는 전체 높이의 비율(실수)로 나타낸다. 예를 들어 0.1이고 전체 높이가 100이면, 10픽셀 내외로 상하 이동시킨다.
shear_range = 0.5
밀림 강도 범위내에서 임의로 원본이미지를 변형시킨다. 수치는 시계반대방향으로 밀림 강도를 라디안으로 나타낸다. 예를 들어 0.5이라면, 0.5 라이안내외로 시계반대방향으로 변형시킨다.
zoom_range = 0.3
지정된 확대/축소 범위내에서 임의로 원본이미지를 확대/축소한다. “1-수치”부터 “1+수치”사이 범위로 확대/축소를 한다. 예를 들어 0.3이라면, 0.7배에서 1.3배 크기 변화를 시킨다.
horizontal_flip = True
수평방향으로 뒤집기를 한다.
vertical_flip = True
수직방향으로 뒤집기를 한다.
keras.io/ko/preprocessing/image/
tykimos.github.io/2017/06/10/CNN_Data_Augmentation/
'Tensorflow' 카테고리의 다른 글
판다스 Date Time Index #일자 / 시간 데이터 처리법 (0) | 2021.03.04 |
---|---|
타임시리즈 데이터 분석을 위한 Prophet (0) | 2021.03.04 |
callback 함수 (0) | 2021.03.02 |
Learning Curve // 학습곡선 (0) | 2021.03.02 |
딥러닝 Keras에서 loss함수의 종류와 선택 방법 및 코드 (0) | 2021.03.02 |