오답노트

[keras] ImageDataGenerator 본문

Python/DL

[keras] ImageDataGenerator

권멋져 2022. 9. 29. 14:20

https://keras.io/ko/preprocessing/image/

 

Image Preprocessing - Keras Documentation

이미지 전처리 [source] ImageDataGenerator 클래스 keras.preprocessing.image.ImageDataGenerator(featurewise_center=False, samplewise_center=False, featurewise_std_normalization=False, samplewise_std_normalization=False, zca_whitening=False, zca_epsi

keras.io

ImageDataGenerator

ImageDataGenerator는 케라스에서 지원하는 객체로 따로 이미지를 담을 변수를 만들 필요 없이 손쉽게 이미지를 불러오고 옵션을 통해 이미지 증강으로 기존 이미지 데이터에서 왜곡된 데이터로 더 많은 경우의 이미지 데이터를 얻을 수 있다.

 

train_datagen = ImageDataGenerator(
    rescale=1. / 255,
    validation_split=0.2,
    rotation_range = 10,
    width_shift_range=0.1,
    height_shift_range=0.1
    
)
  • rescale : 이미지 스케일링을 지정한다.
  • validation_split : ImageDataGenerator으로 데이터를 만들때 subset 옵션으로 train과 validation으로 나눌 때 비율을 설정할 수 있다.
  • rotation_range : 이미지를 회전 시킬 범위를 설정한다. 범위는 각도이다.
  • width_shift_range : 이미지가 좌우로 움직일 비율을 설정합니다.
  • height_shift_range : 이미지가 상하로 움직일 비율을 설정합니다.

 

flow_from_directory

# train_genrator 생성
train_generator = train_datagen.flow_from_directory(
    TRAIN_PATH,
    batch_size = 32,
    target_size=(34, 180),
    color_mode='grayscale',
    class_mode = 'categorical',
    subset = 'training'

)

# validation_generator 생성
validation_generator = train_datagen.flow_from_directory(
    TRAIN_PATH, 
    batch_size= 32,
    target_size=(34, 180),
    color_mode='grayscale',
    class_mode = 'categorical',
    subset = 'validation'
  
)

flow_from_directory 함수는 디렉토리에서 이미지를 불러와 옵션에 맞게 이미지를 만들어내는 함수이다.

 

  • directory : 이미지가 저장된 경로
  • batch_size : 데이터 배치 사이즈 (기본 32)
  • target_size : 함수가 반환할 이미지 사이즈의 크기를 재조정할 치수를 튜플로 입력
  • color_mode : 함수가 반환할 이미지의 채널수를 설정한다. ("grayscale", "rgb", "rgba" 기본은 rgb)
  • class_mode : 함수가 반환될 라벨 배열의 종류를 결정한다. ("categorical", "binary", "sparse", "input", None 기본은 categorical)
    • categorical : multi class에서 사용가능한 2차원 배열
    • binary : 두 개의 class에서 사용가능한 1차원 배열
    • input : 원본 이미지와 동일한 이미지, 주로 자동 인코더와 함께 사용된다.
    • None : 어떠한 라벨도 생성하지 않는다.
  • subset : ImageDataGenerator에 validation_split이 설정되어 있을 때, 데이터의 종류를 설정할 수 있다. (training, validation)

 

사용 예제

model.fit(
        train_generator,				# <<<
        epochs=20,verbose=1,
        callbacks=[early_stopping],
        validation_data=validation_generator,		# <<<
#        validation_steps=50
        )
        
 pred_val = model.predict(validation_generator)