Cloud-Modelle über die AutoML API erstellen – Kurzanleitung

In dieser Kurzanleitung werden folgende Verfahren erläutert:

  • CSV-Datei mit Bildern, deren Begrenzungsrahmen Labels aufweisen, in Google Cloud Storage kopieren
  • Mit der AutoML Vision-Objekterkennung ein Dataset erstellen und ein Modell trainieren und bereitstellen

In dieser Kurzanleitung verwenden Sie cURL-Befehle, um Anfragen an die AutoML Vision API zu senden. Sie können die hier aufgeführten Schritte auch auf der Benutzeroberfläche ausführen. Folgen Sie dazu der Kurzanleitung zur Verwendung der Benutzeroberfläche. Weitere Informationen zur Verwendung der Benutzeroberfläche oder der API finden Sie in den Anleitungen.

Vorbereitung

Projekt einrichten

  1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist.

  4. AutoML and Cloud Storage APIs aktivieren.

    Aktivieren Sie die APIs

  5. Installieren Sie das gcloud-Befehlszeilentool.
  6. Folgen Sie der Anleitung, um ein Dienstkonto zu erstellen und eine Schlüsseldatei herunterzuladen.
  7. Legen Sie die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS so fest, dass sie auf die Schlüsseldatei des Dienstkontos verweist. Die Schlüsseldatei haben Sie beim Erstellen des Dienstkontos heruntergeladen.
    export GOOGLE_APPLICATION_CREDENTIALS=key-file
  8. Legen Sie die Umgebungsvariable PROJECT_ID auf Ihre Projekt-ID fest:
    export PROJECT_ID=your-project-id
    Die AutoML API-Aufrufe und Ressourcennamen enthalten Ihre Projekt-ID. Die Umgebungsvariable PROJECT_ID bietet eine bequeme Möglichkeit, die ID anzugeben.
  9. Wenn Sie der Inhaber Ihres Projekts sind, fügen Sie Ihr Dienstkonto der IAM-Rolle AutoML Editor hinzu und ersetzen Sie service-account-name durch den Namen Ihres neuen Dienstkontos. Zum Beispiel: 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. Wenn Sie jedoch kein Projektinhaber sind, bitten Sie einen Projektinhaber, der IAM-Rolle AutoML-Editor sowohl Ihre Nutzer-ID als auch das Dienstkonto hinzuzufügen.

Dataset vorbereiten

In dieser Kurzanleitung verwenden Sie ein Dataset, das aus Open Images Dataset Version 4 erstellt wurde. Dieses öffentlich verfügbare Salads-Dataset befindet sich unter gs://cloud-ml-data/img/openimage/csv/salads_ml_use.csv.

Das CSV-Format lautet:

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,,
Grafik: Beispiel für Dataset-Bild
3916261642_0a504acd60_o.jpg

Jede Zeile entspricht einem Objekt, das sich in einem größeren Bild befindet. Alle Objekte sind dabei jeweils spezifisch als Test-, Trainings- oder Validierungsdaten festgelegt. Die drei hier angegebenen Zeilen geben drei verschiedene Objekte an, die sich im gleichen Bild befinden, das unter gs://cloud-ml-data/img/openimage/3/2520/3916261642_0a504acd60_o.jpg verfügbar ist. Jede Zeile hat ein anderes Label: Salad, Seafood, Tomato. Daneben gibt es weitere Zeilen mit Labels wie Baked goods oder Cheese.

Über die Eckpunkte oben links und unten rechts werden für jedes Bild Begrenzungsrahmen festgelegt:

  • (0, 0) entspricht dem Eckpunkt ganz oben links.
  • (1, 1) entspricht dem Eckpunkt ganz unten rechts.

Für die erste Zeile, die oben angezeigt wird, lauten die Koordinaten (x, y) für den Eckpunkt oben links des Objekts mit dem Label Salad (0,0, 0,0954). Die Koordinaten für den Eckpunkt unten rechts des -Objekt sind (0.977,0,957).

