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.
- Verteiltes Training: Zur Ausführung eines verteilten TensorFlow-Trainingsjobs in AI Platform Training müssen Sie eine Trainingsanwendung erstellen.
- Training mit mehreren GPUs: Integrierte Algorithmen verwenden immer nur eine GPU. Damit Sie die Vorteile eines Trainings mit mehreren GPUs auf einer Maschine komplett nutzen können, müssen Sie eine Trainingsanwendung erstellen. Weitere Informationen zu Maschinentypen finden Sie unter Maschinentypen oder Skalierungsstufen angeben.
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:
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
Speichern Sie den Wert der Felder
serviceAccountProject
undtpuServiceAccount
, der von der API zurückgegeben wird.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
- Melden Sie sich in der Google Cloud Console an und wählen Sie das Projekt aus, in dem Sie die TPU verwenden.
- Wählen Sie IAM & Verwaltung > IAM aus.
- Klicken Sie auf die Schaltfläche Hinzufügen, um ein Mitglied zum Projekt hinzuzufügen.
- Geben Sie das TPU-Dienstkonto in das Textfeld Mitglieder ein.
- Klicken Sie auf die Drop-down-Liste Rollen.
- Aktivieren Sie die Rolle Cloud ML-Dienst-Agent (Dienstverwaltung > Cloud ML-Dienst-Agent).
gcloud
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
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.Example
s 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.Example
s 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 gespeichertenimage/encoded
.key
: Die Stringwert-ID der Vorhersageeingabe. Dieser Wert wird an die Ausgabekey
ü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 indetection_boxes
.detection_scores
: Eine Liste derscores
für jeden Erkennungsrahmen indetection_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.
Kurze Erläuterungen zu jedem Hyperparameter finden Sie im 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
Rufen Sie in der Cloud Console die Seite für AI Platform Training-Jobs auf:
Zur Seite AI Platform Training-Jobs
Klicken Sie auf die Schaltfläche Neuer Trainingsjob. Klicken Sie in den darunter angezeigten Optionen auf Integriertes Algorithmustraining.
Wählen Sie auf der Seite Neuen Trainingsjob erstellen die Option Bildobjekterkennung aus und klicken Sie auf Weiter.
Trainings- und Validierungsdaten auswählen
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.
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.
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.
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.
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:
- Geben Sie eine eindeutige Job-ID ein.
- Geben Sie eine verfügbare Region wie "us-central1" ein.
- Wählen Sie "CUSTOM" als Skalierungsstufe aus, um Maschinentypen auszuwählen.
Ein Bereich für die Benutzerdefinierte Clusterspezifikation wird angezeigt.
- Wählen Sie einen verfügbaren Maschinentyp für Master-Typ aus.
- 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
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}"
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
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
- Skript zur TFRecord-Objekterkennung mit Informationen zur Verwendung des eigenen Datasets
- Referenz zur integrierten Bildobjekterkennung mit Informationen zu den verschiedenen Parametern