AutoML Vision Edge を使用してオブジェクト検出モデルをトレーニングする

オブジェクト検出モデルは画像ラベル付けモデルに似ていますが、画像全体にラベルを割り当てるのではなく、画像内の複数の領域にラベルを割り当てます。オブジェクト検出モデルを使用すると、画像内のオブジェクトを認識して特定したり、一連の画像の中でオブジェクトの動きを追跡したりできます。

オブジェクト検出モデルをトレーニングするには、一連の画像と、それに対応するオブジェクト ラベルおよびオブジェクト境界を AutoML Vision Edge に提供します。AutoML Vision Edge はこのデータセットを使用して、クラウドで新しいモデルをトレーニングします。このモデルをデバイス上で使用してオブジェクト検出を行うことができます。

始める前に

  • Firebase プロジェクトをまだ作成していない場合は、Firebase コンソールでプロジェクトを作成します。

  • インクルーシブ ML ガイド - AutoML に記載されているガイドラインを把握します。

  • AutoML Vision Edge の機能を試すだけで、独自のトレーニング データがない場合は、次のいずれかのサンプル データセットをダウンロードします。

1. トレーニング データを集める

まず、ラベル付き画像のトレーニング データセットをまとめる必要があります。次のガイドラインに注意してください。

  • 画像は、JPEG、PNG、GIF、BMP、ICO のいずれかの形式にする必要があります。

  • 各画像は 30 MB 以下にする必要があります。AutoML Vision Edge は前処理中に画像をダウンスケールします。高解像度の画像を提供しても、より正確な結果が得られるわけではありません。

  • 少なくとも各ラベルの例を 10 個以上含めます(100 個以上を推奨)。

  • 各ラベルに複数の角度、解像度、背景を含めます。

  • トレーニング用のデータは、予測を行うデータにできる限り近いものである必要があります。たとえば、ユースケースに低解像度のぼやけた画像(セキュリティ カメラの画像など)が含まれている場合、トレーニング用のデータも低解像度でぼやけた画像から構成する必要があります。

  • AutoML Vision Edge モデルは、現実世界にある物体の写真に対して最も効果的に動作します。X 線、手描き、スキャンしたドキュメント、領収書などでは、適切な動作が見込めません。

    また、モデルは、人間が割り当てることができないラベルは予測できません。そのため、人間が画像を 1~2 秒間見てラベルを割り当てることができなければ、モデルもそのようにトレーニングすることはできません。

トレーニング画像を用意したら、画像を Google Cloud にインポートする準備を行います。次の 2 つのオプションがあります。

オプション 1: Cloud Storage にアップロードして CSV インデックスを作成する

トレーニング画像を Google Cloud Storage にアップロードし、各画像の URL を含む CSV ファイルを準備します。このファイルに各画像の正しいオブジェクト ラベルと境界領域を記述することもできます。このオプションは大きなデータセットを扱う場合に便利です。

たとえば、画像を Cloud Storage にアップロードし、次のような CSV ファイルを準備します。

gs://your-training-data-bucket/001.jpg,accordion,0.2,0.4,,,0.3,0.5,,
gs://your-training-data-bucket/001.jpg,tuba,0.2,0.5,,,0.4,0.8,,
gs://your-training-data-bucket/002.jpg,accordion,0.2,0.2,,,0.9,0.8,,

オブジェクトの境界ボックスは、画像内の相対座標として指定します。トレーニング データを CSV 形式でフォーマットするをご覧ください。

画像は、us-central1 リージョンに存在し、Firebase プロジェクトに対応する Google Cloud プロジェクトのバケットに保存する必要があります。

オプション 2: ラベルの付いていない画像にラベルを付ける

トレーニング画像のアップロード後、Google Cloud Console でトレーニング画像にラベルを付けてオブジェクト境界を描画します。この方法は、小規模のデータセットにのみおすすめします。次の手順をご覧ください。

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

