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

1. 시작하기 전에

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

특정 꽃(예: 데이지 또는 장미)을 인식하도록 앱을 업데이트하려면 인식하려는 각 꽃 유형의 많은 예시로 학습된 맞춤 모델이 필요합니다.

기본 요건

  • 이 학습 과정의 이전 Codelab

빌드할 항목 및 학습할 내용

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

필요한 항목

  • 특정 하드웨어는 필요하지 않으며 브라우저에서 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 install을 사용하여 이 작업을 수행할 수 있습니다. 끝에 있는 &> /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, flatten, 손실 함수, 옵티마이저와 같은 항목을 처리하지 않아도 됩니다. 기본 모델의 경우 제공된 데이터로 신경망을 학습시켜 단 한 줄의 코드로 모델을 만들 수 있습니다.

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

키는 'Hub'라는 단어로, 이 모델이 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.export(export_dir='/mm_flowers')

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

cc5b9988775633b4.png

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

51e6ac47c992142a.png

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

57bad87f294fd189.png

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

aee14ad10c4a8a1a.png

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

7. 축하합니다

이제 모바일 앱에 통합할 수 있습니다. 다음 실습에서 이 작업을 수행합니다.