画像分類用のカスタムモデルを作成する

1. 始める前に

前の Codelab では、数百クラスの画像を認識する基本的な画像ラベル付けモデルを使用した Android および iOS 向けアプリを作成しました。一般的な写真で花々、花、植物、空が見えました。

たとえば、特定の花、デイジー、バラを認識するようにアプリを更新するには、認識する花の種類ごとに多数のサンプルでトレーニングされたカスタムモデルが必要になります。

前提条件

  • この学習プログラムの前の Codelab。

演習内容と学習内容

  • TensorFlow Lite Model Maker を使用して画像分類器のカスタムモデルをトレーニングする方法。

必要なもの

  • 特定のハードウェアは必要ありません。ブラウザの Google Colab を使用して、すべてを行うことができます。

2. 作成を開始する

以下のコードはすべて準備済みです。こちらから Google Colab を使用して実行できます。Google Colab にアクセスできない場合は、リポジトリのクローンを作成し、CustomImageClassifierModel.ipynb というノートブックを使用できます。これは ImageClassificationMobile->colab ディレクトリにあります。

特定の花のサンプルが多数ある場合は、TensorFlow Lite モデルメーカーを使用してモデルをトレーニングすると、簡単に識別できます。

画像を含む .zip ファイルまたは .tgz ファイルをディレクトリに並べ替えて作成するのが最も簡単な方法です。たとえば、デイジー、タンポポ、バラ、ヒマワリ、チューリップの画像を使用する場合は、次のようにディレクトリに整理できます。

21 .12554e75b103f.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 クラスを使用してトレーニングするためにニューラル ネットワーク モデルに読み込むことができます。このフォルダを設定するだけで、すぐに使用できます。

機械学習のトレーニング モデルで重要な要素の 1 つが、トレーニングのすべてにデータを使用しないことです。あまり目を離さずに、まだ見たことのないデータでモデルをテストします。これは、ImageClassifierDataLoader から返されるデータセットの分割メソッドで簡単に実行できます。0.9 を渡すと、トレーニング データとして 90%、テストデータとして 10% を取得できます。

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

データが準備できたので、それを使用してモデルを作成できます。

5. 画像分類モデルを作成する

Model Maker では、ネットワーク設計の詳細、つまり畳み込み、高密度、再帰、フラット化、損失関数、オプティマイザーなどを扱えば、ニューラル ネットワークの設計の詳細が多く抽象化されます。デフォルトのモデルの場合、提供されたデータでニューラル ネットワークをトレーニングし、1 行のコードでモデルを作成できます。

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 は、デフォルトで 1000 種類の画像を認識することを目的とした「MobileNet」というモデルを使用しています。ここでは、1,000 個のクラスを区別する「特徴」を学習する方法を再利用できるというロジックが使用されています。同じ「特徴」を 5 つの花のクラスにマッピングできるため、ゼロから学習する必要はありません。

モデルには 5 つのエポックがあります。このエポックとは、ニューラル ネットワークが画像をラベルと一致させようとするトレーニングのすべてのサイクルです。約 1 分で 5 エポックまでは、トレーニング データに対して 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

現在のディレクトリのリストが表示されます。指定したボタンを使用してディレクトリを「上」に移動します。

21E6AC47C992142A

コードで、mm_flowers ディレクトリへのエクスポートを指定しています。開くと、「model.tflite」というファイルが表示されます。これはトレーニング済みのモデルです。

2017-07-07

ファイルを選択すると、右側に点が 3 つ表示されます。クリックするとコンテキスト メニューが表示され、そこからモデルをダウンロードできます。

aee14ad10c4a8a1a.png

しばらくすると、モデルがダウンロード フォルダにダウンロードされます。

7. 完了

モバイルアプリに統合する準備が整いました。 それは次のラボで行います。