Erste Schritte mit dem integrierten Algorithmus zur Bildobjekterkennung

Mit den integrierten Algorithmen von AI Platform Training senden Sie Trainingsdaten und wählen einen Algorithmus aus – die Vorverarbeitung sowie das Training übernimmt dann AI Platform Training für Sie. Sie brauchen keinen Code für eine Trainingsanwendung zu schreiben. Mit integrierten Bildalgorithmen können Sie auf TPUs mit minimaler Konfiguration trainieren. Das resultierende TensorFlow SavedModel unterstützt die Bereitstellung auf CPUs und GPUs.

Übersicht

In dieser Anleitung trainieren Sie ein Bildobjekterkennungsmodell, ohne Code zu schreiben. Sie senden das COCO-Dataset zum Training an AI Platform Training und stellen das Modell dann darin bereit, um Vorhersagen zu erhalten. Das resultierende Modell klassifiziert häufige Objekte in Bildern komplexer Alltagsszenen.

Hinweis

Wenn Sie diese Anleitung über die Befehlszeile ausführen möchten, verwenden Sie entweder Cloud Shell oder eine Umgebung, in der das Google Cloud CLI installiert ist.

Führen Sie die folgenden Schritte aus, um ein GCP-Konto einzurichten, die erforderlichen APIs zu aktivieren und das Google Cloud CLI zu installieren und zu aktivieren.

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the AI Platform Training & Prediction and Compute Engine APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the AI Platform Training & Prediction and Compute Engine APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init

Cloud TPU Zugriff auf das Projekt gewähren

Führen Sie die folgenden Schritte aus, um den Namen des Cloud TPU-Dienstkontos zu autorisieren, der Ihrem Google Cloud-Projekt zugeordnet ist:

  1. Rufen Sie den Namen Ihres Cloud TPU-Dienstkontos durch einen Aufruf von projects.getConfig ab. Beispiel:

    PROJECT_ID=PROJECT_ID
    
    curl -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
        https://ml.googleapis.com/v1/projects/$PROJECT_ID:getConfig
    
  2. Speichern Sie den Wert der Felder serviceAccountProject und tpuServiceAccount, der von der API zurückgegeben wird.

  3. Initialisieren Sie das Cloud TPU-Dienstkonto:

    curl -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
      -H "Content-Type: application/json" -d '{}'  \
      https://serviceusage.googleapis.com/v1beta1/projects/<serviceAccountProject>/services/tpu.googleapis.com:generateServiceIdentity
    

Fügen Sie dem Projekt nun das Cloud TPU-Dienstkonto als Mitglied mit der Rolle Cloud ML-Dienst-Agent hinzu. Führen Sie die folgenden Schritte in der Google Cloud Console oder mit dem gcloud-Befehl aus:

Console

  1. Melden Sie sich in der Google Cloud Console an und wählen Sie das Projekt aus, in dem Sie die TPU verwenden.
  2. Wählen Sie IAM & Verwaltung > IAM aus.
  3. Klicken Sie auf die Schaltfläche Hinzufügen, um ein Mitglied zum Projekt hinzuzufügen.
  4. Geben Sie das TPU-Dienstkonto in das Textfeld Mitglieder ein.
  5. Klicken Sie auf die Drop-down-Liste Rollen.
  6. Aktivieren Sie die Rolle Cloud ML-Dienst-Agent (Dienstverwaltung > Cloud ML-Dienst-Agent).

gcloud

  1. Legen Sie Umgebungsvariablen fest, die die Projekt-ID und das Cloud TPU-Dienstkonto enthalten:

    PROJECT_ID=PROJECT_ID
    SVC_ACCOUNT=your-tpu-sa-123@your-tpu-sa.google.com.iam.gserviceaccount.com
    
  2. Weisen Sie dem Cloud TPU-Dienstkonto die Rolle ml.serviceAgent zu:

    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member serviceAccount:$SVC_ACCOUNT --role roles/ml.serviceAgent
    

