Firebase Summit で発表されたすべての情報をご覧ください。Firebase を使用してアプリ開発を加速し、自信を持ってアプリを実行する方法を紹介しています。詳細

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

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

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

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

あなたが始める前に

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

  • Inclusive ML guide - AutoMLに示されているガイドラインをよく理解してください。

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

1. トレーニング データを組み立てる

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

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

  • 各画像は 30MB 以下である必要があります。 AutoML Vision Edge は前処理中にほとんどの画像を縮小するため、通常、非常に高解像度の画像を提供しても精度の利点はありません。

  • 各ラベルの例を少なくとも 10 個、できれば 100 個以上含めます。

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

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

  • AutoML Vision Edge によって生成されたモデルは、現実世界のオブジェクトの写真用に最適化されています。 X 線、手書きの図面、スキャンした文書、領収書などにはうまく機能しない場合があります。

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

トレーニング イメージの準備ができたら、Google Cloud にインポートする準備をします。次の 2 つのオプションがあります。

オプション 1: CSV インデックスを使用した Cloud Storage

トレーニング画像を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 Datasetsページを開きます。プロンプトが表示されたら、プロジェクトを選択します。

  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時間
      100,000枚の画像13時間
      1,000,000枚の画像18時間

3. モデルを評価する

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

このページの重要な用途の 1 つは、モデルに最適な信頼度のしきい値を決定することです。信頼度のしきい値は、モデルが画像にラベルを割り当てるために必要な最小の信頼度です。信頼度のしきい値スライダーを動かすと、さまざまなしきい値がモデルのパフォーマンスにどのように影響するかを確認できます。モデルのパフォーマンスは、精度再現率の 2 つの指標を使用して測定されます。

画像分類のコンテキストでは、精度とは、選択したしきい値でモデルがラベル付けした画像の数に対する、正しくラベル付けされた画像の数の比率です。モデルの精度が高い場合、誤ってラベルを割り当てる頻度が低くなります (誤検知が少なくなります)。

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

精度と再現率のどちらを最適化するかは、ユース ケースによって異なります。詳細については、 AutoML Vision 初心者向けガイド包括的 ML ガイド - AutoMLを参照してください。

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

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

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

モデルをデプロイする

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

モデルを公開する

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

モデルを Firebase でホストすることによってのみ提供し、モデルをアプリにバンドルしないことを選択した場合は、アプリの初期ダウンロード サイズを減らすことができます。ただし、モデルがアプリにバンドルされていない場合、アプリがモデルを初めてダウンロードするまで、モデル関連の機能は使用できないことに注意してください。

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

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

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

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

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

    モデルのリソース識別子を指定する必要があります。これは、次の例のような文字列です。

    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。

    パイソン

    # 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アプリでモデルを使用する方法を学びます。