クイックスタート: コマンドラインの使用

このクイックスタートでは、以下のプロセスを順を追って説明します。

  • Google Cloud Storage に動画のセットをコピーする。
  • 動画とそのラベルをリストした CSV ファイルを作成する。
  • AutoML Video を使用してデータセットを作成し、モデルをトレーニングして使用する。

始める前に

プロジェクトを設定する

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  2. Cloud Console のプロジェクト セレクタページで、Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタのページに移動

  3. Google Cloud プロジェクトに対して課金が有効になっていることを確認します。 プロジェクトに対して課金が有効になっていることを確認する方法を学習する

  4. AutoML and Cloud Storage API を有効にします。

    API を有効にする

  5. gcloud コマンドライン ツールをインストールします。
  6. 手順に沿ってサービス アカウントを作成し、キーファイルをダウンロードします
  7. 環境変数 GOOGLE_APPLICATION_CREDENTIALS を、サービス アカウントの作成時にダウンロードしたサービス アカウント キーファイルのパスに設定します。
    export GOOGLE_APPLICATION_CREDENTIALS=key-file
  8. 環境変数 PROJECT_IDプロジェクト ID に設定します。
    export PROJECT_ID=your-project-id
    AutoML API 呼び出しとリソース名には、プロジェクト ID が含まれています。環境変数 PROJECT_ID によって ID の指定を簡略化できます。
  9. プロジェクトのオーナーである場合は、サービス アカウントを AutoML 編集者の IAM ロールに追加し、service-account-name を新しいサービス アカウントの名前に置き換えます。例: service-account1@myproject.iam.gserviceaccount.com
    gcloud auth login
    gcloud projects add-iam-policy-binding $PROJECT_ID \
       --member="serviceAccount:service-account-name" \
       --role="roles/automl.editor"
    
  10. それ以外の場合(プロジェクト オーナーでない場合)は、プロジェクト オーナーにユーザー ID とサービス アカウントの両方を AutoML 編集者の IAM ロールに追加するよう依頼します。

データセットの作成とトレーニング データのインポート

データセットを作成する

データセットの名前を決定し、次の curl コマンドを使用して、その名前で新しいデータセットを作成します。

この curl コマンドでは、gcloud auth application-default print-access-token コマンドを使用して、このトピックで先ほど設定したサービス アカウントのアクセス トークンを取得します。サービス アカウントの鍵ファイルのパスは GOOGLE_APPLICATION_CREDENTIALS 環境変数に格納されています。

curl -X POST \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
https://automl.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/datasets -d '{
    "displayName": "your-dataset-name",
    "videoClassificationDatasetMetadata": { }
}'

新しいデータセットのデータセット ID を含むレスポンスが返されます。たとえば VCN4798585402963263488 などです。

{
  "name": "projects/my-project/locations/us-central1/datasets/VCN4798585402963263488",
  "displayName": "my_dataset_01",
  "createTime": "2018-10-18T21:18:13.975412Z",
  "videoClassificationDatasetMetadata": {}
}

トレーニング データをインポートする

サンプル トレーニング データをデータセットにインポートします。importData コマンドは、トレーニング データとテストデータの CSV ファイルへのパスが格納された CSV へのパスを入力として受け取ります。これらのファイルは、Google Cloud Storage の「automl-video-demo-data」バケットから取得できます。

  • your-dataset-id をデータセットのデータセット識別子(表示名ではない)に置き換えます。たとえば VCN4798585402963263488 などです。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
https://automl.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/datasets/your-dataset-id:importData \
-d '{
  "inputConfig": {
    "gcsSource": {
       "inputUris": ["gs://automl-video-demo-data/hmdb_split1.csv"]
     }
  }
}'

データ インポート オペレーションのオペレーション ID が返されます。たとえば VCN7506374678919774208 などです。

{
  "name": "projects/915378992997/locations/us-central1/operations/VCN7506374678919774208",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.automl.v1beta1.OperationMetadata",
    "createTime": "2018-10-18T21:23:15.181451Z",
    "updateTime": "2018-10-18T21:23:15.181451Z",
    "importDataDetails": {}
  }
}

インポート オペレーションのステータスを取得する

データ インポート オペレーションのステータスを確認するには、次の curl コマンドを使用します。

  • your-operation-id をデータ インポート オペレーションのオペレーション ID に置き換えます。
curl -X GET -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
https://automl.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/operations/your-operation-id

