본문 바로가기
인공지능/Deep Learning

[Deep Learning] 이미지 파일 학습 데이터로 만들기(+이미지 증강) ImageDataGenerator

by coding_su 2022. 12. 30.

📝CNN 학습 하기전 이미지 파일(jpg, png..)을 학습 데이터(넘파이의 어레이)로 만드는 방법

fit 함수에 들어가는 데이터는 넘파이 어레이가 들어가야하지만 가지고 있는 데이터는 이미지 파일(png)이라

현재 상태로는 fit 함수를 이용한 학습이 불가능하다

이미지 파일을 넘파이 어레이로 변환시켜주는 라이브러리(ImageDataGenerator)를 사용해 변환하자

 
from keras.preprocessing.image import ImageDataGenerator

# 파라미터에 적은 rescale=는 이미지 사이즈를 255로 나눠서 피처스케일링 해서 가져오라는 것
# 라이브러리를 변수에 저장하여 사용한다
train_datagen = ImageDataGenerator(rescale= 1/255.0)
validation_datagen = ImageDataGenerator(rescale= 1/255.0)

# 이미지가 들어있는 디렉토리의 정보, 이미지 사이즈 정보, 몇개로 분류할지 정보를 입력
train_generator = train_datagen.flow_from_directory( '/tmp/horse-or-human', target_size=(300, 300), class_mode= 'binary' )
validation_generator = validation_datagen.flow_from_directory( '/tmp/validation-horse-or-human',target_size=(300, 300), class_mode= 'binary' )
flow_from_directory 파라미터 입력시
넘파이의 target_size와 모델의 input_shape은 가로세로가 같아야 한다
class_mode는 2개로 분류할때는 binary, 3개 이상일때는 categorical 사용한다( 디폴트값은 categorical )

 

이미지 데이터가 별로 없다면 증강하여 학습을 시키기

(참고 : https://keras.io/api/preprocessing/image/)

from keras.preprocessing.image import ImageDataGenerator

# 학습데이터 이미지 증강
# 학습데이터는 별로 없어서 증강 시킨건데 테스트 데이터는 증강해도 되고 안해도 된다
train_datagen = ImageDataGenerator( rescale= 1/255.0, rotation_range= 30, width_shift_range= 0.2, height_shift_range= 0.2, shear_range= 0.3, zoom_range= 0.5, horizontal_flip= True )
test_datagen = ImageDataGenerator( rescale= 1/255.0 )
train_generator = train_datagen.flow_from_directory(train_dir, target_size=(150, 150), class_mode= 'binary', batch_size= 20)


# 이미지가 아닌 넘파이 데이터일때 증강 시키기
train_datagen = ImageDataGenerator( width_shift_range= 0.2, height_shift_range= 0.2, zoom_range=0.2, horizontal_flip=True )
train_generator = train_datagen.flow(X_train, y_train)

댓글