モデルの評価

モデルをトレーニングした後、AutoML Video Intelligence オブジェクト トラッキングはテストセットの項目を使用して、新しいモデルの品質と精度を評価します。

AutoML Video Intelligence オブジェクト トラッキングには、モデルが全体的にどの程度適切に機能するかを示す評価指標のセットと、モデルが特定のラベルに対してどの程度適切に機能するかを示す各カテゴリラベルの評価指標が用意されています。

  • IoU: Intersection over Union。オブジェクト トラッキングで使用される指標の 1 つで、動画フレームのオブジェクト インスタンスについて予測された境界ボックスが実際の境界ボックスとどの程度オーバーラップしているかを測定します。予測された境界ボックスの値が実際の境界ボックスの値に近いほど、交差部分と IoU 値が大きいことになります。

  • AuPRC: 適合率 / 再現率曲線の下の部分の面積で、「平均適合率」とも呼ばれます。通常は、0.5 から 1.0 の間です。値が高いほど、モデルの精度が高いことを示します。

  • 信頼しきい値曲線は、さまざまな信頼しきい値が適合率、再現率、真陽性率、および偽陽性率にどのように影響するかを示します。適合率と再現率の関係をご覧ください。

このデータを使用して、モデルの準備状況を評価します。AUC スコアが低い、つまり適合率スコアと再現率スコアが低い場合は、モデルに追加のトレーニング データが必要であるか、ラベルに一貫性がないことを示している可能性があります。AUC スコアが非常に高く、適合率と再現率が完璧な場合は、データが単純すぎて適切に一般化できないことを示している可能性があります。

モデル評価値の取得

ウェブ UI

  1. AutoML Video Object Tracking UI で [モデル] ページを開きます。

  2. 評価するモデルの行をクリックします。

  3. [評価] タブをクリックします。

    モデルのトレーニングが完了している場合、AutoML Video Object Tracking はその評価指標を表示します。

    モデル情報でタブを評価する
  4. 特定のラベルの指標を表示するには、ページの下部にあるラベルのリストからラベル名を選択します。

REST とコマンドライン

後述のリクエストのデータを使用する前に、次のように置き換えます。

  • model-id: モデルの識別子に置き換えます。
  • project-number: プロジェクトの数
  • location-id: アノテーションを実行する Cloud リージョン。サポート対象のクラウド リージョンは us-east1us-west1europe-west1asia-east1 です。リージョンを指定しないと、動画ファイルの場所に基づいてリージョンが決まります。

HTTP メソッドと URL:

GET https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/models/model-id:modelEvaluations

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

次のコマンドを実行します。

curl -X GET \
-H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/models/model-id:modelEvaluations

PowerShell

次のコマンドを実行します。

$cred = gcloud auth application-default print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/models/model-id:modelEvaluations" | Select-Object -Expand Content
レスポンスには、モデル全体の ModelEvaluation リソースが含まれます。たとえば、8703337066443674578 です。

Java

import com.google.cloud.automl.v1beta1.AutoMlClient;
import com.google.cloud.automl.v1beta1.ModelEvaluation;
import com.google.cloud.automl.v1beta1.ModelEvaluationName;
import java.io.IOException;

class GetModelEvaluation {

