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

1. はじめに

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

ML Kit とは

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

AutoML とは

Cloud AutoML は、機械学習プロダクトのスイートです。AutoML を利用すると、Google の最先端の転移学習とニューラル アーキテクチャ検索テクノロジーを活用して、機械学習の専門知識が不十分でも、ビジネスニーズに合った高品質のモデルをトレーニングできます。

この 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. [Create New Project] を選択し、プロジェクトに「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. iOS アプリを Firebase プロジェクトに追加します。iOS バンドル ID: com.google.firebase.codelab.mlkit.automl
  2. GoogleService-Info.plist 構成ファイルをダウンロードし、手順に沿って ios/mlkit-automl/GoogleService-Info.plist の iOS アプリに配置します。

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

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

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

データセットを調べる

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

このトレーニング データセットには、花の種類ごとに 200 枚の画像があります。モデルをトレーニングするには、クラスごとに 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/mlkit-automl/ で Android アプリをインポートします。
  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. 前に作成した「Flowers」データセットを選択します。
  5. トレーニング タスクが完了したことを確認し、モデルを選択します。
  6. [パブリッシュ] を選択し、「mlkit_flowers」という名前を付けます。b63a58b83e814acd.png

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

サンプルアプリは、リモートモデルが使用可能な場合はそれを使用するように構成されています。リモートモデルを公開したら、アプリを再実行するだけでモデルのダウンロードがトリガーされます。アプリがリモートモデルを使用していることを確認するには、アプリ画面のフッターにある [ソース] の値を確認します。うまくいかない場合は、以下の「トラブルシューティング」セクションをご覧ください。

7c8292293fd858ad.png de359886ccecef2.png

トラブルシューティング

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

Android アプリ

  1. ImageClassifier.kt に移動して、このブロックを探します。
val remoteModel = FirebaseRemoteModel.Builder(REMOTE_MODEL_NAME).build()
  1. コードで設定されたモデル名が、Firebase コンソールで以前に公開したモデル名と一致していることを確認します。
  2. Android Studio のツールバーで [実行](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 を独自のアプリに統合する方法については、ドキュメントをご覧ください。

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

Android サンプル

iOS サンプル