ML Kit で AutoML Vision を使用してデバイス上の画像分類モデルをトレーニングしてデプロイする

1. はじめに

最近の ML の進歩により、コンピュータは画像内の物体を比較的簡単に認識できるようになりました。この Codelab では、さまざまな種類のオブジェクトを認識できる画像分類モデルを構築し、そのモデルを Android アプリと iOS アプリにデプロイするエンドツーエンドの手順を説明します。ML Kit と AutoML を使用すると、ML の専門知識がなくても、モデルを大規模に構築してデプロイできます。

ML Kit とは

ML Kit は、Google の機械学習に関する専門知識を Android アプリや iOS アプリに提供するモバイル SDK です。パワフルでありながら使いやすいパッケージで提供されています。ML の初心者でも経験者でも、必要な機能はわずか数行のコードで簡単に実装できます。テキストや顔などを認識できる API がいくつかあり、すぐに使用できます。ただし、画像からさまざまな種類の花を認識する場合など、API でサポートされていないオブジェクトを認識する必要がある場合は、独自のモデルをトレーニングする必要があります。そのような場合に役立つのが AutoML です。

AutoML とは

Cloud AutoML は ML プロダクト スイートです。ML の専門知識が限られている開発者でも、Google の最先端の転移学習と Neural Architecture Search テクノロジーを活用して、ビジネスニーズに合った高品質のモデルをトレーニングできます。

この Codelab では、ML Kit の AutoML Vision Edge を使用して、花の分類モデルをトレーニングします。モデルはクラウドでトレーニングされますが、アプリによってバンドルまたはダウンロードされ、デバイス上で推論を完全に実行します。

93f21fd287496e4e.png

学習内容

  • ML Kit で AutoML Vision Edge を使用して画像分類モデルをトレーニングする方法。
  • ML Kit SDK を使用して Android または iOS のサンプルアプリで実行する方法

必要なもの

Android アプリの場合

iOS アプリの場合

  • XCode の最新バージョン(v10.2 以降)
  • iOS シミュレーターまたは物理的な iOS デバイス(v9.0 以降)
  • CocoaPods
  • Swift での iOS 開発に関する基本的な知識

2. セットアップ

コードとトレーニング データセットをダウンロードする

この Codelab のソースコードとトレーニング データセットを含む ZIP アーカイブをダウンロードします。ローカルマシンにアーカイブを展開します。

Firebase コンソール プロジェクトの作成

  1. Firebase コンソールに移動します。
  2. [新しいプロジェクトを作成] を選択し、プロジェクトに「ML Kit Codelab」という名前を付けます。

Android アプリを設定する

  1. Android アプリを Firebase プロジェクトに追加します。Android パッケージ名: com.google.firebase.codelab.mlkit.automl
  2. google-services.json の構成ファイルをダウンロードし、Android アプリの android/mlkit-automl/app/google-services.json に配置します。

iOS アプリを設定する

  1. Firebase プロジェクトに iOS アプリを追加します。iOS バンドル ID: com.google.firebase.codelab.mlkit.automl
  2. GoogleService-Info.plist の構成ファイルをダウンロードし、手順に沿って iOS アプリ(ios/mlkit-automl/GoogleService-Info.plist)に配置します。

3. トレーニング データセットを準備する

さまざまな種類のオブジェクトを認識するようにモデルをトレーニングするには、一連の画像を準備し、それぞれにラベルを付ける必要があります。この Codelab で使用するクリエイティブ・コモンズ ライセンスの花の写真のアーカイブが作成されました。

データセットは flower_photos.zip という ZIP ファイルにパッケージ化されています。これは、前の手順でダウンロードした zip アーカイブに含まれています。

データセットを探索する

flower_photos.zip ファイルを解凍すると、データセットには 5 種類の花(タンポポ、デイジー、チューリップ、ヒマワリ、バラ)の画像が含まれていて、それらが花の名前が付いたフォルダに整理されていることがわかります。これは、AutoML にフィードして画像分類モデルをトレーニングするためのトレーニング データセットを作成する便利な方法です。

このトレーニング データセットには、花の種類ごとに 200 個の画像があります。モデルのトレーニングに必要な画像は、1 クラスあたり 10 個以上です。ただし、一般に、トレーニング画像が多いほどモデルの品質が高まります。

