Bilder mit der AutoML Vision API mit Labels versehen

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. Installieren Sie die Google Cloud CLI.
  3. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  4. Google Cloud-Projekt erstellen oder auswählen.

    • Erstellen Sie ein Google Cloud-Projekt:

      gcloud projects create PROJECT_ID

      Ersetzen Sie PROJECT_ID durch einen Namen für das Google Cloud-Projekt, das Sie erstellen.

    • Wählen Sie das von Ihnen erstellte Google Cloud-Projekt aus:

      gcloud config set project PROJECT_ID

      Ersetzen Sie PROJECT_ID durch den Namen Ihres Google Cloud-Projekts.

  5. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  6. Aktivieren Sie die AutoML and Cloud Storage APIs:

    gcloud services enable storage-component.googleapis.com automl.googleapis.com storage-api.googleapis.com
  7. Installieren Sie die Google Cloud CLI.
  8. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  9. Google Cloud-Projekt erstellen oder auswählen.

    • Erstellen Sie ein Google Cloud-Projekt:

      gcloud projects create PROJECT_ID

      Ersetzen Sie PROJECT_ID durch einen Namen für das Google Cloud-Projekt, das Sie erstellen.

    • Wählen Sie das von Ihnen erstellte Google Cloud-Projekt aus:

      gcloud config set project PROJECT_ID

      Ersetzen Sie PROJECT_ID durch den Namen Ihres Google Cloud-Projekts.

  10. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  11. Aktivieren Sie die AutoML and Cloud Storage APIs:

    gcloud services enable storage-component.googleapis.com automl.googleapis.com storage-api.googleapis.com
  12. Legen Sie für die Umgebungsvariable PROJECT_ID Ihre Projekt-ID fest.
    export PROJECT_ID=PROJECT_ID
    Die AutoML API-Aufrufe und Ressourcennamen enthalten Ihre Projekt-ID. Die Umgebungsvariable PROJECT_ID bietet eine bequeme Möglichkeit, die ID anzugeben.

Dataset vorbereiten

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

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 Objekts lauten (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 print-access-token, um ein Zugriffstoken für Ihr Google-Konto abzurufen.

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

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": "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 DATASET_ID durch die Dataset-ID für Ihr Dataset (nicht den Anzeigenamen). Beispiel: 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"
        ]
    }
  }
}'

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

Status des Importvorgangs abrufen

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

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

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

Liste mit Datasets abrufen

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

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

Die Ausgabe sollte in etwa so aussehen:

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

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 DATASET_ID durch die Dataset-ID für Ihr Dataset (nicht den Anzeigenamen).
  • Ersetzen Sie 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 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": {},
}'

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

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 OPERATION_ID durch die Vorgangs-ID für den Trainingsvorgang.
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

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


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

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 print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
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_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
      }
    }
  ]
}

Modell bewerten

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

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

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

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 MODEL_ID durch die ID für Ihr Modell.
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

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

Bereinigen

Löschen Sie das Google Cloud-Projekt mit den Ressourcen, damit Ihrem Google Cloud-Konto die auf dieser Seite verwendeten Ressourcen nicht in Rechnung gestellt werden.

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 print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
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 MODEL_ID durch die ID für Ihr Modell.
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

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 print-access-token)" \
-H "x-goog-user-project: PROJECT_ID" \
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 DATASET_ID durch die ID für Ihr Modell.
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

Nächste Schritte