이미지 분류기용 커스텀 모델 만들기

1. 시작하기 전에

이전 Codelab에서는 수백 개의 이미지 클래스를 인식하는 기본 이미지 라벨 지정 모델을 사용하는 Android 및 iOS용 앱을 만들었습니다. 꽃 그림은 꽃밭, 꽃, 식물, 하늘과 같이 전반적으로 보편적으로 인식되었습니다.

예를 들어 특정 꽃, 데이지, 장미를 인식하도록 앱을 업데이트하려면 인식하려는 꽃의 많은 예를 학습하도록 학습된 커스텀 모델이 필요합니다.

기본 요건

  • 이 학습 과정의 이전 Codelab입니다.

빌드하고 학습할 내용

  • TensorFlow Lite Model Maker를 사용하여 이미지 분류기 커스텀 모델을 학습시키는 방법

준비물

  • 별도의 하드웨어는 필요하지 않으며 모든 작업은 브라우저에서 Google Colab을 사용하여 완료할 수 있습니다.

2 시작하기

따라야 할 모든 코드가 준비된 상태이며 여기에서 Google Colab을 사용하여 실행할 수 있습니다. Google Colab에 액세스할 수 없는 경우 저장소를 클론하고 ImageClassificationMobile->colab 디렉터리에 있는 CustomImageClassifierModel.ipynb라는 노트북을 사용하면 됩니다.

특정 꽃의 예가 많다면 TensorFlow Lite 모델 제작자를 통해 모델을 인식하도록 비교적 쉽게 학습시킬 수 있습니다.

가장 쉬운 방법은 이미지를 포함한 .zip 또는 .tgz 파일을 만들어 디렉터리로 정렬하는 것입니다. 예를 들어 데이지, 민들레, 장미, 해바라기, 튤립의 이미지를 사용하는 경우 다음과 같은 디렉터리에 정리할 수 있습니다.

4ee12554e75b103f.png

이 파일을 압축하고 서버에 호스팅하면 함께 모델을 학습시킬 수 있습니다. 이 실습의 나머지 부분에서 사용할 수 있도록 준비된 실습을 사용하게 됩니다.

이 실습에서는 Google Colab을 사용하여 모델을 학습시키는 것으로 가정합니다. colab에서 colab.research.google.com을 확인할 수 있습니다. 다른 환경을 사용 중이라면 TensorFlow가 아닌 종속 항목을 많이 설치해야 할 수 있습니다.

3. 종속 항목 설치 및 가져오기

  1. TensorFlow Lite Model Maker를 설치합니다. pip를 설치하면 됩니다. 끝에 있는 &> /dev/null은 출력을 억제합니다. Model Maker는 즉시 관련이 없는 많은 항목을 출력합니다. 현재 작업에만 집중할 수 있도록 이 기능은 표시되지 않았습니다.
# Install Model maker
!pip install -q tflite-model-maker &> /dev/null
  1. 다음으로 사용해야 하는 라이브러리를 가져오고 TensorFlow 2.x를 사용 중인지 확인해야 합니다.
# Imports and check that we are using TF2.x
import numpy as np
import os

from tflite_model_maker import configs
from tflite_model_maker import ExportFormat
from tflite_model_maker import model_spec
from tflite_model_maker import image_classifier
from tflite_model_maker.image_classifier import DataLoader

import tensorflow as tf
assert tf.__version__.startswith('2')
tf.get_logger().setLevel('ERROR')

환경이 준비되었으므로 이제 모델을 만들 차례입니다.

4. 데이터 다운로드 및 준비

이미지가 폴더로 정리되어 있고 압축되어 있는 경우 ZIP 파일을 다운로드하여 압축을 푼 경우 파일이 있는 폴더에 따라 자동으로 라벨이 지정됩니다. 이 디렉터리는 data_path로 참조됩니다.

data_path = tf.keras.utils.get_file(
      'flower_photos',
      'https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz',
      untar=True)

이 데이터 경로는 TensorFlow Lite Model Maker의 ImageClassifierDataLoader 클래스를 사용한 학습을 위해 신경망 모델에 로드할 수 있습니다. 폴더를 가리키면 됩니다.

머신러닝을 이용한 모델 학습에서 중요한 요소 중 하나는 학습에 모든 데이터를 사용하지 않는 것입니다. 잠시 기다린 후에 이전에 본 적이 없는 데이터로 모델을 테스트합니다. ImageClassifierDataLoader에서 반환되는 데이터 세트의 분할 메서드를 사용하면 쉽게 처리할 수 있습니다. 0.9를 전달하면 학습 데이터의 90%, 학습 데이터로 10% 를 부여합니다.

data = DataLoader.from_folder(data_path)
train_data, test_data = data.split(0.9)

이제 데이터가 준비되었으므로 데이터를 사용하여 모델을 만들 수 있습니다.

5 이미지 분류기 모델 만들기

Model Maker는 신경망 설계의 많은 세부사항을 추상화하므로 신경망 설계를 처리할 필요가 없습니다. 컨볼루션, 밀집, relu, 평면화, 손실 함수 및 옵티마이저와 같은 작업을 할 수 있습니다. 기본 모델의 경우 제공된 코드만으로 신경망을 학습시켜 모델을 한 줄만 작성하면 됩니다.

