Training mit dem integrierten Algorithmus zur Bildobjekterkennung

Wenn Sie integrierte Algorithmen für das Training in AI Platform Training verwenden, können Sie Ihr Dataset zum Trainieren eines Modells einreichen, ohne Trainingscode schreiben zu müssen. Auf dieser Seite wird erläutert, wie der integrierte Algorithmus zur Bildobjekterkennung funktioniert und wie er verwendet wird.

Übersicht

Der integrierte Algorithmus zur Bildobjekterkennung verwendet Ihre Trainings- und Validierungs-Datasets, um Modelle kontinuierlich zu trainieren. Anschließend gibt er das genaueste SavedModel aus, das während des Trainingsjobs generiert wurde. Sie können auch die Hyperparameter-Abstimmung verwenden, um die beste Modellgenauigkeit zu erzielen. Das exportierte SavedModel kann direkt für die Vorhersage verwendet werden, entweder lokal oder bereitgestellt in AI Platform Prediction für Produktionsdienste.

Beschränkungen

Integrierte Bildalgorithmen unterstützen das Training mit einzelnen CPUs, GPUs oder TPUs. Das resultierende SavedModel ist mit der Bereitstellung auf CPUs und GPUs kompatibel.

Die folgenden Funktionen werden beim Training mit dem integrierten Algorithmus zur Bildobjekterkennung nicht unterstützt.

Unterstützte Maschinentypen

Folgende AI Platform Training-Skalierungsstufen und -Maschinentypen werden unterstützt:

  • Skalierungsstufe BASIC
  • Skalierungsstufe BASIC_TPU
  • Skalierungsstufe CUSTOM mit beliebigen von AI Platform Training unterstützten Compute Engine-Maschinentypen
  • Skalierungsstufe CUSTOM mit einem der folgenden Legacy-Maschinentypen:
    • standard
    • large_model
    • complex_model_s
    • complex_model_m
    • complex_model_l
    • standard_gpu
    • standard_p100
    • standard_v100
    • large_model_v100
    • complex_model_m_gpu
    • complex_model_l_gpu
    • complex_model_m_p100
    • complex_model_m_v100
    • complex_model_l_v100
    • TPU_V2 (8 Kerne)

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.

Eingabedaten für das Training formatieren

Der integrierte Algorithmus zur Bildobjekterkennung erfordert, dass Ihre Eingabedaten als tf.Examples formatiert und in TFRecord-Dateien gespeichert werden. Die Datenstruktur tf.Example und das TFRecord-Dateiformat sind beide für ein effizientes Datenlesen mit TensorFlow ausgelegt.

Das einfache TFRecord-Format speichert eine Reihe von Binärdatensätzen. In diesem Fall enthalten alle Datensätze binäre Darstellungen von Bildern. Jedes Bild wird zusammen mit seinen Klassenlabels als ein tf.Example dargestellt. Sie können viele tf.Examples in einer einzelnen TFRecord-Datei speichern. Sie können auch ein großes Dataset aus mehreren TFRecord-Dateien aufteilen.

Weitere Informationen finden Sie unter TFRecord und tf.Example

Bilder in TFRecord konvertieren

Informationen zum Konvertieren von Bildern in das Format, das zum Abrufen von Vorhersagen erforderlich ist, finden Sie im TensorFlow Model Garden-Leitfaden unter Eingaben für die Objekterkennung vorbereiten.

Cloud Storage-Bucket-Berechtigungen prüfen

Speichern Sie Ihre Daten in einem Cloud Storage-Bucket desselben Google Cloud-Projekts, in dem Sie AI Platform Training-Jobs ausführen. Gewähren Sie andernfalls AI Platform Training Zugriff auf den Cloud Storage-Bucket, in dem Ihre Daten gespeichert sind.

Erforderliches Eingabeformat

Für das Training mit dem integrierten Algorithmus zur Bildobjekterkennung müssen Ihre Bilddaten als tf.Examples mit den folgenden Feldern strukturiert sein:

  • image/encoded ist das als String codierte RAW-Bild.

  • image/object/class/label ist eine Liste von Ganzzahllabels für das entsprechende Bild (ein Label pro Feld).

    Der Satz von Ganzzahllabels für Ihr Dataset muss eine mit 1 beginnende fortlaufende Folge sein. Wenn Ihr Dataset beispielsweise fünf Klassen hat, muss jedes Label eine Ganzzahl im Intervall [1, 5] sein.

  • image/object/bbox/xmin ist eine Liste der normalisierten linken x-Koordinaten für das entsprechende Bild (eine Koordinate pro Feld). Jede Koordinate muss im Intervall [0, 1] liegen.

  • image/object/bbox/xmax ist eine Liste der normalisierten rechten x-Koordinaten für das entsprechende Bild (eine Koordinate pro Feld). Jede Koordinate muss im Intervall [0, 1] liegen.

  • image/object/bbox/ymin ist eine Liste der normalisierten oberen y-Koordinaten für das entsprechende Bild (eine Koordinate pro Feld). Jede Koordinate muss im Intervall [0, 1] liegen.

  • image/object/bbox/ymax ist eine Liste der normalisierten unteren y-Koordinaten für das entsprechende Bild (eine Koordinate pro Feld). Jede Koordinate muss im Intervall [0, 1] liegen.

