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
- 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.
- Installieren Sie die Google Cloud CLI.
-
Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init
-
Google Cloud-Projekt erstellen oder auswählen.
-
Cloud-Projekt erstellen:
gcloud projects create PROJECT_ID
-
Wählen Sie das von Ihnen erstellte Cloud-Projekt aus:
gcloud config set project PROJECT_ID
-
-
Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist.
-
Aktivieren Sie die AutoML and Cloud Storage APIs:
gcloud services enable storage-component.googleapis.com
automl.googleapis.com storage-api.googleapis.com - Installieren Sie die Google Cloud CLI.
-
Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init
-
Google Cloud-Projekt erstellen oder auswählen.
-
Cloud-Projekt erstellen:
gcloud projects create PROJECT_ID
-
Wählen Sie das von Ihnen erstellte Cloud-Projekt aus:
gcloud config set project PROJECT_ID
-
-
Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist.
-
Aktivieren Sie die AutoML and Cloud Storage APIs:
gcloud services enable storage-component.googleapis.com
automl.googleapis.com storage-api.googleapis.com - Legen Sie die Umgebungsvariable
PROJECT_ID
auf Ihre Projekt-ID fest.export PROJECT_ID=PROJECT_ID
Die AutoML API-Aufrufe und Ressourcennamen enthalten Ihre Projekt-ID. Die UmgebungsvariablePROJECT_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,,

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 Befehl curl
ruft mit dem Befehl gcloud auth print-access-token
ein Zugriffstoken für Ihr Google-Konto ab.
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.
- Mit
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 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