  static void getModelEvaluation() throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "YOUR_PROJECT_ID";
    String modelId = "YOUR_MODEL_ID";
    String modelEvaluationId = "YOUR_MODEL_EVALUATION_ID";
    getModelEvaluation(projectId, modelId, modelEvaluationId);
  }

  // Get a model evaluation
  static void getModelEvaluation(String projectId, String modelId, String modelEvaluationId)
      throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (AutoMlClient client = AutoMlClient.create()) {
      // Get the full path of the model evaluation.
      ModelEvaluationName modelEvaluationFullId =
          ModelEvaluationName.of(projectId, "us-central1", modelId, modelEvaluationId);

      // Get complete detail of the model evaluation.
      ModelEvaluation modelEvaluation = client.getModelEvaluation(modelEvaluationFullId);

      System.out.format("Model Evaluation Name: %s%n", modelEvaluation.getName());
      System.out.format("Model Annotation Spec Id: %s", modelEvaluation.getAnnotationSpecId());
      System.out.println("Create Time:");
      System.out.format("\tseconds: %s%n", modelEvaluation.getCreateTime().getSeconds());
      System.out.format("\tnanos: %s", modelEvaluation.getCreateTime().getNanos() / 1e9);
      System.out.format(
          "Evalution Example Count: %d%n", modelEvaluation.getEvaluatedExampleCount());

      System.out.format(
          "Video Object Tracking Evaluation Metrics: %s%n",
          modelEvaluation.getVideoObjectTrackingEvaluationMetrics());
    }
  }
}

Node.js

/**
 * TODO(developer): Uncomment these variables before running the sample.
 */
// const projectId = 'YOUR_PROJECT_ID';
// const location = 'us-central1';
// const modelId = 'YOUR_MODEL_ID';
// const modelEvaluationId = 'YOUR_MODEL_EVALUATION_ID';

// Imports the Google Cloud AutoML library
const {AutoMlClient} = require('@google-cloud/automl').v1beta1;

// Instantiates a client
const client = new AutoMlClient();

async function getModelEvaluation() {
  // Construct request
  const request = {
    name: client.modelEvaluationPath(
      projectId,
      location,
      modelId,
      modelEvaluationId
    ),
  };

  const [response] = await client.getModelEvaluation(request);

  console.log(`Model evaluation name: ${response.name}`);
  console.log(`Model annotation spec id: ${response.annotationSpecId}`);
  console.log(`Model display name: ${response.displayName}`);
  console.log('Model create time');
  console.log(`\tseconds ${response.createTime.seconds}`);
  console.log(`\tnanos ${response.createTime.nanos / 1e9}`);
  console.log(`Evaluation example count: ${response.evaluatedExampleCount}`);
  console.log(
    `Video object tracking model evaluation metrics: ${response.videoObjectTrackingEvaluationMetrics}`
  );

}

getModelEvaluation();

Python

from google.cloud import automl_v1beta1 as automl

# TODO(developer): Uncomment and set the following variables
# project_id = "YOUR_PROJECT_ID"
# model_id = "YOUR_MODEL_ID"
# model_evaluation_id = "YOUR_MODEL_EVALUATION_ID"

client = automl.AutoMlClient()
# Get the full path of the model evaluation.
model_path = client.model_path(project_id, "us-central1", model_id)
model_evaluation_full_id = f"{model_path}/modelEvaluations/{model_evaluation_id}"

# Get complete detail of the model evaluation.
response = client.get_model_evaluation(name=model_evaluation_full_id)

print("Model evaluation name: {}".format(response.name))
print("Model annotation spec id: {}".format(response.annotation_spec_id))
print("Create Time: {}".format(response.create_time))
print(
    "Evaluation example count: {}".format(response.evaluated_example_count)
)

print(
    "Video object tracking model evaluation metrics: {}".format(
        response.video_object_tracking_evaluation_metrics
    )
)

モデルの反復

品質水準に不満がある場合は、前のステップに戻って品質を向上させることができます。

  • さまざまなタイプの動画を追加しなければならない場合があります(たとえば、構図の拡大、解像度の増減、異なる視点など)。
  • 十分なトレーニング動画がない場合は、ラベルを完全に削除することを検討してください。
  • マシンにはラベル名の意味は理解できません。つまり、ラベル名はマシンにとって単なるランダムな文字列にすぎません。「door」というラベルと「door_with_knob」という別のラベルがある場合、マシンにはそのラベルが付いた動画以外にニュアンスを把握する方法はありません。
  • 真陽性と真陰性のサンプルを追加してデータを強化してください。 特に重要なのは、決定境界に近いサンプルです。

変更が完了したら、十分に高い品質水準に達するまで、モデルをトレーニングして評価します。