ML Kit によるカスタムモデル

デフォルトでは、ML Kit の API は Google でトレーニングされた ML モデルを使用します。これらのモデルは、幅広いアプリケーションに対応するように設計されています。ただし、ユースケースによっては、よりターゲットを絞ったモデルが必要になります。そのため、一部の ML Kit API では、デフォルト モデルをカスタム TensorFlow Lite モデルに置き換えることができるようになりました。

Image LabelingObject Detection & Tracking API はどちらもカスタム画像分類モデルをサポートしています。これらのモデルは、TensorFlow Hub で選択された高品質の事前トレーニング済みモデルと、TensorFlow、AutoML Vision Edge、TensorFlow Lite Model Maker でトレーニングされた独自のカスタムモデルと互換性があります。

他の分野やユースケース用にカスタム ソリューションが必要な場合は、オンデバイスの機械学習のページで、オンデバイスの機械学習向けの Google のすべてのソリューションとツールをご確認ください。

カスタムモデルで ML Kit を使用するメリット

ML Kit でカスタム画像分類モデルを使用するメリットは次のとおりです。

  • 使いやすいハイレベル API - 低レベルのモデルの入出力を扱う必要がなく、画像の前処理と後処理を処理したり、処理パイプラインを構築したりする必要はありません。
  • ラベルのマッピングについてご自身で心配する必要はありません。ML Kit は TFLite モデルのメタデータからラベルを抽出し、マッピングを行います。
  • TensorFlow Hub で公開されている事前トレーニング済みモデルから、TensorFlow、AutoML Vision Edge、TensorFlow Lite Model Maker でトレーニングされた新しいモデルまで、幅広いソースからのカスタムモデルをサポートします
  • Firebase でホストされているモデルに対応。モデルをオンデマンドでダウンロードすることで APK のサイズを縮小します。アプリを再公開することなくモデルの更新を push し、Firebase Remote Config で簡単に A/B テストを行えます。
  • Android の Camera API との統合に合わせて最適化されています。

具体的には、オブジェクトの検出とトラッキングについて、次の点に注意してください。

  • 最初にオブジェクトを見つけてから、関連する画像の領域にのみ分類器を実行することによって、分類の精度を向上させます
  • リアルタイムのインタラクティブ エクスペリエンスを提供します。オブジェクトが検出され分類されると、そのオブジェクトに対する迅速なフィードバックをユーザーに提供できます。

事前トレーニング済みの画像分類モデルを使用する

一連の条件を満たしている事前トレーニング済みの TensorFlow Lite モデルを使用できます。TensorFlow Hub では、これらの基準を満たす、Google や他のモデル作成者が作成した審査済みのモデルを提供しています。

TensorFlow Hub で公開されているモデルを使用する

TensorFlow Hub は、さまざまなモデル作成者が用意したさまざまな事前トレーニング済み画像分類モデルを提供し、画像ラベル付け API、オブジェクト検出およびトラッキング API で使用できます。(下記の手順に従う)

  1. ML Kit 互換モデルのコレクションからモデルを選択します。
  2. モデルの詳細ページから .tflite モデルファイルをダウンロードします。可能であれば、メタデータを含むモデル形式を選択してください。
  3. モデルファイルをプロジェクトにバンドルして Android アプリまたは iOS アプリで使用する方法については、Image Labeling API または Object Detection and Tracking API のガイドをご覧ください。

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

トレーニング済みの画像分類モデルがニーズに合わない場合は、独自の TensorFlow Lite モデルをトレーニングする方法が複数あります。その一部について、以下で詳しく説明します。

独自の画像分類モデルをトレーニングするためのオプション
AutoML Vision Edge
  • Google Cloud AI が提供
  • 最先端の画像分類モデルを作成する
  • パフォーマンスとサイズを簡単に評価
TensorFlow Lite Model Maker
  • モデルを再トレーニングする(転移学習)。モデルをゼロからトレーニングするよりも、時間と必要なデータが少なくて済みます。
TensorFlow モデルを TensorFlow Lite に変換する
  • TensorFlow でモデルをトレーニングしてから TensorFlow Lite に変換する

AutoML Vision Edge

AutoML Vision Edge を使用してトレーニングされた画像分類モデルは、Image Labeling API と Object Detection and Tracking API API でカスタムモデルでサポートされています。これらの API は、Firebase モデルのデプロイでホストされているモデルのダウンロードもサポートしています。

AutoML Vision Edge でトレーニングしたモデルを Android アプリや iOS アプリで使用する方法については、ユースケースに応じて各 API のカスタムモデル ガイドをご覧ください。

TensorFlow Lite Model Maker

TFLite Model Maker ライブラリを使用すると、TensorFlow ニューラル ネットワーク モデルをデバイス上の ML アプリケーションにデプロイする際に、TensorFlow ニューラル ネットワーク モデルを特定の入力データに適合させて変換するプロセスが簡単になります。TensorFlow Lite Model Maker で画像分類を行うための Colab をご覧ください。

Model Maker でトレーニングしたモデルを Android アプリや iOS アプリで使用する方法については、ユースケースに応じて Image Labeling API または Object Detection and Tracking API のガイドをご覧ください。

TensorFlow Lite コンバータを使用して作成されたモデル

既存の TensorFlow 画像分類モデルがある場合は、TensorFlow Lite コンバータを使用して変換できます。作成したモデルが以下の互換性要件を満たしていることを確認してください。

Android アプリや iOS アプリで TensorFlow Lite モデルを使用する方法について詳しくは、ユースケースに応じて Image Labeling API または Object Detection and Tracking API のガイドをご覧ください。

TensorFlow Lite モデルの互換性

次の要件を満たしている場合は、事前トレーニング済みの TensorFlow Lite 画像分類モデルを使用できます。

テンソル

  • モデルには、次の制約のある入力テンソルが 1 つだけ必要です。
    • データは RGB ピクセル形式です。
    • データは UINT8 または FLOAT32 型です。入力テンソル型が FLOAT32 の場合、Metadata をアタッチして normalizationOptions を指定する必要があります。
    • テンソルには BxHxWxC の 4 つの次元があります。
      • B はバッチサイズです。1 にする必要があります(大規模なバッチに対する推論はサポートされていません)。
      • W と H は、入力した幅と高さです。
      • C は、想定されるチャネルの数です。3 にする必要があります。
  • モデルには、N 個のクラスと 2 次元または 4 次元のいずれかを持つ出力テンソルが少なくとも 1 つ必要です。
    • (1×N)
    • (1×1×1×N)
  • 現在、完全にサポートされているのはシングルヘッド モデルのみです。マルチヘッド モデルでは予期しない結果が出力されることがあります。

メタデータ

TensorFlow Lite モデルへのメタデータの追加で説明されているように、TensorFlow Lite ファイルにメタデータを追加できます。

FLOAT32 入力テンソルでモデルを使用するには、メタデータで NormalizationOptions を指定する必要があります。

また、このメタデータを出力テンソル TensorMetadata に付加することをおすすめします。

  • 各出力クラスの名前を TENSOR_AXIS_LABELS 型の AssociatedFile として指定するラベルマップ(それ以外の場合は、数値出力クラス インデックスのみを返すことができます)
  • デフォルトのスコアしきい値を下回ると、信頼度が低すぎると判断され、結果が返されない。ProcessUnitScoreThresholdingOptions 指定)