Weitere Informationen über das Zuweisen von Rollen zu Dienstkonten finden Sie in der IAM-Dokumentation.

Einrichtung

Wir haben das ursprüngliche COCO-Dataset für die Verwendung mit dieser Anleitung geändert und hosten es im öffentlichen Cloud Storage-Bucket gs://cloud-samples-data/ai-platform/built-in/image/coco/.

Console

Algorithmus auswählen

  1. Rufen Sie in der Google Cloud Console die AI Platform Training-Seite „Jobs” auf:

    Zur Seite AI Platform Training-Jobs

  2. Klicken Sie auf die Schaltfläche Neuer Trainingsjob. Klicken Sie in den darunter angezeigten Optionen auf Integriertes Algorithmustraining. Anschließend wird die Seite Neuen Trainingsjob erstellen aufgerufen.

  3. Das Erstellen eines Trainingsjobs gliedert sich in vier Schritte. Der erste Schritt lautet Trainingsalgorithmus. Wählen Sie die Option Bildobjekterkennung aus und klicken Sie auf Weiter.

Trainingsdaten

  1. Wählen Sie im Bereich Trainingsdaten die Trainingsdaten für das Beispiel-Dataset aus, das in unserem öffentlichen Cloud Storage-Bucket gehostet wird:

    1. Wählen Sie Mehrere in einem Cloud Storage-Verzeichnis gespeicherte Dateien verwenden aus.

    2. Geben Sie Folgendes für den Verzeichnispfad ein: "cloud-samples-data/ai-platform/built-in/image/coco/".

    3. Geben Sie für Platzhaltername "train*" ein, um alle Trainingsdateien im Verzeichnis auszuwählen.

    4. Der Vollständige GCS-Pfad wird unten angezeigt: "gs://cloud-samples-data/ai-platform/built-in/image/coco/train*".

  2. Wählen Sie im Bereich Validierungsdaten die Validierungsdaten für das Beispiel-Dataset aus, das in unserem öffentlichen Cloud Storage-Bucket gehostet wird:

    1. Wählen Sie Mehrere in einem Cloud Storage-Verzeichnis gespeicherte Dateien verwenden aus.

    2. Geben Sie Folgendes für den Verzeichnispfad ein: "cloud-samples-data/ai-platform/built-in/image/coco/".

    3. Geben Sie für Platzhaltername "val*" ein, um alle Validierungsdateien im Verzeichnis auszuwählen.

    4. Der Vollständige GCS-Pfad wird unten angezeigt: "gs://cloud-samples-data/ai-platform/built-in/image/coco/val*".

  3. Geben Sie das Ausgabeverzeichnis in Ihrem Cloud Storage-Bucket an, in dem AI Platform Training Ihr trainiertes Modell, Prüfpunkte und andere Ausgaben des Trainingsjobs speichern soll. Sie können den genauen Pfad in Ihrem Bucket eingeben oder den Pfad über die Schaltfläche Durchsuchen auswählen.

gcloud

Richten Sie Umgebungsvariablen für Ihre Projekt-ID, Ihren Cloud Storage-Bucket, den Cloud Storage-Pfad zu den Trainingsdaten und den ausgewählten Algorithmus ein.

Die integrierten Algorithmen von AI Platform Training befinden sich in Docker-Containern, die in Container Registry gehostet werden.

PROJECT_ID="YOUR_PROJECT_ID"
BUCKET_NAME="YOUR_BUCKET_NAME"
REGION="us-central1"

gcloud config set project $PROJECT_ID
gcloud config set compute/region $REGION

# Set paths to the training and validation data.
TRAINING_DATA_PATH="gs://cloud-samples-data/ai-platform/built-in/image/coco/train*"
VALIDATION_DATA_PATH="gs://cloud-samples-data/ai-platform/built-in/image/coco/val*"

# Specify the Docker container for your built-in algorithm selection.
IMAGE_URI="gcr.io/cloud-ml-algos/image_object_detection:latest"