インポート オペレーションが完了するまでに時間がかかることがあります。インポート タスクが終了すると、次の例に示すように、オペレーションのステータスに done: true が表示され、エラーはリストされません。

{
  "name": "projects/915378992997/locations/us-central1/operations/VCN7506374678919774208",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.automl.v1beta1.OperationMetadata",
    "createTime": "2018-10-18T21:23:15.181451Z",
    "updateTime": "2018-10-18T21:26:10.354502Z",
    "importDataDetails": {}
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.protobuf.Empty"
  }
}

データセットのリストを取得する

データセットのリストとデータセットにインポートされたサンプル動画の数を取得するには、次のコマンドを使用します。

curl \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
https://automl.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/datasets

出力は次のようになります。

{
  "datasets": [
    {
      "name": "projects/my-project/locations/us-central1/datasets/VCN3940649673949184000",
      "displayName": "my_dataset_01",
      "createTime": "2018-10-18T21:18:13.975412Z",
      "exampleCount": 5097,
      "videoClassificationDatasetMetadata": {}
    }
  ]
}

モデルのトレーニング

モデル トレーニング オペレーションを開始する

データセットを作成し、トレーニング データをデータセットにインポートしたら、カスタムモデルをトレーニングできます。

モデルをトレーニングするには、次の curl コマンドを使用します。

  • your-dataset-id をデータセットのデータセット識別子(表示名ではない)に置き換えます。

  • your-model-name を、モデルに選択した名前に置き換えます。

curl -X POST \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
https:/automl.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/models -d '{
  "datasetId": "your-dataset-id",
  "displayName": "your-model-name",
  "videoClassificationModelMetadata": {},
}'

データ インポート オペレーションのオペレーション ID が返されます。たとえば VCN1741767155885539328 などです。

{
  "name": "projects/915378992997/locations/us-central1/operations/VCN1741767155885539328",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.automl.v1beta1.OperationMetadata",
    "createTime": "2018-10-18T21:32:06.730258Z",
    "updateTime": "2018-10-18T21:32:06.730258Z",
    "createModelDetails": {}
  }
}

モデル トレーニング オペレーションのステータスを取得する

モデル トレーニング オペレーションのステータスを確認するには、次の curl コマンドを使用します。

  • your-operation-id をトレーニング オペレーションのオペレーション ID に置き換えます。
curl -X GET -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
https://automl.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/operations/your-operation-id

出力は次のようになります。オペレーションが完了すると、done: true が表示され、エラーはリストされません。

{
  "name": "projects/915378992997/locations/us-central1/operations/VCN1741767155885539328",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.automl.v1beta1.OperationMetadata",
    "createTime": "2018-10-18T21:32:06.730258Z",
    "updateTime": "2018-10-18T21:32:06.730258Z",
    "createModelDetails": {}
  }
}

モデルが使用可能であることを確認する

モデル トレーニング オペレーションが正常に完了したら、次のコマンドを使用してプロジェクトのモデルを一覧表示することにより、モデルが使用可能であることを確認できます。

curl -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
https://automl.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/models

出力は次のようになります。

{
  "model": [
    {
      "name": "projects/915378992997/locations/us-central1/models/VCN2004101834179870720",
      "displayName": "my_model_01",
      "datasetId": "VCN3940649673949184000",
      "createTime": "2018-10-19T17:18:45.320701Z",
      "updateTime": "2018-10-19T17:18:45.320701Z",
      "videoClassificationModelMetadata": {}
    }
  ]
}

予測の実施

動画のアノテーション(予測)をリクエストするには、batchPredict コマンドを使用します。batchPredict コマンドは、Google Cloud Storage バケットに保存されている CSV ファイルを入力として受け取ります。このファイルには、アノテーションを付ける動画へのパス、アノテーションを付ける動画のセグメントを特定する開始時間と終了時間が格納されています。このクイックスタートでは、この CSV ファイルの名前は hmdb_split1_train_gs.csv です。

次のコマンドを実行して、バッチ(非同期)予測リクエストを行います。

  • your-model-id をモデルの識別子に置き換えます。

  • your-output-bucket を、予測の結果を格納する Google Cloud Storage バケットに置き換えます。

  • your-object-id を、予測リクエストの出力を保存する Google Cloud Storage バケット内の場所を識別するオブジェクト名に置き換えます。Google Cloud Storage バケットに対する書き込み権限が必要です。