Ausführliche Informationen zum Formatieren der CSV-Datei und zu den Mindestanforderungen zum Erstellen eines gültigen Datasets finden Sie unter Trainingsdaten vorbereiten.


Dataset erstellen und Trainingsdaten importieren

Der curl-Befehl verwendet den Befehl gcloud auth application-default print-access-token, um ein Zugriffstoken für ein Dienstkonto abzurufen, das Sie zuvor eingerichtet haben. Der Pfad zur Dienstkontoschlüsseldatei wird in der Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS gespeichert.

Verwenden Sie für die Betaversion unabhängig von Ihrem tatsächlichen Standort us-central1 als Region.

Dataset erstellen

Erstellen Sie mit dem folgenden curl-Befehl ein neues Dataset mit einem Anzeigenamen Ihrer Wahl:

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": {
    }
}'

In der Antwort wird eine relative Dataset-ID zurückgegeben (z. B. IOD5491013845671477445), die Sie in den folgenden Schritten benötigen.

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

Daten importieren

Importieren Sie Ihre Trainingsdaten in Ihr Dataset. Der Befehl importData akzeptiert als Eingabe den URI des Datasets. Hier geben Sie die öffentlich verfügbare Google Cloud Storage-Adresse an, unter der das Salads-Dataset gespeichert ist. Dieser Vorgang kann bis zu 30 Minuten dauern.

  • Ersetzen Sie your-dataset-id durch die Dataset-ID für Ihr Dataset (nicht den angezeigten Namen). Beispiel: 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"
        ]
    }
  }
}'

Die Antwort gibt eine relative Vorgangs-ID zurück (z. B. IOD1555149246326374411), die verwendet werden kann, um den Status des Vorgangs abzurufen.

{
  "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": {}
  }
}

Status des Importvorgangs abrufen

Sie können den Status des Importvorgangs mit dem folgenden curl-Befehl abfragen.

  • Ersetzen Sie your-operation-id durch die vom Importvorgang zurückgegebene Vorgangs-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

Der Importvorgang kann einige Zeit in Anspruch nehmen. Wenn der Import abgeschlossen ist, wird im Status des Vorgangs done: true angezeigt und es sollten keine Fehler aufgelistet sein, wie im folgenden Beispiel zu sehen.

Diese Anforderung gibt auch alle Warnungen für den Import des Datasets zurück. Für dieses Beispiel-Dataset wurden Fehler hinzugefügt, um Ihnen einen Eindruck dieser Warnungen zu vermitteln. Die Methode, solche Warnungen mit diesem Vorgang aufzurufen, ist gut geeignet, um Fehler in Ihren Daten zu finden.

{
  "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"
  }
}

Liste mit Datasets abrufen

Mit dem folgenden Befehl können Sie eine Liste Ihrer Datasets abrufen:

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

Die Ausgabe sollte in etwa so aussehen:

{
  "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": {}
    }
  ]
}

Modell trainieren

Anwendung für das Modelltraining starten

Nachdem Sie Ihr Dataset erstellt und Ihre Trainingsdaten in Ihr Dataset importiert haben, können Sie Ihr benutzerdefiniertes Modell trainieren.

Trainieren Sie das Modell mit dem folgenden curl-Befehl.

  • Ersetzen Sie your-dataset-id durch die Dataset-ID für Ihr Dataset (nicht den angezeigten Namen).
  • Ersetzen Sie your_display_name durch einen Namen, den Sie für Ihr Modell auswählen.
  • Geben Sie image_object_detection_model_metadata.model_type an. Sie können beispielsweise die Latenz oder die Genauigkeit optimieren:
    • Mit cloud-low-latency-1 optimieren Sie das Training hinsichtlich der Latenz.
    • Mit cloud-high-accuracy-1 optimieren Sie das Training hinsichtlich der Genauigkeit.
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": {},
}'

Sie sollten eine Vorgangs-ID für das Modelltraining erhalten (z. B. IOD5644417707978784777), die Sie verwenden können, um den Status des Trainingsvorgangs abzurufen.

{
  "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": {}
  }
}

Der Trainingsprozess kann mehrere Stunden dauern.

Status des Modelltrainings abrufen