Trainingsjob senden

Zum Senden eines Jobs müssen Sie sowohl für das Training als auch den Bildobjekterkennungs-Algorithmus einige grundlegende Argumente angeben.

Allgemeine Argumente für den Trainingsjob:

Argumente für Trainingsjobs
Argument Beschreibung
job-id Eindeutige ID für den Trainingsjob; anhand dieser ID können Sie nach dem Senden des Trainingsjobs nach Logs zu seinem Status suchen.
job-dir Cloud Storage-Pfad, in dem AI Platform Training nach Abschluss eines erfolgreichen Trainingsjobs die Trainingsdateien speichert.
scale-tier Gibt Maschinentypen für das Training an. Verwenden Sie BASIC, um eine Konfiguration mit nur einer Maschine auszuwählen.
master-image-uri Container Registry-URI zur Angabe des Docker-Containers, der für den Trainingsjob genutzt werden soll. Verwenden Sie den Container für den integrierten Bildobjekterkennungs-Algorithmus, der zuvor als IMAGE_URI definiert wurde.
region Geben Sie die verfügbare Region an, in der Ihr Trainingsjob ausgeführt werden soll. In dieser Anleitung können Sie die Region us-central1 verwenden.

Spezifische Argumente für den integrierten Bildobjekterkennungs-Algorithmus:

Algorithmusargumente
Argument Beschreibung
training_data_path Pfad zu einem TFRecord-Pfadmuster, das für das Training verwendet wird.
validation_data_path Pfad zu einem TFRecord-Pfadmuster, das für die Validierung verwendet wird.
pretrained_checkpoint_path Pfad vortrainierter Prüfpunkte. Sie können einige veröffentlichte Prüfpunkte verwenden.
num_classes Die Anzahl der Klassen in den Trainings-/Validierungsdaten.
max_steps Die Anzahl der Schritte, die der Trainingsjob ausführen soll.
train_batch_size Die Anzahl der Bilder, die pro Trainingsschritt verwendet werden sollen.
num_eval_images Die Gesamtzahl der Bilder, die für die Bewertung verwendet werden.
Wenn hier 0 steht, werden alle Bilder in validation_data_path verwendet.
learning_rate_decay_type Die Methode, mit der die Lernrate während des Trainings verringert wird.
warmup_learning_rate Die Lernrate zu Beginn der Aufwärmphase.
warmup_steps Die Anzahl der Schritte, die während der Aufwärmphase ausgeführt werden sollen, oder die Dauer der Aufwärmphase in Schritten. Der Trainingsjob verwendet während der Aufwärmphase warmup_learning_rate. Nach der Aufwärmphase wird für den Trainingsjob initial_learning_rate verwendet.
initial_learning_rate Die anfängliche Lernrate nach Abschluss der Aufwärmphase.
stepwise_learning_rate_steps Die Schritte zum Verringern/Ändern der Lernraten für den Typ der schrittweisen Verringerung der Lernrate.
Beispiel: "100,200" bedeutet, dass sich die Lernrate (in Bezug auf stepwise_learning_rate_levels) in Schritt 100 und Schritt 200 ändert. Beachten Sie, dass dies nur dann berücksichtigt wird, wenn learning_rate_decay_type auf "stepwise" eingestellt ist.
stepwise_learning_rate_levels Der Lernratenwert jedes Schritts für den Typ der schrittweisen Verringerung der Lernrate. Beachten Sie, dass dies nur dann berücksichtigt wird, wenn learning_rate_decay_type auf "stepwise" eingestellt ist.
image_size Die für das Training verwendete Bildgröße (Breite und Höhe).
optimizer_type Das für das Training verwendete Optimierungstool. Dies sollte einer der folgenden Werte sein:
{momentum, adam, adadelta, adagrad, rmsprop}
optimizer_arguments Die Argumente für das Optimierungstool. Es ist eine durch Kommas getrennte Liste von "Name=Wert"-Paaren. Sie muss mit optimizer_type kompatibel sein. Beispiele:
  • Für das Momentum-Optimierungstool wird momentum=0.9 akzeptiert. Weitere Informationen finden Sie unter tf.train.MomentumOptimizer.
  • Beim Adam-Optimierungstool ist beta1=0.9,beta2=0.999 möglich. Weitere Informationen finden Sie unter tf.train.AdamOptimizer.
  • Beim RMSProp-Optimierungstool ist decay=0.9,momentum=0.1,epsilon=1e-10 möglich. Weitere Informationen finden Sie unter RMSPropOptimizer.