curl -X POST \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
https://automl.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/models/your-model-id:batchPredict -d '{
  "inputConfig": {
    "gcsSource": {
      "inputUris": ["gs://automl-video-demo-data/hmdb_split1_test_gs_predict.csv"]
    }
  },
  "outputConfig": {
    "gcsDestination": {
      "outputUriPrefix": "gs://your-output-bucket/your-object-id"
    }
  }
}'

バッチ予測リクエストのオペレーション ID が返されます(例: VCN926615623331479552)。

{
  "name": "projects/915378992997/locations/us-central1/operations/VCN926615623331479552",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.automl.v1beta1.OperationMetadata",
    "createTime": "2018-10-19T21:22:27.003694Z",
    "updateTime": "2018-10-19T21:22:27.003694Z",
    "batchPredictDetails": {}
  }
}

予測オペレーションのステータスを取得する

バッチ予測オペレーションのステータスを確認するには、次の curl コマンドを使用します。

  • your-operation-id をバッチ予測オペレーションのオペレーション ID に置き換えます。
curl -X GET -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
https://automl.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/operations/your-operation-id

CSV ファイルで指定した動画の数によっては、バッチ予測タスクが完了するまでに時間がかかることがあります。タスクが終了すると、次の例に示すように、オペレーションのステータスに done: true が表示され、エラーはリストされません。

{
  "name": "projects/915378992997/locations/us-central1/operations/VCN926615623331479552",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.automl.v1beta1.OperationMetadata",
    "createTime": "2018-10-18T21:23:15.181451Z",
    "updateTime": "2018-10-18T21:26:10.354502Z",
    "importDataDetails": {}
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.protobuf.Empty"
  }
}

バッチ予測タスクが完了すると、コマンドで指定した Google Cloud Storage バケットに予測の出力が保存されます。動画セグメントごとに JSON ファイルがあります。次に例を示します。

my-video-01.avi.json

{
  "input_uri": "automl-video-demo-data/sample_video.avi",
  "segment_classification_annotations": [ {
    "annotation_spec": {
      "display_name": "ApplyLipstick",
      "description": "ApplyLipstick"
    },
    "segments": [ {
      "segment": {
        "start_time_offset": {
        },
        "end_time_offset": {
          "seconds": 4,
          "nanos": 960000000
        }
      },
      "confidence": 0.43253016
    }, {
      "segment": {
        "start_time_offset": {
        },
        "end_time_offset": {
          "seconds": 4,
          "nanos": 960000000
        }
      },
      "confidence": 0.56746984
    } ],
    "frames": [ ]
  } ],
  "shot_classification_annotations": [ {
    "annotation_spec": {
      "display_name": "ApplyLipstick",
      "description": "ApplyLipstick"
    },
    "segments": [ {
      "segment": {
        "start_time_offset": {
        },
        "end_time_offset": {
          "seconds": 5
        }
      },
      "confidence": 0.43253016
    }, {
      "segment": {
        "start_time_offset": {
        },
        "end_time_offset": {
          "seconds": 5
        }
      },
      "confidence": 0.56746984
    } ],
    "frames": [ ]
  } ],
  "one_second_sliding_window_classification_annotations": [ {
    "annotation_spec": {
      "display_name": "ApplyLipstick",
      "description": "ApplyLipstick"
    },
    "segments": [ ],
    "frames": [ {
      "time_offset": {
        "nanos": 800000000
      },
      "confidence": 0.54533803
    }, {
      "time_offset": {
        "nanos": 800000000
      },
      ...
      "confidence": 0.57945728
    }, {
      "time_offset": {
        "seconds": 4,
        "nanos": 300000000
      },
      "confidence": 0.42054281
    } ]
  } ],
  "object_annotations": [ ],
  "error": {
    "details": [ ]
  }
}

クリーンアップ

カスタムモデルや関連するデータセットが不要になった場合は削除できます。

モデルの一覧表示

プロジェクトのモデルを識別子とともに一覧表示するには、次のコマンドを使用します。

curl -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
https://automl.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/models

モデルの削除

モデルを削除するには、次のコマンドを使用します。

  • your-model-id をモデルの識別子に置き換えます。
curl -X DELETE -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
https://automl.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/models/your-model-id

データセットの一覧表示

プロジェクトのデータセットを識別子とともに一覧表示するには、次のコマンドを使用します。

curl -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
https://automl.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/datasets

データセットの削除

データセットを削除するには、次のコマンドを使用します。

  • your-dataset-id をモデルの識別子に置き換えます。
curl -X DELETE -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
https://automl.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/datasets/your-dataset-id