このページでは、Google Cloud コンソールまたは Vertex AI API を使用して、動画分類モデルからバッチ予測を取得する方法について説明します。バッチ予測は非同期リクエストです。エンドポイントにモデルをデプロイすることなく、モデルリソースからバッチ予測を直接リクエストします。
AutoML 動画モデルはオンライン予測をサポートしていません。
バッチ予測を取得する
バッチ予測リクエストでは、入力ソースと、Vertex AI が予測結果を格納する出力先を指定します。
入力データの要件
一括リクエストの入力では、予測用のモデルに送信するアイテムを指定します。AutoML 動画モデルタイプのバッチ予測では、JSON Lines ファイルを使用して予測を行う動画のリストを指定し、JSON Lines ファイルを Cloud Storage バケットに保存します。timeSegmentEnd
フィールドに Infinity
を指定すると、動画の終了を指定できます。次のサンプルは、入力 JSON Lines ファイルの 1 行を示しています。
{'content': 'gs://sourcebucket/datasets/videos/source_video.mp4', 'mimeType': 'video/mp4', 'timeSegmentStart': '0.0s', 'timeSegmentEnd': '2.366667s'}
バッチ予測をリクエストする
バッチ予測リクエストの場合、Google Cloud コンソールまたは Vertex AI API を使用できます。送信した入力アイテム数によっては、バッチ予測タスクが完了するまでに時間がかかることがあります。
Google Cloud コンソール
Google Cloud コンソールを使用してバッチ予測をリクエストします。
Google Cloud コンソールの [Vertex AI] セクションで、[バッチ予測] ページに移動します。
[作成] をクリックして [新しいバッチ予測] ウィンドウを開き、次の操作を行います。
- バッチ予測の名前を入力します。
- [モデル名] で、このバッチ予測に使用するモデルの名前を選択します。
- [転送元のパス] に、JSON Lines 入力ファイルがある Cloud Storage のロケーションを指定します。
- [宛先のパス] に、バッチ予測結果が保存される Cloud Storage のロケーションを指定します。出力形式はモデルの目標によって決まります。画像目的の AutoML モデルは、JSON Lines ファイルを出力します。
API
Vertex AI API を使用してバッチ予測リクエストを送信します。
REST
リクエストのデータを使用する前に、次のように置き換えます。
- LOCATION_ID: モデルを保存し、バッチ予測ジョブを実行するリージョン。例:
us-central1
- PROJECT_ID: 実際のプロジェクト ID
- BATCH_JOB_NAME: バッチジョブの表示名
- MODEL_ID: 予測に使用するモデルの ID
- THRESHOLD_VALUE(省略可): モデルは、信頼スコアがこの値以上の予測のみを返します。
- SEGMENT_CLASSIFICATION(省略可): セグメント レベルの分類をリクエストするかどうかを決めるブール値。Vertex AI は、入力インスタンスで指定された動画セグメント全体のラベルとその信頼スコアを返します。デフォルトは
true
です。 - SHOT_CLASSIFICATION(省略可): ショットレベルの分類をリクエストするかどうかを決めるブール値。Vertex AI は、入力インスタンスに指定された動画全体でカメラショットの境界を決定します。Vertex AI は、検出された各ショットのラベルとその信頼スコアとともに、ショットの開始時間と終了時間を返します。デフォルトは
false
です。 - ONE_SEC_INTERVAL_CLASSIFICATION(省略可): 動画の分類を 1 秒間隔でリクエストするかどうかを決めるブール値。Vertex AI は、入力インスタンスに指定された動画全体の 1 秒ごとのラベルとその信頼スコアを返します。デフォルトは
false
です。 - URI: 入力 JSON Lines ファイルが存在する Cloud Storage URI。
- BUCKET: Cloud Storage バケット
- PROJECT_NUMBER: プロジェクトに自動生成されたプロジェクト番号
HTTP メソッドと URL:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs
リクエストの本文(JSON):
{ "displayName": "BATCH_JOB_NAME", "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID", "modelParameters": { "confidenceThreshold": THRESHOLD_VALUE, "segmentClassification": SEGMENT_CLASSIFICATION, "shotClassification": SHOT_CLASSIFICATION, "oneSecIntervalClassification": ONE_SEC_INTERVAL_CLASSIFICATION }, "inputConfig": { "instancesFormat": "jsonl", "gcsSource": { "uris": ["URI"], }, }, "outputConfig": { "predictionsFormat": "jsonl", "gcsDestination": { "outputUriPrefix": "OUTPUT_BUCKET", }, }, }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を request.json
という名前のファイルに保存して、次のコマンドを実行します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs"
PowerShell
リクエスト本文を request.json
という名前のファイルに保存して、次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
{ "name": "projects/PROJECT_NUMBER/locations/us-central1/batchPredictionJobs/BATCH_JOB_ID", "displayName": "BATCH_JOB_NAME", "model": "projects/PROJECT_NUMBER/locations/us-central1/models/MODEL_ID", "inputConfig": { "instancesFormat": "jsonl", "gcsSource": { "uris": [ "CONTENT" ] } }, "outputConfig": { "predictionsFormat": "jsonl", "gcsDestination": { "outputUriPrefix": "BUCKET" } }, "state": "JOB_STATE_PENDING", "createTime": "2020-05-30T02:58:44.341643Z", "updateTime": "2020-05-30T02:58:44.341643Z", "modelDisplayName": "MODEL_NAME", "modelObjective": "MODEL_OBJECTIVE" }
ジョブ state
が JOB_STATE_SUCCEEDED
になるまで、BATCH_JOB_ID を使用してバッチジョブのステータスをポーリングできます。
Java
このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Java の設定手順を完了してください。詳細については、Vertex AI Java API のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
Node.js
このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Node.js の設定手順を完了してください。詳細については、Vertex AI Node.js API のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
Python
Vertex AI SDK for Python のインストールまたは更新の方法については、Vertex AI SDK for Python をインストールするをご覧ください。 詳細については、Python API リファレンス ドキュメントをご覧ください。
バッチ予測の結果を取得する
Vertex AI は、指定された宛先にバッチ予測の出力を送信します。
バッチ予測タスクが完了すると、リクエストで指定した Cloud Storage バケットに予測の出力が保存されます。
バッチ予測結果の例
動画分類モデルによるバッチ予測の例を次に示します。
{ "instance": { "content": "gs://bucket/video.mp4", "mimeType": "video/mp4", "timeSegmentStart": "1s", "timeSegmentEnd": "5s" } "prediction": [{ "id": "1", "displayName": "cat", "type": "segment-classification", "timeSegmentStart": "1s", "timeSegmentEnd": "5s", "confidence": 0.7 }, { "id": "1", "displayName": "cat", "type": "shot-classification", "timeSegmentStart": "1s", "timeSegmentEnd": "4s", "confidence": 0.9 }, { "id": "2", "displayName": "dog", "type": "shot-classification", "timeSegmentStart": "4s", "timeSegmentEnd": "5s", "confidence": 0.6 }, { "id": "1", "displayName": "cat", "type": "one-sec-interval-classification", "timeSegmentStart": "1s", "timeSegmentEnd": "1s", "confidence": 0.95 }, { "id": "1", "displayName": "cat", "type": "one-sec-interval-classification", "timeSegmentStart": "2s", "timeSegmentEnd": "2s", "confidence": 0.9 }, { "id": "1", "displayName": "cat", "type": "one-sec-interval-classification", "timeSegmentStart": "3s", "timeSegmentEnd": "3s", "confidence": 0.85 }, { "id": "2", "displayName": "dog", "type": "one-sec-interval-classification", "timeSegmentStart": "4s", "timeSegmentEnd": "4s", "confidence": 0.6 }] }