본문 바로가기
  • 콩's 코딩노트
TensorFlow

TensorFlow - Image Data Generator 를 이용해서 데이터 증강하기 (로컬 파일 / 변수에 저장된 파일)

by Cong_S 2022. 6. 15.

1. 이미지 파일을 가지고 있는 경우 (파일 디렉토리를 알 수 있는 경우)

CNN의 구성이 다 끝난 후 

TRAINING_DIR = '/tmp/cats-v-dogs/training'

train_datagen = ImageDataGenerator(rescale= 1/255.0, rotation_range=30, width_shift_range= 0.2, height_shift_range=0.2, shear_range=0.2, zoom_range=0.2, horizontal_flip= True, vertical_flip=True)

train_generator = train_datagen.flow_from_directory(TRAINING_DIR, 
                                                    target_size= (150,150),
                                                    class_mode= 'binary',
                                                    batch_size=10)
ImageDataGenerator를 변수에 입력할 때 파라미터로 이미지 증강을 사용할 수 있다.
 
사람이 보기엔 큰 차이가 아니라 같은 물체라 인식할 수 있어도 인공지능은 약간의 차이도 다른 물체라 인식하기 때문에
최대한 비슷한 이미지로 학습시켜주어야 한다.
 
이 때 이미지 증강을 이용해 학습 데이터를 변형하여 최대한 다양한 형태의 이미지를 학습시켜 효율을 높이는 것이다.
 
 
rotation_range=30 : 이미지를 회전해가면서 비슷한 이미지 학습
 
width_shift_range=0.2 : 좌우로 움직여가며 비슷한 이미지 학습
 
height_shift_range=0.2 : 위아래로 움직여가며 비슷한 이미지 학습
 
shear_range=0.2 : 특징적인 이미지를 기울여 변형하며 이미지 학습
 
zoom_range=0.2 : 이미지를 확대하여 이미지 학습
 
horizontal_flip= True : 좌우를 뒤집어 이미지 학습
 
vertical_flip=True : 상하를 뒤집어 이미지 학습
 

2. 넘파이 어레이로 이루어진 이미지파일 증강하는 방법

# 넘파이 어레이로 이미지 증강할 때에는 flow 함수를 이용한다.
# rescale= 1/255.0 부분은 이미 피처 스케일링 되어있는 경우 빼야한다.

train_datagen = ImageDataGenerator(rescale= 1/255.0, rotation_range=30, width_shift_range= 0.2, height_shift_range=0.2, shear_range=0.2, zoom_range=0.2, horizontal_flip= True, vertical_flip=True)

train_generator = train_datagen.flow(X_train, y_train)

기본적인 모습은 위와 같지만 파일 디렉토리가 없이 변수에 저장되어 있으므로 

이때는 flow 함수를 사용하면 된다.

 

놓치면 안될 부분은 

점은 데이터 전처리 과정에서 넘파이 어레이 파일을 이미 피처 스케일링 했다면

rescale 파라미터는 더이상 필요가 없으므로 삭제해주어야 한다는 부분이다.

댓글