fpn_type Der Multi-Level-FPN-Typ (Feature Pyramid Network). Dies muss einer der folgenden Werte sein: {fpn, nasfpn}.
resnet_depth Die Tiefe des ResNet-Backbones. Dies muss einer der folgenden Werte sein: {18,34,50,101,152,200}.
max_num_bboxes_in_training Die maximale Anzahl der vorgeschlagenen Begrenzungsrahmen für das Training.
max_num_bboxes_in_prediction Die maximale Anzahl der vorgeschlagenen Begrenzungsrahmen für Vorhersageausgaben.
bbox_aspect_ratios Die Größe der Basisanker, die die auf jeder Ebene hinzugefügten Seitenverhältnisanker repräsentieren. Die Zahl gibt das Verhältnis von Breite zu Höhe an. Beispielsweise fügt "1.0,2.0,0.5" drei Anker auf jeder Maßstabsebene hinzu.
nms_iou_threshold Der Schwellenwert für die Entscheidung, ob sich die Begrenzungsrahmen in Bezug auf IOU für die nicht maximale Unterdrückung überschneiden.
nms_score_threshold Der Schwellenwert für die Entscheidung, wann Begrenzungsrahmen auf der Grundlage der Punktzahlen entfernt werden sollen.
focal_loss_alpha Alphawert für den Fokusverlust (Balancing-Parameter).
focal_loss_gamma Gammawert für den Fokusverlust (Fokussierungsparameter).
aug_scale_min Die minimale Skalierung, die während der Bildverstärkung angewendet wird. Der Wert liegt im Bereich [0, 1.0].
aug_scale_max Die maximale Skalierung, die während der Bildverstärkung angewendet wird. Der Wert liegt im Bereich [1.0, inf].
aug_rand_hflip Boolescher Wert. Wenn diese Option auf "True" gesetzt ist, wird das Training um zufälliges horizontales Spiegeln erweitert.

Eine detaillierte Liste aller weiteren Flags für den Bildobjekterkennungs-Algorithmus finden Sie in der Referenz zur integrierten Bildobjekterkennung.

Console

Algorithmusargumente

Geben Sie im ersten Teil des Tabs Algorithmusargumente die folgenden Werte ein:

  • Anzahl der Klassen: 91
  • Max steps (Max. Schritte): 15.000
  • Train batch size (Batchgröße für Training): 64
  • Number of evaluation images (Anzahl der Bewertungsbilder): 5.000

Gehen Sie im Bereich Modell des Tabs Algorithmusargumente so vor:

  1. Für Vortrainierter Prüfpunktpfad tragen Sie gs://cloud-samples-data/ai-platform/built-in/image/pretrained_checkpoints/detection/ ein.

  2. Übernehmen Sie für alle anderen Felder die Standardeinstellungen und klicken Sie auf Weiter.

Jobeinstellungen

Auf dem Tab Jobeinstellungen:

  1. Geben Sie eine eindeutige Job-ID ein, z. B. "object_detection_example".
  2. Geben Sie eine verfügbare Region wie "us-central1" ein.
  3. Wählen Sie "CUSTOM" als Skalierungsstufe aus, um Maschinentypen auszuwählen. Ein Bereich für die Benutzerdefinierte Clusterspezifikation wird angezeigt.
    1. Wählen Sie für Master-Typ complex_model_m aus.
    2. Wählen Sie für Worker-Typ cloud_tpu aus. Die Anzahl der Worker ist standardmäßig auf 1 gesetzt.