次に、画像を使ってモデルをトレーニングします。

  1. Google Cloud Console で Vision のデータセット ページを開きます。指示に沿ってプロジェクトを選択します。

  2. [新しいデータセット] をクリックします。データセットの名前を指定し、トレーニングするモデルのタイプを選択して、[データセットを作成] をクリックします。

  3. データセットの [インポート] タブで、トレーニング画像、トレーニング画像の zip アーカイブ、トレーニング画像がアップロードされている Cloud Storage の場所を指定した CSV ファイルのいずれかをアップロードします。トレーニング データを集めるをご覧ください。

  4. インポート タスクが完了したら、[イメージ] タブを使用してトレーニング データを確認します。

  5. CSV をアップロードしていない場合は、画像ごとに、認識するオブジェクトの周囲に境界ボックスを描画し、各オブジェクトにラベルを付けます。

  6. [トレーニング] タブで [トレーニングを開始] をクリックします。

    1. モデルに名前を付け、Edge モデルタイプを選択します。

    2. 次のトレーニング設定を構成します。これらの設定は生成されるモデルのパフォーマンスを左右します。

      モデル最適化のオプション... 使用するモデル構成。低レイテンシまたはパッケージ サイズの小ささが重要な場合は高速で小型のモデルをトレーニングし、精度が重要な場合は低速で大型のモデルをトレーニングします。
      ノード時間予算

      モデルのトレーニングに費やす最大時間(計算時間)。一般に、トレーニング時間が長いほど、モデルはより正確になります。

      モデルが最適化されているとシステムが判断し、追加のトレーニングによって精度が改善しない場合、指定された時間より短い時間でトレーニングを完了できます。実際にかかった時間に対してのみ課金されます。

      一般的なトレーニング時間
      非常に小さいセット1 時間
      500 個の画像2 時間
      1,000 個の画像3 時間
      5,000 個の画像6 時間
      10,000 個の画像7 時間
      50,000 個の画像11 時間
      10 万個の画像13 時間
      100 万個の画像18 時間

3. モデルを評価する

トレーニングが完了したら、[評価] タブをクリックして、モデルのパフォーマンス指標を確認できます。

このページで行う重要な作業の 1 つは、モデルに最適な信頼度のしきい値の判定です。信頼度のしきい値は、モデルが画像にラベルを割り当てるため必要な最低限の信頼度を表します。[信頼度のしきい値] のスライダーを動かすと、しきい値がモデルのパフォーマンスにどのように影響するかを確認できます。モデルのパフォーマンスは精度と再現率という 2 つの指標で評価されます。

画像分類では、精度とは、特定のしきい値でモデルがラベル付けした画像の中で、正しくラベル付けされた画像の割合を表します。モデルの精度が高いと、誤ったラベルが割り当てられる頻度が少なくなります(偽陽性率が低くなります)。

再現性とは、モデルが正しくラベル付けできるはずのコンテンツを含む画像の中で、実際に正しくラベル付けされた画像の割合を表します。モデルの再現率が高い場合、ラベルの割り当てに失敗する頻度が低くなります(偽陰性率が低くなります)。

精度を最適化するのか、再現性を最適化するのかはケースによって異なります。詳しくは、AutoML Vision 初心者向けガイドインクルーシブ ML ガイド - AutoML をご覧ください。

適切な指標を生成する信頼度のしきい値を見つけたら、それをメモしておきます。アプリ内でこの信頼度のしきい値を使用してモデルを構成します(このツールは適切なしきい値を得るためにいつでも使用できます)。

4. モデルを公開またはダウンロードする

モデルのパフォーマンスに満足し、そのモデルをアプリで使用する場合は、オンライン予測を行うためにモデルをデプロイする、モデルを Firebase に公開する、モデルをダウンロードしてアプリにバンドルするという 3 つのオプションを利用できます。これらのオプションを任意に組み合わせることもできます。

モデルをデプロイする