Das folgende Beispiel zeigt die Struktur eines tf.Example für ein Bild mit zwei Begrenzungsrahmen. Das erste Feld hat das Label 1. Die obere linke Ecke befindet sich an den normalisierten Koordinaten (0.1, 0.4) und die untere rechte Ecke an den normalisierten Koordinaten (0.5, 0.8). Das zweite Feld hat das Label 2. Die obere linke Ecke befindet sich an den normalisierten Koordinaten (0.3, 0.5) und die untere rechte Ecke an den normalisierten Koordinaten (0.4, 0.7).

{
    'image/encoded': '<encoded image data>',
    'image/object/class/label': [1, 2],
    'image/object/bbox/xmin': [0.1, 0.3],
    'image/object/bbox/xmax': [0.5, 0.4],
    'image/object/bbox/ymin': [0.4, 0.5],
    'image/object/bbox/ymax': [0.8, 0.7]
}

Das Format tf.Example entspricht dem Format, das im Skript zur TFRecord-Objekterkennung verwendet wird.

Bestes SavedModel als Ausgabe abrufen

Wenn der Trainingsjob abgeschlossen ist, schreibt AI Platform Training ein TensorFlow SavedModel in den Cloud Storage-Bucket, den Sie beim Senden des Jobs als jobDir angegeben haben. Das SavedModel wird in jobDir/model geschrieben. Wenn Sie den Job z. B. an gs://your-bucket-name/your-job-dir senden, schreibt AI Platform Training das SavedModel in gs://your-bucket-name/your-job-dir/model.

Wenn Sie die Hyperparameter-Abstimmung aktiviert haben, gibt AI Platform Training das TensorFlow SavedModel mit der höchsten Accuracy zurück, die während des Trainingsvorgangs erzielt wurde. Wenn Sie z. B. einen Trainingsjob mit 2.500 Trainingsschritten eingereicht haben und die Accuracy bei 2.000 Schritten am höchsten war, erhalten Sie ein TensorFlow SavedModel, das ab diesem bestimmten Punkt gespeichert wurde.

Bei jeder Testversion von AI Platform Training wird das TensorFlow SavedModel mit der höchsten Accuracy in ein eigenes Verzeichnis in Ihrem Cloud Storage-Bucket geschrieben. Beispiel: gs://your-bucket-name/your-job-dir/model/trial_{trial_id}.

Die Signatur des ausgegebenen SavedModel lautet:

signature_def['serving_default']:
  The given SavedModel SignatureDef contains the following input(s):
    inputs['encoded_image'] tensor_info:
        dtype: DT_STRING
        shape: (-1)
        name: encoded_image_string_tensor:0
    inputs['key'] tensor_info:
        dtype: DT_STRING
        shape: (-1)
        name: key:0
  The given SavedModel SignatureDef contains the following output(s):
    outputs['detection_boxes'] tensor_info:
        dtype: DT_FLOAT
        shape: (-1, 100, 4)
        name: detection_boxes:0
    outputs['detection_classes'] tensor_info:
        dtype: DT_FLOAT
        shape: (-1, 100)
        name: detection_classes:0
    outputs['detection_scores'] tensor_info:
        dtype: DT_FLOAT
        shape: (-1, 100)
        name: detection_scores:0
    outputs['key'] tensor_info:
        dtype: DT_STRING
        shape: (-1)
        name: Identity:0
    outputs['num_detections'] tensor_info:
        dtype: DT_FLOAT
        shape: (-1)
        name: num_detections:0
  Method name is: tensorflow/serving/predict

Eingaben:

  • encoded_image: Die (nicht decodierten) Rohbyte des Bildes. Das entspricht dem in tf.Example gespeicherten image/encoded.
  • key: Die Stringwert-ID der Vorhersageeingabe. Dieser Wert wird an die Ausgabe key übergeben. Bei der Batchvorhersage kann damit die Vorhersageausgabe der Eingabe zugeordnet werden.

