Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

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

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

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

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

あなたが始める前に

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

  • インクルーシブMLガイド-AutoMLに示されているガイドラインをよく理解してください。

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

1.トレーニングデータを収集します

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

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

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

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

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

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

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

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

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

オプション1:CSVインデックス付きのクラウドストレージ

トレーニング画像をGoogleCloudStorageにアップロードし、各画像の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プロジェクトの対応するGoogleCloudプロジェクトの一部であるバケットに保存する必要があります。

オプション2:ラベルのない画像

トレーニング画像にラベルを付け、アップロード後にGoogleCloudConsoleでオブジェクトの境界を描画します。これは、小さなデータセットにのみ推奨されます。次のステップを参照してください。

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

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

  1. GoogleCloudConsoleでVisionDatasetsページを開きます。プロンプトが表示されたら、プロジェクトを選択します。

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

  3. データセットの[インポート]タブで、トレーニングイメージ、トレーニングイメージのzipアーカイブ、またはアップロード先のクラウドストレージの場所を含むCSVファイルをアップロードします。トレーニングデータの収集を参照してください

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

  5. CSVをアップロードしなかった場合は、画像ごとに、認識したいオブジェクトの周囲にバウンディングボックスを描画し、各オブジェクトにラベルを付けます。

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

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

    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つの指標を使用して測定されます。

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

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

精度を最適化するかリコールを最適化するかは、ユースケースによって異なります。詳細については、 AutoMLVision初心者向けガイドおよび包括的MLガイド-AutoMLを参照してください。

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

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

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

モデルをデプロイします

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

モデルを公開する

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

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

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

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

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

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

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

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

    projects/PROJECT_NUMBER/locations/us-central1/models/MODEL_ID
    PROJECT_NUMBERモデルを含むCloudStorageバケットのプロジェクト番号。これは、Firebaseプロジェクトまたは別のGoogleCloudプロジェクトである可能性があります。この値は、Firebaseコンソールの[設定]ページまたはGoogleCloudConsoleダッシュボードで確認できます。
    MODEL_ID AutoMLCloudAPIから取得したモデルの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機能が引き続き機能するようにすることができます。

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

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

次のステップ

モデルを公開またはダウンロードしたので、 iOS+およびAndroidアプリでモデルを使用する方法を学びます。