データセットの [テストと使用] タブで、オンライン予測を行うためにモデルをデプロイできます。このオプションでは、モデルはクラウドで実行されます。このオプションについては、Cloud AutoML のドキュメントをご覧ください。残り 2 つのオプションについては、このサイトのドキュメントで説明します。

モデルを公開する

Firebase にモデルを公開することで、新しいアプリ バージョンをリリースすることなくモデルを更新できます。また、Remote Config と A/B Testing を使用して、さまざまなモデルをさまざまなユーザーセットに動的に提供できます。

モデルを提供する方法として Firebase でホストする方法だけを使用し、モデルをアプリにバンドルしない場合は、アプリの初期ダウンロード サイズを小さくできます。ただし、モデルがアプリにバンドルされていない場合、モデルに関連する機能は、アプリがモデルを初めてダウンロードするまで使用できません。

モデルを公開するには、次の 2 つの方法のいずれかを使用できます。

  • Google Cloud Console のデータセットの [テストと使用] ページから TF Lite モデルをダウンロードし、Firebase コンソールのカスタムモデル ページでモデルをアップロードします。1 つのモデルを公開する場合、通常はこれが最も簡単な方法です。
  • Admin SDK を使用して、Google Cloud プロジェクトから Firebase にモデルを直接公開します。この方法を使用すると、複数のモデルを一括で公開したり、自動化された公開パイプラインを作成したりできます。

Admin SDK のモデル管理 API を使用してモデルを公開するには:

  1. SDK をインストールして初期化します

  2. モデルを公開します。

    モデルのリソース ID を指定する必要があります。リソース ID は次の例に示すような文字列です。

    projects/PROJECT_NUMBER/locations/us-central1/models/MODEL_ID
    PROJECT_NUMBER 対象のモデルを含む Cloud Storage バケットのプロジェクト番号。Firebase プロジェクトまたは別の Google Cloud プロジェクトの番号です。この値は Firebase コンソールまたは Google Cloud Console ダッシュボードの [設定] ページで確認できます。
    MODEL_ID AutoML Cloud API から取得したモデルの ID。

    Python

    # First, import and initialize the SDK.
    
    # Get a reference to the AutoML model
    source = ml.TFLiteAutoMlSource('projects/{}/locations/us-central1/models/{}'.format(
        # See above for information on these values.
        project_number,
        model_id
    ))
    
    # Create the model object
    tflite_format = ml.TFLiteFormat(model_source=source)
    model = ml.Model(
        display_name="example_model",  # This is the name you will use from your app to load the model.
        tags=["examples"],             # Optional tags for easier management.
        model_format=tflite_format)
    
    # Add the model to your Firebase project and publish it
    new_model = ml.create_model(model)
    new_model.wait_for_unlocked()
    ml.publish_model(new_model.model_id)
    

    Node.js

    // First, import and initialize the SDK.
    
    (async () => {
      // Get a reference to the AutoML model. See above for information on these
      // values.
      const automlModel = `projects/${projectNumber}/locations/us-central1/models/${modelId}`;
    
      // Create the model object and add the model to your Firebase project.
      const model = await ml.createModel({
        displayName: 'example_model',  // This is the name you use from your app to load the model.
        tags: ['examples'],  // Optional tags for easier management.
        tfliteModel: { automlModel: automlModel },
      });
    
      // Wait for the model to be ready.
      await model.waitForUnlocked();
    
      // Publish the model.
      await ml.publishModel(model.modelId);
    
      process.exit();
    })().catch(console.error);
    

モデルをダウンロードしてアプリにバンドルする

モデルをアプリにバンドルすると、Firebase でホストされているモデルを取得できないときにもアプリの ML 機能を引き続き使用できます。

モデルを公開してアプリにバンドルすると、アプリは利用可能な最新バージョンを使用します。

モデルをダウンロードするには、データセットの [テストと使用] ページで [TF Lite] をクリックします。

次のステップ

モデルの公開またはダウンロードが完了しました。続いては、iOS+ アプリまたは Android アプリでモデルを使用する方法を学習します。