Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

AutoML Vision Edge で画像のラベル付けモデルをトレーニングする

画像ラベル付けモデルをトレーニングするには、AutoML Vision Edge に一連の画像とそれに対応するラベルを提供します。AutoML Vision Edge はこのデータセットを使用して、クラウド内の新しいモデルをトレーニングします。これは、アプリ内でデバイス上の画像のラベル付けに使用できます(この機能の概要については、概要をご覧ください)。

AutoML Vision Edge は Google Cloud のサービスです。このサービスの利用には Google Cloud Platform 使用許諾契約サービス固有の規約が適用され、それに応じて課金されます。お支払い情報については、AutoML の料金ページをご覧ください。

始める前に

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

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

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

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

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

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

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

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

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

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

オプション 1: ディレクトリ構造化された zip アーカイブ

トレーニング画像をディレクトリに整理します。各ディレクトリにはラベルの名前を付け、そのラベルの例となる画像を格納します。このディレクトリ構造を zip アーカイブに圧縮します。

この zip アーカイブのディレクトリ名は最大 32 文字の ASCII 文字で、英数字とアンダースコア文字(_)のみを使用できます。

例:

my_training_data.zip
  |____accordion
  | |____001.jpg
  | |____002.jpg
  | |____003.jpg
  |____bass_guitar
  | |____hofner.gif
  | |____p-bass.png
  |____clavier
    |____well-tempered.jpg
    |____well-tempered (1).jpg
    |____well-tempered (2).jpg

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

トレーニング画像を Google Cloud Storage にアップロードし、各画像の URL を含む CSV ファイルを準備します。このファイルに、各画像の正しいラベルを記述することもできます。この方法は、非常に大きなデータセットを扱う場合に役立ちます。

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

gs://your-training-data-bucket/001.jpg,accordion
gs://your-training-data-bucket/002.jpg,accordion
gs://your-training-data-bucket/003.jpg,accordion
gs://your-training-data-bucket/hofner.gif,bass_guitar
gs://your-training-data-bucket/p-bass.png,bass_guitar
gs://your-training-data-bucket/well-tempered.jpg,clavier
gs://your-training-data-bucket/well-tempered%20(1).jpg,clavier
gs://your-training-data-bucket/well-tempered%20(2).jpg,clavier

画像は、Firebase プロジェクトに対応する Google Cloud プロジェクトのバケットに保存する必要があります。

CSV ファイルの準備方法については、Cloud AutoML Vision ドキュメントでトレーニング データの準備をご覧ください。

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

画像を個別にアップロードするか、構造化されていない zip ファイルをアップロードした後、Firebase コンソールでトレーニング画像にラベルを付けます。次の手順をご覧ください。

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

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

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

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

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

  4. インポート タスクが完了したら、[イメージ] タブを使用して、トレーニング データを確認し、ラベルの付いていない画像にラベルを付けます。

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

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