AutoML Vision API を使用して画像にラベルを付ける
このクイックスタートでは、以下のプロセスを順を追って説明します。
- 境界ボックスとラベルを含む画像のリスト(CSV ファイル)を Google Cloud Storage にコピーする。
- AutoML Vision Object Detection を使用してデータセットを作成し、モデルをトレーニングしてデプロイする。
このクイックスタートでは、cURL コマンドを使用して AutoML Vision API にリクエストを送信します。ここで説明する手順はすべてユーザー インターフェースでも行うことができます。詳しくは、クイックスタート: ユーザー インターフェースの使用をご覧ください。UI または API の使用方法については、入門ガイドをご覧ください。
始める前に
プロジェクトを設定する
- Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
- Google Cloud CLI をインストールします。
-
gcloud CLI を初期化するには:
gcloud init
-
Google Cloud プロジェクトを作成または選択します。
-
Google Cloud プロジェクトを作成する
gcloud projects create PROJECT_ID
-
作成した Google Cloud プロジェクトを選択します。
gcloud config set project PROJECT_ID
-
-
AutoML and Cloud Storage API を有効にします。
gcloud services enable storage-component.googleapis.com
automl.googleapis.com storage-api.googleapis.com - Google Cloud CLI をインストールします。
-
gcloud CLI を初期化するには:
gcloud init
-
Google Cloud プロジェクトを作成または選択します。
-
Google Cloud プロジェクトを作成する
gcloud projects create PROJECT_ID
-
作成した Google Cloud プロジェクトを選択します。
gcloud config set project PROJECT_ID
-
-
AutoML and Cloud Storage API を有効にします。
gcloud services enable storage-component.googleapis.com
automl.googleapis.com storage-api.googleapis.com - 環境変数
PROJECT_ID
をプロジェクト ID に設定します。export PROJECT_ID=PROJECT_ID
AutoML API 呼び出しとリソース名には、プロジェクト ID が含まれています。環境変数PROJECT_ID
は、ID の指定に便利です。
データセットの準備
このクイックスタートでは、Open Images Dataset V4 から作成したデータセットを使用します。一般公開されている Salads のデータセットは gs://cloud-ml-data/img/openimage/csv/salads_ml_use.csv
にあります。
CSV 形式は次のとおりです。
TRAINING,gs://cloud-ml-data/img/openimage/3/2520/3916261642_0a504acd60_o.jpg,Salad,0.0,0.0954,,,0.977,0.957,, VALIDATION,gs://cloud-ml-data/img/openimage/3/2520/3916261642_0a504acd60_o.jpg,Seafood,0.0154,0.1538,,,1.0,0.802,, TEST,gs://cloud-ml-data/img/openimage/3/2520/3916261642_0a504acd60_o.jpg,Tomato,0.0,0.655,,,0.231,0.839,,
各行は、大きな画像内にローカライズされたオブジェクトに対応し、各オブジェクトはテスト、トレーニング、検証データとして指定されます。ここに含まれる 3 行は、gs://cloud-ml-data/img/openimage/3/2520/3916261642_0a504acd60_o.jpg
で使用可能な同じ画像内にある 3 つの異なるオブジェクトを示しています。各行には、Baked goods
または Cheese
ラベルを持つ他の行に加えて、Salad
、Seafood
、Tomato
という異なるラベルがあります。
左上と右下の頂点で、各画像の境界ボックスが指定されます。
- (0,0)が左上の頂点に対応します。
- (1,1)が右下の頂点に対応します。
上記の最初の行の場合、Salad
ラベル付きオブジェクトの左上の頂点の(x、y)座標は(0.0,0.0954)であり、オブジェクトの右下の頂点の座標は(0.977,0.957)です。
CSV ファイルの形式と有効なデータセットの最小要件の詳細については、トレーニング データの準備をご覧ください。
データセットの作成とトレーニング データのインポート
curl
コマンドは、gcloud auth print-access-token
コマンドを使用して Google アカウントのアクセス トークンを取得します。
ベータ版リリースでは、実際の場所に関係なく、リージョンとして us-central1
を使用します。
データセットを作成する
次の curl
コマンドを使用して、選択した表示名で新しいデータセットを作成します。
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ -H "Content-Type: application/json" \ "https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/datasets" -d '{ "display_name": "DISPLAY_NAME", "image_object_detection_dataset_metadata": { } }'
以降の手順で必要になるデータセットの相対 ID(IOD5491013845671477445
など)が返されます。
{ "name": "projects/PROJECT_ID/locations/us-central1/datasets/IOD5491013845671477445", "displayName": "DISPLAY_NAME", "createTime": "2018-10-29T15:45:53.353442Z", "imageObjectDetectionDatasetMetadata": {} }
データをインポートする
データセットにトレーニング データをインポートします。importData
コマンドは、入力としてデータセットの URI を使用します。ここでは、Salads データセットが保存された一般公開の Google Cloud Storage のアドレスを提供します。この処理には 30 分ほどかかる場合があります。
- DATASET_ID は、データセットのデータセット識別子(表示名ではない)に置き換えます。例:
IOD5491013845671477445
。
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ -H "Content-Type: application/json" \ https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID:importData \ -d '{ "input_config": { "gcs_source": { "input_uris": [ "gs://cloud-ml-data/img/openimage/csv/salads_ml_use.csv" ] } } }'
オペレーションの相対 ID(IOD1555149246326374411
など)が返されます、この ID は、オペレーションのステータスを取得する際に使用します。
{ "name": "projects/PROJECT_NUMBER/locations/us-central1/operations/IOD1555149246326374411", "metadata": { "@type": "type.googleapis.com/google.cloud.automl.v1beta1.OperationMetadata", "createTime": "2018-10-29T15:56:29.176485Z", "updateTime": "2018-10-29T15:56:29.176485Z", "importDataDetails": {} } }
インポート オペレーションのステータスを取得する
データのインポート オペレーションのステータスを取得するには、curl
コマンドを実行します。
- OPERATION_ID は、データのインポート オペレーションで返されたオペレーション ID で置き換えます。
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ -H "Content-Type: application/json" \ https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/operations/OPERATION_ID
インポート オペレーションが完了するまでに時間がかかることがあります。インポート タスクが完了すると、次の例のように、オペレーションのステータスが done: true
と表示されます。エラーは発生していません。
このリクエストに対しては、データセットのインポートに関する警告も返されます。この警告の例を示すため、このデータセットにエラーを追加しました。このオペレーションで警告を表示すると、データ内のエラーを探しやすくなります。
{ "name": "projects/PROJECT_NUMBER/locations/us-central1/operations/IOD1555149246326374411", "metadata": { "@type": "type.googleapis.com/google.cloud.automl.v1beta1.OperationMetadata", "createTime": "2018-10-29T15:56:29.176485Z", "updateTime": "2018-10-29T16:10:41.326614Z", "importDataDetails": {} }, "done": true, "response": { "@type": "type.googleapis.com/google.protobuf.Empty" } }
データセットのリストを取得する
データセットのリストを取得するには、次のコマンドを使用します。
curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/datasets
出力は次のようになります。
{ "datasets": [ { "name": "projects/PROJECT_NUMBER/locations/us-central1/datasets/DATASET_ID1", "displayName": "DISPLAY_NAME1", "createTime": "2018-10-29T15:45:53.353442Z", "exampleCount": 227, "imageObjectDetectionDatasetMetadata": {} }, { "name": "projects/PROJECT_NUMBER/locations/us-central1/datasets/DATASET_ID2", "displayName": "DISPLAY_NAME2", "createTime": "2018-10-24T21:06:05.390059Z", "exampleCount": 227, "imageObjectDetectionDatasetMetadata": {} } ] }
モデルのトレーニング
モデルをトレーニングするアプリケーションを開始する
データセットを作成し、トレーニング データをデータセットにインポートしたら、カスタムモデルをトレーニングできます。
次の curl
コマンドを実行し、モデルをトレーニングします。
- DATASET_ID は、データセットのデータセット識別子(表示名ではない)に置き換えます。
- DISPLAY_NAME は、モデルに選択した名前に置き換えます。
image_object_detection_model_metadata.model_type
を指定します。レイテンシや精度を最適化するには、次の 2 つの方法があります。cloud-low-latency-1
- トレーニングのレイテンシを最適化します。cloud-high-accuracy-1
- トレーニングの精度を最適化します。
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ -H "Content-Type: application/json" \ https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/models -d '{ "datasetId": "DATASET_ID", "displayName": "DISPLAY_NAME", "image_object_detection_model_metadata": {}, }'
モデルのトレーニング オペレーションの ID(たとえば、IOD5644417707978784777
)を取得する必要があります。これは、トレーニング オペレーションのステータスを取得する際に使用されます。
{ "name": "projects/PROJECT_NUMBER/locations/us-central1/operations/IOD5644417707978784777", "metadata": { "@type": "type.googleapis.com/google.cloud.automl.v1beta1.OperationMetadata", "createTime": "2018-10-29T16:41:23.902167Z", "updateTime": "2018-10-29T16:41:23.902167Z", "createModelDetails": {} } }
トレーニング プロセスが完了するまでに数時間かかることがあります。
モデル トレーニング オペレーションのステータスを取得する
モデルのトレーニング オペレーションのステータスを確認するには、次の curl
コマンドを実行します。
- OPERATION_ID をトレーニング オペレーションのオペレーション ID に置き換えます。
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ -H "Content-Type: application/json" \ https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/operations/OPERATION_ID
出力は次のようになります。オペレーションが完了すると、done: true
が表示されます。エラーはありません。
{ "name": "projects/PROJECT_NUMBER/locations/us-central1/operations/IOD5644417707978784777", "metadata": { "@type": "type.googleapis.com/google.cloud.automl.v1beta1.OperationMetadata", "createTime": "2018-10-24T22:08:23.327323Z", "updateTime": "2018-10-24T23:41:18.452855Z", "createModelDetails": {} }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.automl.v1beta1.Model", "name": "projects/PROJECT_NUMBER/locations/us-central1/models/IOD5644417707978784777" } }
モデルが使用可能であることを確認する
モデル トレーニング オペレーションが正常に完了したら、次のコマンドを使用してプロジェクトのモデルを一覧表示することにより、モデルが使用可能であることを確認できます。
curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/models
モデル ID(たとえば、IOD5644417707978784778
)を取得する必要があります。これは、モデルのトレーニングが完了したときにモデルの評価指標を取得する際に使用されます。出力は次のようになります。
{ "model": [ { "name": "projects/PROJECT_NUMBER/locations/us-central1/models/IOD5644417707978784778", "displayName": "DISPLAY_NAME", "datasetId": "IOD5491013845671477445", "createTime": "2018-10-24T23:37:00.858493Z", "updateTime": "2018-10-24T23:37:00.858493Z", "deploymentState": "DEPLOYED", "imageObjectDetectionModelMetadata": { "modelType": "cloud-low-latency-1", "nodeCount": "1", "nodeQps": 1.2987012987012987 } } ] }
モデルを評価する
モデルの評価が完了したら、次の curl
コマンドを実行して、モデル評価指標の一覧を取得します。
- MODEL_ID をモデル ID に置き換えます。
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ -H "Content-Type: application/json" \ https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/models/MODEL_ID/modelEvaluations
AutoML Vision Object Detection は、モデルが全体的にどの程度適切に機能するかを示す評価指標のセットと、モデルが特定のラベルに対してどの程度適切に機能するかを示す各ラベルの評価指標をさまざまなしきい値と一緒に提供します。
モデルをデプロイする
予測を行う前に、モデルを手動でデプロイする必要があります。
次のコマンドを使用して、モデルをデプロイします。
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ -H "Content-Type: application/json" \ https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/models/MODEL_ID:deploy \ -d '{ "imageObjectDetectionModelDeploymentMetadata": { "nodeCount": 2 } }'
予測を行う
予測リクエストを送信する
デプロイされたモデルを使用して、次の JSON ファイルと curl
コマンドを実行すると、ローカル画像で予測を行えます。
- リクエストの JSON ファイルを
predict_request.json
という名前で作成し、base64 でエンコードされた画像を"imageBytes"
フィールドに指定します。
predict_request.json
{ "payload": { "image": { "image_bytes": "/9j/4QAYRXhpZgAA...base64-encoded-image...9tAVx/zDQDlGxn//2Q==" } } }
- MODEL_ID をモデル ID に置き換えます。
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ -H "Content-Type: application/json" \ "https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/models/MODEL_ID:predict" -d @PATH_TO_JSON_FILE/predict_request.json
リクエストが成功すると、2 つの対角線上の normalizedVertices
で指定された 1 つ以上の境界ボックスが返されます。識別された各境界ボックスには信頼度(score
)とアノテーション(displayName
)が関連付けられています。
{ "payload": [ { "imageObjectDetection": { "boundingBox": { "normalizedVertices": [ { "x": 0.034553755, "y": 0.015524037 }, { "x": 0.941527, "y": 0.9912563 } ] }, "score": 0.9997793 }, "displayName": "Salad" }, { "imageObjectDetection": { "boundingBox": { "normalizedVertices": [ { "x": 0.11737197, "y": 0.7098793 }, { "x": 0.510878, "y": 0.87987 } ] }, "score": 0.63219965 }, "displayName": "Tomato" } ] }
モデルのデプロイを解除する(省略可)
モデルがデプロイされている間は料金がかかります。このモデルのホスティング料金が発生しないようにするには、モデルのデプロイを解除します。
次のコマンドを実行して、モデルのデプロイを解除します。
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ -H "Content-Type: application/json" \ "https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/models/MODEL_ID:undeploy"
クリーンアップ
このページで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、Google Cloud プロジェクトとそのリソースをまとめて削除してください。
カスタムモデルや関連するデータセットが不要になった場合は削除できます。
モデルの一覧表示
プロジェクトのモデルを識別子とともに一覧表示するには、次のコマンドを使用します。
curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/models
モデルの削除
モデルを削除するには、次のコマンドを使用します。
- MODEL_ID をモデル ID に置き換えます。
curl -X DELETE \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ -H "Content-Type: application/json" \ https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/models/MODEL_ID
データセットを一覧表示する
プロジェクトのデータセットを識別子とともに一覧表示するには、次のコマンドを使用します。
curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/datasets
データセットの削除
データセットを削除するには、次のコマンドを使用します。
- DATASET_ID をモデル ID に置き換えます。
curl -X DELETE \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ -H "Content-Type: application/json" \ https://automl.googleapis.com/v1beta1/projects/PROJECT_ID/locations/us-central1/datasets/DATASET_ID