Klicken Sie auf Fertig, um den Trainingsjob zu senden.

gcloud

  1. Richten Sie alle Argumente für den Trainingsjob und den Algorithmus ein, bevor Sie den Job mit gcloud senden:

    DATASET_NAME="coco"
    ALGORITHM="object_detection"
    MODEL_NAME="${DATASET_NAME}_${ALGORITHM}_model"
    
    # Give a unique name to your training job.
    DATE="$(date '+%Y%m%d_%H%M%S')"
    JOB_ID="${MODEL_NAME}_${DATE}"
    
    # Make sure you have access to this Cloud Storage bucket.
    JOB_DIR="gs://${BUCKET_NAME}/algorithms_training/${MODEL_NAME}/${DATE}"
    
  2. Senden Sie den Job:

    gcloud ai-platform jobs submit training $JOB_ID \
      --region=$REGION \
      --config=config.yaml \
      --job-dir=$JOB_DIR \
      -- \
      --training_data_path=$TRAINING_DATA_PATH \
      --validation_data_path=$VALIDATION_DATA_PATH \
      --train_batch_size=64 \
      --num_eval_images=500 \
      --train_steps_per_eval=2000 \
      --max_steps=15000 \
      --num_classes=90 \
      --warmup_steps=500 \
      --initial_learning_rate=0.08 \
      --fpn_type="nasfpn" \
      --aug_scale_min=0.8 \
      --aug_scale_max=1.2

  3. Nachdem der Job erfolgreich gesendet wurde, können Sie die Logs mit folgenden gcloud-Befehlen aufrufen:

    gcloud ai-platform jobs describe $JOB_ID
    gcloud ai-platform jobs stream-logs $JOB_ID
    

Struktur des Jobverzeichnisses

Nach erfolgreicher Ausführung eines Trainingsjobs erstellt AI Platform Training ein trainiertes Modell sowie einige andere Artefakte in Ihrem Cloud Storage-Bucket. Ihr JOB_DIR hat folgende Verzeichnisstruktur:

  • model/ (TensorFlow SavedModel-Verzeichnis, das auch die Datei deployment_config.yaml enthält)
    • saved_model.pb
    • deployment_config.yaml
  • eval/
    • events.out.tfevents.[timestamp].cmle-training-[timestamp]
    • events.out.tfevents...
  • variables/
    • variables.data-00000-of-00001
    • variables.index

Das Jobverzeichnis enthält auch verschiedene Modellprüfpunktdateien.

Bestätigen Sie, dass die Verzeichnisstruktur in Ihrem JOB_DIR hiermit übereinstimmt:

