TensorFlow의 image_dataset_from_directory 메서드를 활용하면 꽃 데이터셋을 손쉽게 로드하고, 디스크에 저장된 이미지 파일을 직접 사용해 모델을 학습시킬 수 있습니다.
전이 학습(Transfer Learning)과 TensorFlow Hub
적어도 하나 이상의 합성곱 계층(convolutional layer)을 포함하는 신경망을 합성곱 신경망(CNN)이라고 하며, 이를 활용해 이미지 학습 모델을 구축할 수 있습니다.
이미지 분류에서 전이 학습의 핵심 아이디어는 다음과 같습니다. 대규모 범용 데이터셋으로 사전 학습된 모델은 시각 세계를 위한 일반적인 특징 맵(feature map)을 이미 학습한 상태이기 때문에, 사용자가 처음부터 대형 모델을 학습시킬 필요 없이 이를 재활용할 수 있다는 점입니다.
TensorFlow Hub는 사전 학습된 TensorFlow 모델들을 모아놓은 저장소입니다. 이곳의 모델을 가져와 파인튜닝(fine-tuning)함으로써 커스텀 이미지 분류기를 효율적으로 만들 수 있습니다.
즉, TensorFlow Hub의 사전 학습된 분류 모델에 이미지를 입력하기만 해도 별도의 학습 과정 없이 예측 결과를 얻을 수 있으며, 이후 전이 학습을 통해 원하는 이미지 클래스에 맞게 모델을 미세 조정할 수 있습니다.
개발 환경: Google Colaboratory
본 예제 코드는 Google Colaboratory에서 실행됩니다. Google Colab은 브라우저에서 바로 Python 코드를 실행할 수 있게 해주며, 별도의 환경 설정이 필요 없고 GPU(그래픽 처리 장치)를 무료로 사용할 수 있습니다. Colaboratory는 Jupyter Notebook을 기반으로 구축되었습니다.
예제 코드
print("The flower dataset")
data_root = tf.keras.utils.get_file(
'flower_photos','https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz',
untar=True)
print("Load data into the model using images off disk with image_dataset_from_directory")
batch_size = 32
img_height = 224
img_width = 224
train_ds = tf.keras.preprocessing.image_dataset_from_directory(
str(data_root),
validation_split=0.2,
subset="training",
seed=123,
image_size=(img_height, img_width),
batch_size=batch_size)코드 출처 − https://www.tensorflow.org/tutorials/images/transfer_learning_with_hub
실행 결과
The flower dataset Downloading data from https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz 228818944/228813984 [==============================] - 4s 0us/step Load data into the model using images off disk with image_dataset_from_directory Found 3670 files belonging to 5 classes. Using 2936 files for training.
코드 설명
- 다양한 클래스로 모델을 학습해야 하는 경우 TFHub에서 제공하는 사전 학습 모델을 활용할 수 있습니다.
- 모델의 최상위 층(top layer)만 다시 학습시켜 커스텀 이미지 분류기를 만들 수 있습니다.
- 이를 통해 우리 데이터셋에 있는 클래스들을 인식하도록 모델을 조정합니다.
- 본 예제에서는 꽃 데이터셋(flower dataset)을 사용합니다.
image_dataset_from_directory메서드를 통해 디스크에 저장된 이미지 파일을 직접 읽어 들여 모델을 학습시킵니다.