Ausgaben:

  • num_detections: Die Anzahl der erkannten Begrenzungsrahmen.
  • detection_boxes: Eine Liste der relativen (Wert in [0,1]) Koordinaten ([ymin, xmin, ymax, xmax]) der Erkennungsbegrenzungsrahmen.
  • detection_classes: Eine Liste der Labels der vorhergesagten Klasse (Ganzzahl) für jeden Erkennungsrahmen in detection_boxes.
  • detection_scores: Eine Liste der scores für jeden Erkennungsrahmen in detection_boxes.
  • key: Der Ausgabeschlüssel.

Dies ist ein Beispiel für Vorhersageausgaben:

{u'detection_classes': [1.0, 3.0, 3.0, ...],
u'key': u'test_key',
u'num_detections': 100.0,
u'detection_scores': [0.24401935935020447, 0.19375669956207275, 0.18359294533729553, ...]]}

Beispielkonfigurationen

Wenn Sie einen Job mit gcloud senden, müssen Sie eine config.yaml-Datei für die Spezifikationen des Maschinentyps und der Hyperparameter-Abstimmung erstellen. Wenn Sie die Google Cloud Console verwenden, brauchen Sie diese Datei nicht zu erstellen. Hier erfahren Sie, wie Sie einen Trainingsjob senden.

Die folgende Beispieldatei config.yaml zeigt, wie TPU-Ressourcen für Ihren Trainingsjob zugewiesen werden:

cat << EOF > config.yaml
trainingInput:
  scaleTier: CUSTOM
  masterType: n1-standard-16
  masterConfig:
    imageUri: gcr.io/cloud-ml-algos/image_object_detection:latest
    acceleratorConfig:
      type: NVIDIA_TESLA_P100
      count: 1
  workerType:  cloud_tpu
  workerConfig:
    imageUri: gcr.io/cloud-ml-algos/image_object_detection:latest
    tpuTfVersion: 1.14
    acceleratorConfig:
      type: TPU_V2
      count: 8
  workerCount: 1
EOF

Verwenden Sie als Nächstes Ihre config.yaml-Datei, um einen Trainingsjob zu senden.

Konfiguration der Hyperparameter-Abstimmung

Wenn Sie die Hyperparameter-Abstimmung verwenden möchten, geben Sie deren Konfiguration in derselben config.yaml-Datei wie Ihre Maschinenkonfiguration an.

Eine kurze Erläuterung der einzelnen Hyperparameter finden Sie in der Google Cloud Console und eine ausführlichere Erläuterung in der Referenz für den integrierten Algorithmus zur Bildobjekterkennung

Die folgende Beispieldatei config.yaml zeigt, wie TPU-Ressourcen für Ihren Trainingsjob zugewiesen werden. Sie enthält die Konfiguration der Hyperparameter-Abstimmung:

cat << EOF > config.yaml
trainingInput:
  # Use a cluster with many workers and a few parameter servers.
  scaleTier: CUSTOM
  masterType: n1-standard-16
  masterConfig:
    imageUri: gcr.io/cloud-ml-algos/image_object_detection:latest
    acceleratorConfig:
      type: NVIDIA_TESLA_P100
      count: 1
  workerType:  cloud_tpu
  workerConfig:
    imageUri: gcr.io/cloud-ml-algos/image_object_detection:latest
    acceleratorConfig:
      type: TPU_V2
      count: 8
  workerCount: 1
  # The following are hyperparameter configs.
  hyperparameters:
   goal: MAXIMIZE
   hyperparameterMetricTag: "AP"
   maxTrials: 6
   maxParallelTrials: 3
   enableTrialEarlyStopping: True
   params:
   - parameterName: initial_learning_rate
     type: DOUBLE
     minValue: 0.001
     maxValue: 0.1
     scaleType: UNIT_LOG_SCALE
EOF

Trainingsjob zur Bildobjekterkennung senden

In diesem Abschnitt wird erläutert, wie Sie einen Trainingsjob mit dem integrierten Algorithmus zur Bildobjekterkennung senden.

Console

Algorithmus auswählen

  1. Rufen Sie in der Cloud Console die Seite für AI Platform Training-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.

  3. Wählen Sie auf der Seite Neuen Trainingsjob erstellen die Option Bildobjekterkennung aus und klicken Sie auf Weiter.

