AutoML API クイックスタートを使用したクラウドモデルの作成

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

  • 境界ボックスとラベルを含む画像のリスト(CSV ファイル)を Google Cloud Storage にコピーする。
  • AutoML Vision Object Detection を使用してデータセットを作成し、モデルをトレーニングしてデプロイする。

このクイックスタートでは、cURL コマンドを使用して AutoML Vision API にリクエストを送信します。ここで説明する手順はすべてユーザー インターフェースでも行うことができます。詳しくは、クイックスタート: ユーザー インターフェースの使用をご覧ください。UI または API の使用方法については、入門ガイドをご覧ください。

始める前に

プロジェクトを設定する

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

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

  3. 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 ロールに追加するよう依頼します。

データセットの準備

このクイックスタートでは、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,,
データセット画像の例
3916261642_0a504acd60_o.jpg

各行は、大きな画像内にローカライズされたオブジェクトに対応し、各オブジェクトはテスト、トレーニング、検証データとして指定されます。ここに含まれる 3 行は、gs://cloud-ml-data/img/openimage/3/2520/3916261642_0a504acd60_o.jpg で使用可能な同じ画像内にある 3 つの異なるオブジェクトを示しています。各行には、Baked goods または Cheese ラベルを持つ他の行に加えて、SaladSeafoodTomato という異なるラベルがあります。

左上と右下の頂点で、各画像の境界ボックスが指定されます。

  • (0,0)が左上の頂点に対応します。
  • (1,1)が右下の頂点に対応します。

上記の最初の行の場合、Salad ラベル付きオブジェクトの左上の頂点の(x、y)座標は(0.0,0.0954)であり、オブジェクトの右下の頂点の座標は(0.977,0.957)です。

CSV ファイルの形式と有効なデータセットの最小要件の詳細については、トレーニング データの準備をご覧ください。


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

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

ベータ版リリースでは、実際の場所に関係なく、リージョンとして us-central1 を使用します。

データセットを作成する

次の curl コマンドを使用して、選択した表示名で新しいデータセットを作成します。

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 '{
    "display_name": "your_display_name",
    "image_object_detection_dataset_metadata": {
    }
}'

以降の手順で必要になるデータセットの相対 ID(IOD5491013845671477445 など)が返されます。

{
  "name": "projects/${PROJECT_ID}/locations/us-central1/datasets/IOD5491013845671477445",
  "displayName": "your_display_name",
  "createTime": "2018-10-29T15:45:53.353442Z",
  "imageObjectDetectionDatasetMetadata": {}
}

データをインポートする

データセットにトレーニング データをインポートします。importData コマンドは、入力としてデータセットの URI を使用します。ここでは、Salads データセットが保存された一般公開の Google Cloud Storage のアドレスを提供します。この処理には 30 分ほどかかる場合があります。

  • your-dataset-id は、データセットのデータセット識別子(表示名ではない)に置き換えます。例: IOD5491013845671477445
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 '{
  "input_config": {
    "gcs_source": {
       "input_uris": [
         "gs://cloud-ml-data/img/openimage/csv/salads_ml_use.csv"
        ]
    }
  }
}'

オペレーションの相対 ID(IOD1555149246326374411 など)が返されます、この ID は、オペレーションのステータスを取得する際に使用します。

{
  "name": "projects/${PROJECT_NO}/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 コマンドを実行します。

  • 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/${PROJECT_NO}/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 application-default print-access-token)" \
https://automl.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/datasets

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

{
  "datasets": [
    {
      "name": "projects/${PROJECT_NO}/locations/us-central1/datasets/dataset-id1",
      "displayName": "display_name1",
      "createTime": "2018-10-29T15:45:53.353442Z",
      "exampleCount": 227,
      "imageObjectDetectionDatasetMetadata": {}
    },
    {
      "name": "projects/${PROJECT_NO}/locations/us-central1/datasets/dataset-id2",
      "displayName": "display_name2",
      "createTime": "2018-10-24T21:06:05.390059Z",
      "exampleCount": 227,
      "imageObjectDetectionDatasetMetadata": {}
    }
  ]
}

モデルのトレーニング

モデルをトレーニングするアプリケーションを開始する

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

次の curl コマンドを実行し、モデルをトレーニングします。

  • your-dataset-id は、データセットのデータセット識別子(表示名ではない)に置き換えます。
  • your_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 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_display_name",
  "image_object_detection_model_metadata": {},
}'

モデルのトレーニング オペレーションの ID(たとえば、IOD5644417707978784777)を取得する必要があります。これは、トレーニング オペレーションのステータスを取得する際に使用されます。

{
  "name": "projects/${PROJECT_NO}/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 コマンドを実行します。

  • 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/${PROJECT_NO}/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_NO}/locations/us-central1/models/IOD5644417707978784777"
  }
}

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

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

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

モデル ID(たとえば、IOD5644417707978784778)を取得する必要があります。これは、モデルのトレーニングが完了したときにモデルの評価指標を取得する際に使用されます。出力は次のようになります。

{
  "model": [
    {
      "name": "projects/${PROJECT_NO}/locations/us-central1/models/IOD5644417707978784778",
      "displayName": "your_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 コマンドを実行して、モデル評価指標の一覧を取得します。

  • your-model-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/models/your-model-id/modelEvaluations

AutoML Vision Object Detection は、モデルが全体的にどの程度適切に機能するかを示す評価指標のセットと、モデルが特定のラベルに対してどの程度適切に機能するかを示す各ラベルの評価指標をさまざまなしきい値と一緒に提供します。

モデルをデプロイする

予測を行う前に、モデルを手動でデプロイする必要があります。

次のコマンドを使用して、モデルをデプロイします。

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/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=="
        }
    }
}

  • your-model-id をモデル ID に置き換えます。
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: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 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:undeploy"

クリーンアップ

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

モデルの一覧表示

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

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 をモデル 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 をモデル 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