model = image_classifier.create(train_data)

이 코드를 실행하면 다음과 유사한 출력이 표시됩니다.

Model: "sequential_2"
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
hub_keras_layer_v1v2_2 (HubK (None, 1280)              3413024
_________________________________________________________________
dropout_2 (Dropout)          (None, 1280)              0
_________________________________________________________________
dense_2 (Dense)              (None, 5)                 6405
=================================================================
Total params: 3,419,429
Trainable params: 6,405
Non-trainable params: 3,413,024
_________________________________________________________________
None
Epoch 1/5
103/103 [===] - 15s 129ms/step - loss: 1.1169 - accuracy: 0.6181

Epoch 2/5
103/103 [===] - 13s 126ms/step - loss: 0.6595 - accuracy: 0.8911

Epoch 3/5
103/103 [===] - 13s 127ms/step - loss: 0.6239 - accuracy: 0.9133

Epoch 4/5
103/103 [===] - 13s 128ms/step - loss: 0.5994 - accuracy: 0.9287

Epoch 5/5
103/103 [===] - 13s 126ms/step - loss: 0.5836 - accuracy: 0.9385

첫 번째 부분에서는 모델 아키텍처를 보여줍니다. Model Maker가 백그라운드에서 실행하는 작업은 전이 학습이라고 하며 기존의 선행 학습된 모델을 시작점으로 사용하고 모델이 이미지를 구성하고 적용하는 방식을 학습한 결과를 시작점으로 활용합니다. 다섯 가지 꽃을 이해할 수 있습니다. 첫 번째 행에서 다음과 같이 표시됩니다.

hub_keras_layer_v1v2_2 (HubK (None, 1280)              3413024

핵심은 '허브'라는 단어로, 이 모델이 TensorFlow Hub에서 유래되었음을 알 수 있습니다. 기본적으로 TensorFlow Lite Model Maker는 1, 000개 유형의 이미지를 인식하도록 설계된 'MobileNet' 모델을 사용합니다. 여기에서 로직은 1,000개의 클래스를 구분하기 위해 '기능'을 학습함으로써 사용하는 방법론을 재사용할 수 있다는 것입니다. 동일한'특징'이 5가지 꽃의 클래스에 매핑되므로 처음부터 새로 배우지 않아도 됩니다.

이 모델은 5에포크를 거쳤습니다. 즉, 에포크는 신경망이 이미지를 라벨과 일치시키려고 하는 전체 학습 주기입니다. 5에포크까지 진행했을 때 약 1분 만에 학습 데이터의 정확도가 93.85% 였습니다. 5개의 수업이 있는데 무작위 추측이 20% 의 정확성을 갖추었으므로 진행 상황입니다. '손실' 숫자도 보고하지만 지금은 이를 무시해도 됩니다.

초기에 데이터를 분할하여 테스트 데이터와 테스트 데이터로 나누면 이전에 보지 못한 데이터 네트워크가 어땠는지 측정할 수 있습니다. model.evaluate를 사용해 실제 실적을 확인할 수 있습니다. 테스트 데이터:

loss, accuracy = model.evaluate(test_data)

그러면 다음과 같이 출력됩니다.

12/12 [===] - 5s 115ms/step - loss: 0.6622 - accuracy: 0.8801

여기에서 정확성을 확인하세요. 88.01%이므로 실제 모델의 기본 모델을 사용하면 이러한 수준의 정확성을 기대할 수 있습니다. 약 1분간 학습된 기본 모델은 나쁘지 않습니다. 물론 모델을 개선하기 위해 많은 노력을 기울일 수 있는데, 과학적으로는 이렇죠.

6. 모델 내보내기

이제 모델이 학습되었으므로 다음 단계는 모바일 애플리케이션에서 사용할 수 있는 .tflite 형식으로 모델을 내보내는 것입니다. Model Maker는 사용할 수 있는 간편한 내보내기 방법을 제공합니다. 출력할 디렉터리를 지정하기만 하면 됩니다.

코드는 다음과 같습니다.

model.export(export_dir='/mm_flowers')

Google Colab에서 모델을 실행하는 경우 화면 왼쪽의 폴더 아이콘을 클릭하여 모델을 확인할 수 있습니다.

cc5b9988775633b4.png

여기에서 현재 디렉터리 목록이 표시됩니다. 표시된 버튼을 사용하여 디렉터리를 'up'으로 이동합니다.

51e6ac47c992142a.png

코드에서 mm_flowers 디렉터리로 내보내도록 지정하셨습니다. 열면'model.tflite' 파일이 표시됩니다. 학습된 모델입니다.

57bad87f294fd189.png

파일을 선택하면 오른쪽에 점 3개가 표시됩니다. 이 메뉴를 클릭하면 컨텍스트 메뉴가 표시되며 여기에서 모델을 다운로드할 수 있습니다.

aee14ad10c4a8a1a.png

잠시 후 모델이 다운로드 폴더에 다운로드됩니다.

7 축하합니다

이제 모바일 앱에 통합할 준비가 되었습니다. 이 작업은 다음 실습에서 진행합니다.