e5772b6527a6048d.png 6c4443d31cd5653e.png

4. モデルをトレーニングする

トレーニング データセットをアップロードする

  1. Firebase コンソールで、作成したプロジェクトを開きます。
  2. [ML Kit] を選択 >AutoML
  3. ウェルカム画面が表示される場合があります。該当する場合は [始める] を選択します。
  1. 設定が完了したら、[データセットを追加] を選択し、「Flowers」という名前を付けます。
  2. トレーニング データには画像ごとに 1 つのラベルしか含まれないため、[モデルの目標] で [単一ラベル分類] を選択します。
  3. [作成] を選択します。
  4. 前の手順でダウンロードした flower_photos.zip ファイルをアップロードして、花のトレーニング データセットをインポートします。
  5. インポート タスクが完了するまで数分待ちます。
  6. これで、データセットが正しくインポートされていることを確認できます。
  7. トレーニング データセット内のすべての画像にラベルが付いているため、モデルのトレーニングに進むことができます。

cdb18b61f890934f.png

画像分類モデルをトレーニングする

このモデルは、コンピューティング能力とストレージが制限されたモバイル デバイス上で稼働するため、モデルの精度だけでなく、モデルのサイズと速度にも配慮する必要があります。モデルの精度、レイテンシ(画像を分類するまでにかかる時間)、モデルサイズの間には常にトレードオフがあります。一般に、精度の高いモデルはサイズも大きく、画像を分類するのに時間がかかります。

AutoML にはいくつかのオプションがあります。具体的には、精度を最適化する方法、レイテンシとモデルサイズを最適化する方法、バランスを最適化する方法を選択できます。モデルのトレーニング期間を選択することもできます。データセットが大きいほど、トレーニングに時間がかかります。

dd6b7eaa2dd5a9de.png

モデルを自分でトレーニングする場合は、次の手順を実施します。

  1. [モデルをトレーニングする] を選択します。
  2. [汎用] オプションと [1 コンピューティング時間] のトレーニング時間を選択します。
  3. トレーニング タスクが完了するまで、しばらく(数時間程度)待ちます。
  4. トレーニング タスクが終了すると、トレーニング済みモデルのパフォーマンスに関する評価指標が表示されます。

73f98fbed5ae5ee5.png

5. モバイルアプリでモデルを使用する

準備

  • この Codelab には、モバイルアプリで前にトレーニングした画像分類モデルを使用する方法を示す、Android と iOS の両方のサンプルアプリが含まれています。2 つのアプリの機能は似ています。使い慣れたプラットフォームを選択できます。
  • 先へ進む前に、サンプルアプリをダウンロードし、ステップ 2 で設定済みであることを確認してください。
  • また、選択したプラットフォーム(Android/iOS)用のアプリをビルドできるように、ローカル環境が設定されていることを確認してください。

画像分類モデルをダウンロード

  • 前の手順でモデルをトレーニングした場合は、[ダウンロード] を選択してモデルを取得します。
  • モデルをトレーニングしていない場合や、トレーニング タスクがまだ終了していない場合は、サンプルアプリに含まれているモデルを使用できます。

サンプルアプリにモデルを追加する

サンプルアプリにモデルを追加するだけで、すぐに機能します。ML Kit AutoML をアプリに統合する方法の詳細なガイドについては、ドキュメント(AndroidiOS)をご覧ください。ML Kit SDK とやり取りするコードは、それぞれ ImageClassifier.kt ファイルと ImageClassifier.swift ファイルに含まれているため、そこから始めてアプリの動作を確認できます。

モデルをデプロイするには、ローカルとリモートの 2 つの方法があります。

  • ローカルモデルは主に、画像分類モデルをアプリバイナリにバンドルするために使用されますが、ローカル ストレージに保存されたモデルを提供することもできます。バンドルにより、ユーザーが App Store または Google Play ストアからアプリをダウンロードした後、すぐにモデルを利用できるようになります。また、インターネット接続がなくても動作します。
  • リモートモデルとは、モデルが Firebase でホストされ、初めて必要なときにのみユーザーのデバイスにダウンロードされることを意味します。その後、モデルはオフラインでも機能します。

2e71ed2c7cb8757c.png

