ImageGenerator
많은 데이터를 신경망에 학습을 시키기 전 전처리를 하기 위해서 경로 설정 및reshaping과 같은 작업들이 필요합니다. 그러한 작업을 쉽게 만들어주는 것이 바로 ‘ImageDataGenerator’ 입니다.
tensorflow.keras.preprocessing.image에서 ImageDataGenerator import 해주고 fig.2와 같이 작성하여 사용하면 됩니다.
여기서 이미지 데이터를 normalization하기 위해 간단하게 rescale를 지정해줄 수 있습니다.
train_dir는 train set의 디렉토리 경로를 의미하는 것은 직관적으로 아실 겁니다. 우리의 raw 이미지 데이터들은 크기가 일정하지 않기 때문에 model에 넣을 때 input data 사이즈에 맞춰서 넣어 줘야합니다. 그러기 위해서는 이미지를 전부 reshape을 해줘야하는 번거로움이 있습니다. 하지만 generator는 이를 target_size 지정으로 알아서 이와 같은 역할을 수행해줍니다.
batch_size 역시 지정해줄 수 있습니다.
위의 코드에서는 class_mode가 ‘binary’로 되어 있는데 두 종류의 이미지를 분류할 때 사용을 합니다. 예를 들어 인간과 말을 분류한다고 하면 이 때 우리는 binary를 사용해야겠죠. class_mode에는 아래와 같이 ‘binary’ 말고도 다양한 parameter가 존재합니다. ImageGeneration의 parameter에 대해 자세히 알고 싶으면 아래링크를 참고하시면 좋을 것 같습니다.
https://www.tensorflow.org/api_docs/python/tf/keras/preprocessing/image/ImageDataGenerator
이렇게 imageGeneration에 대해서 알아봤는데요. tensorflow를 잘 몰랐을 때 numpy에 학습 데이터 전부 넣어서 메모리 초과로 학습이 안돼서 끙끙대던 기억이 떠오르네요. ImageGeneration은 메모리에 batch_size 만큼 메모리에 올려놓고 학습을 시키기 때문에 큰 데이터를 학습시킬 때 필요한 녀석입니다.