본문 바로가기

Back/Deep Learning

[Python] [CNN]점자번역 프로그램(3)

이전글에서 이어집니다.

 

 

3-2 이미지 데이터 불러오기

모델 러닝을 위한 이미지든 예측을 위한 이미지든 불러와 모델에 넣는 shape는 동일해야 합니다. 

전전 글에서 모델 분석하며 본 ImageDataGenerator를 통해 보다 쉽게 생성해낼 수 있습니다.

 


def data_ready():
    images_dir = './images'

    datagen = ImageDataGenerator(rotation_range=5,
                                 shear_range=5,
                                 validation_split=0.2,
                                 ) #20%를 검증모델로 사용.

    train_generator = datagen.flow_from_directory(images_dir,
                                                  target_size=(36,36),
                                                  subset='training')

    val_generator = datagen.flow_from_directory(images_dir,
                                                target_size=(36,36),
                                                subset='validation')

    return train_generator, val_generator

학습용 데이터를 준비하는 함수입니다. 약간의 회전과 shear_range로 손떨림 느낌을 주고자 했습니다. 또한 20%를 검증모델로 사용하게 됩니다. 

 

그렇기에 아래 train_generator, val_generator 에서 subset으로 구분을 받아올수 있습니다. 또한 target size를 통해 이미지의 크기를 조정해 불러 올 수 있습니다.

 

불러온 이미지들은 각각 반환됩니다.

 

불려진 데이터 셋은 위 와 같이 넣어집니다. 첫번째 칸에는 이미지의 RGB값이, 두번째 칸에는 Categorical variable이 자동으로 들어갑니다.

 

다만 불러올때 마다 불러오는 이미지의 순서는 랜덤, 학습용 데이터와 검증용 데이터역시 랜덤으로 분류 됩니다. 그렇기에 매번 돌릴때마다 학습정도, 오차율에서 차이가 나게 되고 일관적인 결과를 보이기 어렵습니다.


def load_image(img_path):
    images_dir = img_path
    datagen = ImageDataGenerator()
    real_generator = datagen.flow_from_directory(images_dir,
                                                 target_size=(36, 36))

    return real_generator

마찬가지로 예측을 위한 이미지를 불러올 함수를 만듭니다. 위의 경우와 다른 점은 이미지를 변형 없이 그대로 불러 온다는 점입니다. 

 

 


이하 코드 전문

from keras.preprocessing.image import ImageDataGenerator

def data_ready():
    images_dir = './images'

    datagen = ImageDataGenerator(rotation_range=5,
                                 shear_range=5,
                                 validation_split=0.2,
                                 ) #20%를 검증모델로 사용.

    train_generator = datagen.flow_from_directory(images_dir,
                                                  target_size=(36,36),
                                                  subset='training')

    val_generator = datagen.flow_from_directory(images_dir,
                                                target_size=(36,36),
                                                subset='validation')

    return train_generator, val_generator

def load_image(img_path):
    images_dir = img_path
    datagen = ImageDataGenerator()
    real_generator = datagen.flow_from_directory(images_dir,
                                                 target_size=(36, 36))

    return real_generator