gcloud storage ls $JOB_DIR/* --all-versions

Trainiertes Modell bereitstellen

AI Platform Training verwaltet Ihre trainierten Modelle mithilfe von Modell- und Versionsressourcen. Ein AI Platform Training-Modell ist ein Container für die Versionen Ihres Modells für maschinelles Lernen.

Zur Bereitstellung eines Modells legen Sie eine Modellressource in AI Platform Training an, erstellen eine Version dieses Modells und rufen dann mithilfe des Modells und der Version Onlinevorhersagen ab.

Weitere Informationen zum Bereitstellen von Modellen in AI Platform Training finden Sie unter TensorFlow-Modell bereitstellen.

Console

  1. Auf der Seite Jobs sind alle Trainingsjobs aufgelistet. Klicken Sie auf den Namen des gerade gesendeten Trainingsjobs ("object_detection" oder den von Ihnen verwendeten Jobnamen).

  2. Auf der Seite Jobdetails sehen Sie den allgemeinen Fortschritt Ihres Jobs. Sie können auch auf Logs ansehen klicken, um eine detailliertere Ansicht des Fortschritts aufzurufen.

  3. Wenn die Jobausführung erfolgreich war, wird oben die Schaltfläche Modell bereitstellen eingeblendet. Klicken Sie auf Modell bereitstellen.

  4. Wählen Sie Als neues Modell bereitstellen aus und geben Sie einen Modellnamen wie "algorithms_object_detection_model" ein. Klicken Sie anschließend auf Bestätigen.

  5. Geben Sie auf der Seite Version erstellen einen Versionsnamen wie "v1" ein und übernehmen Sie für alle anderen Felder die Standardeinstellungen. Klicken Sie auf Speichern.

gcloud

Beim Training mit dem integrierten Algorithmus zur Bildobjekterkennung wird die Datei deployment_config.yaml erstellt. Diese Datei vereinfacht das Bereitstellen Ihres Modells für Vorhersagen in AI Platform Training.

  1. Kopieren Sie die Datei in Ihr lokales Verzeichnis und rufen Sie ihren Inhalt auf:

    gcloud storage cp $JOB_DIR/model/deployment_config.yaml .
    cat deployment_config.yaml
    

    Ihre deployment_config.yaml-Datei sollte in etwa so aussehen:

    deploymentUri: gs://BUCKET_NAME/algorithms_training/coco_object_detection/model
    framework: TENSORFLOW
    labels:
      global_step: '1000'
      job_id: coco_object_detection_20190227060114
    runtimeVersion: '1.14'
    
  2. Erstellen Sie das Modell und die Version in AI Platform Training:

    gcloud ai-platform models create $MODEL_NAME --regions $REGION
    
    # Create a model and a version using the file above.
    VERSION_NAME="v_${DATE}"
    
    gcloud ai-platform versions create $VERSION_NAME \
      --model $MODEL_NAME \
      --config deployment_config.yaml
    

    Das Erstellen der Version dauert einige Minuten.

Onlinevorhersagen abrufen

Wenn Sie Vorhersagen anfordern, müssen die Eingabedaten als JSON formatiert sein.

  1. Laden Sie die Trainingsartefaktdateien herunter:

    gcloud storage cp $JOB_DIR/artifacts/* .
    
  2. Bereiten Sie die Vorhersageeingabe für ein Bild vor.

    Zum Senden einer Onlinevorhersageanfrage mit Google Cloud CLI, wie in diesem Beispiel, schreiben Sie jede Instanz in eine eigene Zeile in einer durch Zeilenumbruch getrennten JSON-Datei.

    Führen Sie die folgenden Befehle in Ihrem Terminal aus, um eine Eingabe für eine einzelne Instanz zu erstellen, die Sie an AI Platform Prediction senden können:

    Das folgende Python-Skript codiert ein einzelnes Bild mit base64, formatiert es für die Vorhersage, fügt einen Instanzschlüssel hinzu und schreibt das Ergebnis in eine Datei mit dem Namen prediction_instances.json:

    import json
    import base64
    import tensorflow as tf
    
    IMAGE_URI='gs://cloud-samples-data/ai-platform/built-in/image/tutorial_examples/coco_sample.jpeg'
    
    with tf.gfile.Open(IMAGE_URI, 'rb') as image_file:
      encoded_string = base64.b64encode(image_file.read()).decode('utf-8')
    
    image_bytes = {'b64': str(encoded_string)}
    instances = {'image_bytes': image_bytes, 'key': '1'}
    with open("prediction_instances.json","w") as f:
      f.write(json.dumps(instances))
    
  3. Senden Sie die Vorhersageanfrage:

    gcloud ai-platform predict --model $MODEL_NAME \
     --version $VERSION_NAME \
     --json-instances prediction_instances.json
    

Für jedes im Bild erkannte Objekt enthält die Vorhersageausgabe Klassen, Punktzahlen und die Positionen von Begrenzungsrahmen.

Über die Daten

Das COCO-Dataset (Common Objects in Context, Häufige Objekte im Kontext) von Microsoft ist ein umfangreiches Dataset für Objekterkennung, Segmentierung und Untertitelung.

Nächste Schritte