Android アプリ

  1. Android Studio を開きます。
  2. Android アプリを android/mlkit-automl/ にインポートします。
  3. (省略可)ダウンロードしたモデルを抽出し、その内容をサンプルアプリに含まれているモデルにコピーします。10cf6b1e0f34de29.png
  4. Android Studio ツールバーの実行アイコン(c8b8a080b7ead886.png)をクリックして、さまざまな種類の花を認識できることを確認します。

2e71ed2c7cb8757c.png

iOS アプリ

  1. ターミナルを開いて ios/mlkit-automl/ フォルダに移動します。
  2. pod install を実行して、Cocoapods 経由で依存関係をダウンロードします。
  3. open MLVisionExample.xcworkspace/ を実行して、Xcode でプロジェクト ワークスペースを開きます。
  4. (省略可)ダウンロードしたモデルを抽出し、その内容を、サンプルアプリの ios/ml-automl/Resources/automl/ にあるモデルにコピーします。cd291fe04bcdc6ee.png
  5. Xcode ツールバーの実行アイコン(16629f86bbeb4208.png)をクリックして、さまざまな種類の花を認識できることを確認します。

65172c3f35336d4e.png

6. (省略可)リモートモデルを使用する

ML Kit のリモートモデルを使用すると、TensorFlow Lite モデルをアプリバイナリに含めるのではなく、必要に応じて Firebase からオンデマンドでダウンロードできます。リモートモデルには、ローカルモデルと比べて次のような利点があります。

  • アプリのバイナリのサイズを縮小する
  • アプリを更新せずにモデルを更新できる
  • モデルの複数バージョンを使用した A/B テスト

このステップでは、リモートモデルを公開し、サンプルアプリで使用します。この Codelab のステップ 4 でモデルのトレーニングを完了していることを確認してください。

モデルを公開する

  1. Firebase コンソールに移動します。
  2. [ML Kit AutoML Codelab] を選択します。プロジェクトを作成します。
  3. [ML Kit] を選択 >AutoML。
  4. [花] を選択します先ほど作成したデータセットを使用します
  5. トレーニング タスクが完了したことを確認してから、モデルを選択します。
  6. [Publish] を選択し、「mlkit_flowers」という名前を付けます。b63a58b83e814acd.png

リモートモデルで花を認識する

サンプルアプリは、リモートモデルを使用するよう構成されています(可能な場合)。リモートモデルを公開した後は、アプリを再実行してモデルのダウンロードをトリガーするだけで済みます。アプリがリモートモデルを使用しているかどうかは、[Source] で値をアプリ画面のフッターに追加します。「トラブルシューティング」の以下のセクションを参照してください。

7c8292293fd858ad.png de359886ccecef2.png

トラブルシューティング

サンプルアプリでまだローカルモデルを使用している場合は、コード内でリモートモデル名が正しく設定されていることを確認してください。

Android アプリ

  1. ImageClassifier.kt に移動して、このブロックを見つけます。
val remoteModel = FirebaseRemoteModel.Builder(REMOTE_MODEL_NAME).build()
  1. コードで設定したモデル名が、先ほど公開したモデル名と一致することを Firebase コンソールで確認します。
  2. Android Studio ツールバーの [Run](c8b8a080b7ead886.png)をクリックして、アプリを再実行します。

iOS アプリ

  1. ImageClassifier.swift に移動して、このブロックを見つけます。
return RemoteModel(
  name: Constant.remoteAutoMLModelName,
  allowsModelUpdates: true,
  initialConditions: initialConditions,
  updateConditions: updateConditions
)
  1. コードで設定したモデル名が、先ほど公開したモデル名と一致することを Firebase コンソールで確認します。
  2. Xcode ツールバーの実行アイコン(16629f86bbeb4208.png)をクリックして、アプリを再実行します。

7. 完了

AutoML を使用して独自のトレーニング データで画像分類モデルをトレーニングしてから、ML Kit を使用してモバイルアプリでモデルを使用するというエンドツーエンドのプロセスを体験しました。

ML Kit で AutoML Vision Edge を独自のアプリに統合する方法については、Google のドキュメントをご覧ください。

ML Kit サンプルアプリを試して、Firebase ML Kit のその他の機能を確認することもできます。

Android のサンプル

iOS サンプル