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

1. 시작하기 전에

이전 Codelab에서는 수백 개의 이미지 클래스를 인식하는 기본 이미지 라벨 지정 모델을 사용하는 Android 및 iOS용 앱을 만들었습니다. 꽃잎, 꽃, 식물, 하늘을 보는 일반적인 꽃 사진을 인식했습니다.

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

기본 요건

  • 이 학습 과정의 이전 Codelab

빌드하고 학습할 내용

  • TensorFlow Lite Model Maker를 사용하여 Image Classifier 커스텀 모델을 학습시키는 방법

필요한 항목

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

2. 시작하기

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

특정 꽃의 예시가 많다면 TensorFlow Lite Model maker를 사용하여 모델을 인식하도록 모델을 학습시키는 것이 상대적으로 쉽습니다.

가장 쉬운 방법은 이미지가 포함된 .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가 백그라운드에서 수행하는 작업을 전이 학습이라고 합니다. 전이 학습은 기존의 선행 학습된 모델을 시작점으로 사용하며, 이미지가 구성되는 방식에 대해 모델이 학습한 내용을 취합하여 이 5가지 꽃을 이해하는 데 적용합니다. 첫 번째 줄에서 다음을 확인할 수 있습니다.

hub_keras_layer_v1v2_2 (HubK (None, 1280)              3413024

핵심은 '허브'라는 단어로, 이 모델이 TensorFlow Hub에서 왔다는 것을 알려줍니다. 기본적으로 TensorFlow Lite Model Maker는 'MobileNet'이라는 모델을 사용합니다. 이는 1,000가지 유형의 이미지를 인식하도록 설계되었습니다. 여기서의 논리는 '특성'을 학습하여 사용하는 방법론입니다. 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

그러면 현재 디렉터리 목록이 표시됩니다. 표시된 버튼을 사용하여 "위로" 이동 디렉터리:

51e6ac47c992142a.png

mm_flowers 디렉터리로 내보내도록 지정한 코드에서 파일을 열면 ‘model.tflite’이라는 파일이 표시됩니다. 이것이 바로 학습된 모델입니다.

57bad87f294fd189.png

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

aee14ad10c4a8a1a.png

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

7. 축하합니다

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