Trainings- und Validierungsdaten auswählen

  1. Geben Sie im Drop-down-Menü unter Trainingsdaten an, ob Sie eine einzelne Datei oder mehrere Dateien verwenden:

    • Lassen Sie für eine einzelne Datei die Option "Einzelne im GCS-Bucket gespeicherte Datei verwenden" aktiviert.
    • Wählen Sie bei mehreren Dateien die Option "Mehrere in einem Cloud Storage-Verzeichnis gespeicherte Dateien verwenden" aus.
  2. Klicken Sie für Verzeichnispfad auf Durchsuchen. Klicken Sie im rechten Bereich auf den Namen des Buckets, in den Sie die Trainingsdaten hochgeladen haben, und wechseln Sie zu Ihrer Datei.

    Wenn Sie mehrere Dateien auswählen, geben Sie Ihre Platzhalterzeichen in Platzhaltername ein. Der vollständige GCS-Pfad wird darunter angezeigt. Dort können Sie prüfen, ob der Pfad korrekt ist.

  3. Geben Sie im Drop-down-Menü unter Validierungsdaten an, ob Sie eine einzelne Datei oder mehrere Dateien verwenden:

    • Lassen Sie für eine einzelne Datei die Option "Einzelne im GCS-Bucket gespeicherte Datei verwenden" aktiviert.
    • Wählen Sie bei mehreren Dateien die Option "Mehrere in einem Cloud Storage-Verzeichnis gespeicherte Dateien verwenden" aus.
  4. Klicken Sie für Verzeichnispfad auf Durchsuchen. Klicken Sie im rechten Bereich auf den Namen des Buckets, in den Sie die Trainingsdaten hochgeladen haben, und wechseln Sie zu Ihrer Datei.

    Wenn Sie mehrere Dateien auswählen, geben Sie Ihre Platzhalterzeichen in Platzhaltername ein. Der vollständige GCS-Pfad wird darunter angezeigt. Dort können Sie prüfen, ob der Pfad korrekt ist.

  5. Geben Sie unter Ausgabeverzeichnis den Pfad zum Cloud Storage-Bucket ein, in dem AI Platform Training die Ausgaben Ihres Trainingsjobs speichern soll. Sie können den Pfad zum Cloud Storage-Bucket direkt eingeben oder auf die Schaltfläche Durchsuchen klicken und ihn auswählen.

    Erstellen Sie im Cloud Storage-Bucket zur besseren Übersicht ein neues Verzeichnis für diesen Trainingsjob. Dazu können Sie das Feld Durchsuchen verwenden.

    Klicken Sie auf Weiter.

Algorithmusargumente festlegen

Jedes algorithmusspezifische Argument zeigt einen Standardwert für Trainingsjobs ohne Hyperparameter-Abstimmung an. Wenn Sie die Hyperparameter-Abstimmung für ein Algorithmusargument aktivieren, müssen Sie den minimalen und maximalen Wert angeben.

Weitere Informationen zu allen Algorithmusargumenten finden Sie unter den Links in in der Google Cloud Console Referenz zur integrierten Bildobjekterkennung.

Job senden

Geben Sie auf dem Tab Jobeinstellungen Folgendes an:

  1. Geben Sie eine eindeutige Job-ID ein.
  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 einen verfügbaren Maschinentyp für Master-Typ aus.
    2. Wenn Sie TPUs verwenden möchten, setzen Sie die Option Worker-Typ auf cloud_tpu. Die Anzahl der Worker ist standardmäßig auf 1 gesetzt.

Klicken Sie auf Fertig, um den Trainingsjob zu senden.

gcloud

  1. Legen Sie Umgebungsvariablen für Ihren Job fest:

    PROJECT_ID="YOUR_PROJECT_ID"
    BUCKET_NAME="YOUR_BUCKET_NAME"
    
    # Specify the same region where your data is stored
    REGION="YOUR_REGION"
    
    gcloud config set project $PROJECT_ID
    gcloud config set compute/region $REGION
    
    # Set Cloud Storage paths to your training and validation data
    # Include a wildcard if you select multiple files.
    TRAINING_DATA_PATH="gs://${BUCKET_NAME}/YOUR_DATA_DIRECTORY/train-*.tfrecord"
    VALIDATION_DATA_PATH="gs://${BUCKET_NAME}/YOUR_DATA_DIRECTORY/eval-*.tfrecord"
    
    # Specify the Docker container for your built-in algorithm selection
    IMAGE_URI="gcr.io/cloud-ml-algos/image_object_detection:latest"
    
    # Variables for constructing descriptive names for JOB_ID and JOB_DIR
    DATASET_NAME="coco"
    ALGORITHM="object_detection"
    MODEL_NAME="${DATASET_NAME}_${ALGORITHM}"
    DATE="$(date '+%Y%m%d_%H%M%S')"
    
    # Specify an ID for this job
    JOB_ID="${MODEL_NAME}_${DATE}"
    
    # Specify the directory where you want your training outputs to be stored
    JOB_DIR="gs://${BUCKET_NAME}/algorithm_training/${JOB_ID}"
    
  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=22500 \
      --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 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
    

Nächste Schritte