Sie können den Status des Modelltrainings mit dem folgenden curl-Befehl abfragen.

  • Ersetzen Sie your-operation-id durch die Vorgangs-ID für den Trainingsvorgang.
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

Die Ausgabe sieht in etwa so aus: Wenn der Vorgang erfolgreich abgeschlossen wurde, wird done: true ohne Fehler angezeigt.


{
  "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"
  }
}

Modellverfügbarkeit prüfen

Nach erfolgreichem Abschluss des Modelltrainings können Sie prüfen, ob Ihr Modell verfügbar ist. Verwenden Sie dazu den folgenden Befehl, um die Modelle für Ihr Projekt aufzulisten.

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

Sie sollten eine Modell-ID erhalten, z. B. IOD5644417707978784778, mit der Sie Messwerte zur Modellbewertung abrufen können, wenn das Modell trainiert wurde. Die Ausgabe sollte in etwa so aussehen:

{
  "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
      }
    }
  ]
}

Modell bewerten

Sobald das Modell das Training abgeschlossen hat, können Sie mit dem folgenden curl-Befehl Modellbewertungsmesswerte auflisten.

  • Ersetzen Sie your-model-id durch die ID für Ihr Modell.
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

Die AutoML Vision-Objekterkennung bietet eine ganze Reihe von Bewertungsmesswerten. Sie geben an, wie gut das Modell insgesamt funktioniert. Auch für jedes Label gibt es Bewertungsmesswerte. Sie geben an, wie gut das Modell für das jeweilige Label bei unterschiedlichen Schwellenwerten funktioniert.

Modell bereitstellen

Bevor Sie eine Vorhersage erstellen können, müssen Sie das Modell manuell bereitstellen.

Verwenden Sie den folgenden Befehl, um das Modell bereitzustellen:

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
      }
    }'

Vorhersagen treffen

Vorhersageanfrage senden

Mit dem bereitgestellten Modell, der folgenden JSON-Datei und dem folgenden curl-Befehl können Sie eine Vorhersage für ein lokales Image erstellen.

  • Erstellen Sie eine JSON-Anfragedatei mit der Bezeichnung predict_request.json und stellen Sie im Feld "imageBytes" ein base64-codiertes Image bereit.

predict_request.json

{
    "payload": {
        "image": {
            "image_bytes": "/9j/4QAYRXhpZgAA...base64-encoded-image...9tAVx/zDQDlGxn//2Q=="
        }
    }
}

  • Ersetzen Sie your-model-id durch die ID für Ihr Modell.
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

Eine erfolgreiche Anfrage gibt eine Antwort mit einem oder mehreren Begrenzungsrahmen zurück, die durch zwei diagonal gegenüberliegende normalizedVertices angegeben werden. Jedem angegebenen Begrenzungsrahmen sind ein Konfidenzwert (score) und eine Annotation (displayName) zugeordnet.

{
  "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"
    }
  ]
}

Modell-Deployment rückgängig machen (optional)

Während der Bereitstellung fallen für das Modell Gebühren an. Wenn Sie die Gebühren für das Hosten des Modells vermeiden möchten, können Sie die Bereitstellung des Modells entfernen.

Führen Sie den folgenden Befehl aus, um die Bereitstellung des Modells aufzuheben:

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"

Bereinigen

Wenn Sie Ihr benutzerdefiniertes Modell und das zugehörige Dataset nicht mehr benötigen, können Sie sie löschen.

Modelle auflisten

Führen Sie folgenden Befehl aus, um für Ihr Projekt die Modelle und die zugehörigen IDs aufzulisten.

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

Modell löschen

Sie können ein Modell mit dem folgenden Befehl löschen.

  • Ersetzen Sie your-model-id durch die ID für Ihr Modell.
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

Datasets auflisten

Führen Sie folgenden Befehl aus, um für Ihr Projekt die Datasets und die zugehörigen IDs aufzulisten.

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

Dataset löschen

Sie können ein Dataset mit dem folgenden Befehl löschen.

  • Ersetzen Sie your-dataset-id durch die ID für Ihr Modell.
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