Training mit dem integrierten Algorithmus zur Bildklassifizierung

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 werden die Funktionsweise und die Verwendung des integrierten Algorithmus zur Bildklassifizierung erläutert.

Überblick

Der integrierte Algorithmus zur Bildklassifizierung verwendet Ihre Trainings- und Validierungs-Datasets, um Modelle kontinuierlich zu trainieren. Anschließend gibt er das genaueste SavedModel aus, das während des Trainingsjobs erstellt 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 mit CPUs und GPUs kompatibel.

Die folgenden Features werden für das Training mit dem integrierten Algorithmus zur Bildklassifizierung 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

Eingabedaten für das Training formatieren

Der integrierte Algorithmus zur Bildklassifizierung 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

TensorFlow stellt ein Skript bereit, mit dem Sie Ihre Bilder vom Format JPEG in TFRecord konvertieren können.

Sie können das Skript in folgenden Fällen verwenden:

  • Sie speichern die Bilder in Cloud Storage.
  • Sie verfügen über CSV-Dateien mit den Pfaden zu den Bildern in Cloud Storage und den zugehörigen Labels. Beispiel:

    gs://cloud-ml-data/img/flower_photos/daisy/754296579_30a9ae018c_n.jpg,daisy
    gs://cloud-ml-data/img/flower_photos/dandelion/18089878729_907ed2c7cd_m.jpg,dandelion
    
  • Sie speichern diese CSV-Dateien in Cloud Storage.

Das folgende Beispiel zeigt, wie das Skript ausgeführt wird:

  1. Laden Sie das Skript herunter:

    curl https://raw.githubusercontent.com/tensorflow/tpu/master/tools/datasets/jpeg_to_tf_record.py > ./jpeg_to_tf_record.py
    
  2. Legen Sie die Variablen für Ihre Projekt-ID und den Bucket-Namen fest, wenn noch nicht geschehen:

    PROJECT_ID="YOUR_PROJECT_ID"
    BUCKET_NAME="YOUR_BUCKET_NAME"
    
  3. Erstellen Sie eine Liste aller möglichen Labels für Ihr Dataset in einer temporären Datei:

    cat << EOF > /tmp/labels.txt
    daisy
    dandelion
    roses
    sunflowers
    tulips
    EOF
    
  4. Führen Sie das Skript mit Blumendaten aus dem öffentlichen cloud-ml-data-Bucket und Ihrer Liste der Labels aus:

    python -m jpeg_to_tf_record.py \
           --train_csv gs://cloud-ml-data/img/flower_photos/train_set.csv \
           --validation_csv gs://cloud-ml-data/img/flower_photos/eval_set.csv \
           --labels_file /tmp/labels.txt \
           --project_id $PROJECT_ID \
           --output_dir gs://$BUCKET_NAME/flowers_as_tf_record
    

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 Bildklassifizierung müssen Ihre Bilddaten als tf.Examples mit den folgenden Feldern strukturiert sein:

  • image/encoded ist der Rohstring des Bildes.

  • image/class/label ist ein einzelnes Ganzzahllabel für das entsprechende Bild. Mehrere Labels pro Instanz werden nicht unterstützt.

    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.

Beispiel:

{
    'image/encoded': '<encoded image data>',
    'image/class/label': 2
}

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 ausgegebene SavedModel-Signatur lautet:

signature_def['serving_default']:
  The given SavedModel SignatureDef contains the following input(s):
    inputs['image_bytes'] tensor_info:
        dtype: DT_STRING
        shape: (-1)
        name: Placeholder:0
    inputs['key'] tensor_info:
        dtype: DT_STRING
        shape: (-1)
        name: key:0
  The given SavedModel SignatureDef contains the following output(s):
    outputs['classes'] tensor_info:
        dtype: DT_INT64
        shape: (-1)
        name: ArgMax:0
    outputs['key'] tensor_info:
        dtype: DT_STRING
        shape: (-1)
        name: Identity:0
    outputs['probabilities'] tensor_info:
        dtype: DT_FLOAT
        shape: (-1, 1000)
        name: softmax_tensor:0
  Method name is: tensorflow/serving/predict

Eingaben:

  • image_bytes: 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:

  • classes: Das Label der vorhergesagten Klasse (Ganzzahl), das die höchste Wahrscheinlichkeit hat.
  • key: Der Ausgabeschlüssel.
  • probabilities: Die probability (zwischen 0 und 1) für jede class (von 0 bis num_classes).

Im Folgenden finden Sie ein Beispiel für Vorhersageeingaben und -ausgaben:

prediction_input: {
  'image_bytes': 'some_raw_image_bytes',
  'key': ['test_key'])
}

prediction_output: {
  'probabilities': [[0.1, 0.3, 0.6]],
  'classes': [2],
  'key': ['test_key'],
}

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:
  # Use a cluster with many workers and a few parameter servers.
  scaleTier: CUSTOM
  masterType: n1-highmem-16
  masterConfig:
    imageUri: gcr.io/cloud-ml-algos/image_classification:latest
  workerType:  cloud_tpu
  workerConfig:
   imageUri: gcr.io/cloud-ml-algos/image_classification:latest
   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. Eine ausführlichere Erläuterung finden Sie in der Referenz für den integrierten Algorithmus zur Bildklassifizierung.

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-highmem-16
  masterConfig:
    imageUri: gcr.io/cloud-ml-algos/image_classification:latest
  workerType:  cloud_tpu
  workerConfig:
   imageUri: gcr.io/cloud-ml-algos/image_classification:latest
   tpuTfVersion: 1.14
   acceleratorConfig:
     type: TPU_V2
     count: 8
  workerCount: 1
  # The following are hyperparameter configs.
  hyperparameters:
   goal: MAXIMIZE
   hyperparameterMetricTag: top_1_accuracy
   maxTrials: 6
   maxParallelTrials: 3
   enableTrialEarlyStopping: True
   params:
   - parameterName: initial_learning_rate
     type: DOUBLE
     minValue: 0.001
     maxValue: 0.2
     scaleType: UNIT_LOG_SCALE
EOF

Trainingsjob zur Bildklassifizierung senden

In diesem Abschnitt wird erläutert, wie Sie einen Trainingsjob mithilfe des integrierten Algorithmus zur Bildklassifizierung senden.

Console

Algorithmus auswählen

  1. Rufen Sie in der Cloud Console die Seite für AI Platform Training-Jobs auf:

    Seite "Jobs" unter "AI Platform Training"

  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 Bildklassifizierung 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.

Wenn Sie mehr über alle Algorithmusargumente erfahren möchten, folgen Sie den Links in der Google Cloud Console. Weitere Informationen finden Sie in der Referenz zur integrierten Bildklassifizierung.

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_classification:latest"
    
    # Variables for constructing descriptive names for JOB_ID and JOB_DIR
    DATASET_NAME="flowers"
    ALGORITHM="image_classification"
    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 \
      --master-image-uri=$IMAGE_URI \
      -- \
      --training_data_path=$TRAINING_DATA_PATH \
      --validation_data_path=$VALIDATION_DATA_PATH \
      --job-dir=$JOB_DIR \
      --max_steps=30000 \
      --train_batch_size=128 \
      --num_classes=5 \
      --num_eval_images=100 \
      --initial_learning_rate=0.128 \
      --warmup_steps=1000 \
      --model_type='efficientnet-b4'
    
  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