RetinaNet auf Cloud TPU trainieren (TF 2.x)


In diesem Dokument wird eine Implementierung des RetinaNet-Objekterkennungsmodells erläutert. Der Code ist auf GitHub verfügbar.

In der folgenden Anleitung wird davon ausgegangen, dass Sie bereits mit dem Ausführen eines Modells auf Cloud TPU vertraut sind. Wenn Sie Cloud TPU noch nicht kennen, finden Sie in der Kurzanleitung eine grundlegende Einführung.

Wenn Sie auf einem TPU Pod-Slice trainieren möchten, lesen Sie Auf TPU Pods trainieren, um mehr über Parameteränderungen für Pod-Slices zu erfahren.

Ziele

  • COCO-Dataset vorbereiten
  • Cloud Storage-Bucket zum Speichern der Dataset- und Modellausgabe erstellen
  • TPU-Ressourcen für Training und Evaluierung einrichten
  • Training und Bewertung auf einer einzelnen Cloud TPU oder einem Cloud TPU Pod ausführen

Kosten

In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:

  • Compute Engine
  • Cloud TPU
  • Cloud Storage

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Hinweise

Bevor Sie mit dieser Anleitung beginnen, prüfen Sie, ob Ihr Google Cloud-Projekt ordnungsgemäß eingerichtet ist.

  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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

  6. In dieser Anleitung werden kostenpflichtige Komponenten der Google Cloud verwendet. Rufen Sie die Seite mit den Cloud TPU-Preisen auf, um Ihre Kosten abzuschätzen.

COCO-Dataset vorbereiten

In dieser Anleitung wird das COCO-Dataset verwendet. Das Dataset muss im TFRecord-Format vorliegen in einem Cloud Storage-Bucket, der für das Training verwendet werden soll.

Wenn Sie das COCO-Dataset bereits in einem Cloud Storage-Bucket vorbereitet haben, befindet sich in der Zone, die Sie für die Sie das Modell trainieren, können Sie direkt zum Einzelgerät-Training gehen. Andernfalls können Sie das Dataset mit den folgenden Schritten vorbereiten.

  1. Öffnen Sie ein Cloud Shell-Fenster.

    Cloud Shell öffnen

  2. Konfigurieren Sie gcloud in Cloud Shell mit Ihrer Projekt-ID.

    export PROJECT_ID=project-id
    gcloud config set project ${PROJECT_ID}
  3. Erstellen Sie in Ihrer Cloud Shell mit folgendem Befehl einen Cloud Storage-Bucket:

    gcloud storage buckets create gs://bucket-name --project=${PROJECT_ID} --location=us-central2
  4. Erstellen Sie eine Compute Engine-VM, um den Datensatz herunterzuladen und vorzuverarbeiten. Weitere Informationen finden Sie unter Compute Engine-Instanz erstellen und starten.

    $ gcloud compute instances create vm-name \
        --zone=us-central2-b \
        --image-family=ubuntu-2204-lts \
        --image-project=ubuntu-os-cloud \
        --machine-type=n1-standard-16 \
        --boot-disk-size=300GB
  5. Stellen Sie eine SSH-Verbindung zur Compute Engine-VM her:

    $ gcloud compute ssh vm-name --zone=us-central2-b

    Wenn Sie eine Verbindung zur VM herstellen, ändert sich die Shell-Eingabeaufforderung von username@projectname in username@vm-name.

  6. Richten Sie zwei Variablen ein, eine für den zuvor erstellten Storage-Bucket und eine für das Verzeichnis, das die Trainingsdaten (DATA_DIR) im Storage-Bucket enthält.

    (vm)$ export STORAGE_BUCKET=gs://bucket-name
    (vm)$ export DATA_DIR=${STORAGE_BUCKET}/coco
  7. Installieren Sie die Pakete, die für die Vorverarbeitung der Daten erforderlich sind.

    (vm)$ sudo apt-get update && \
      sudo apt-get install python3-pip && \
      sudo apt-get install -y python3-tk && \
      pip3 install --user Cython matplotlib opencv-python-headless pyyaml Pillow numpy absl-py tensorflow && \
      pip3 install --user "git+https://github.com/cocodataset/cocoapi#egg=pycocotools&subdirectory=PythonAPI"
  8. Zum Umwandeln das Skript download_and_preprocess_coco.sh ausführen COCO-Dataset in eine Reihe von TFRecord-Dateien (*.tfrecord) aufteilt, die die Anwendung erwartet.

    (vm)$ git clone https://github.com/tensorflow/tpu.git
    (vm)$ sudo bash tpu/tools/datasets/download_and_preprocess_coco.sh ./data/dir/coco

    Dadurch werden die erforderlichen Bibliotheken installiert und das Skript für die Vorverarbeitung ausgeführt. Dann werden *.tfrecord-Dateien in Ihr lokales Datenverzeichnis ausgegeben. Der COCO-Download und das Ausführen des Konvertierungsskripts dauern ungefähr eine Stunde.

  9. Kopieren Sie die Daten in Ihren Cloud Storage-Bucket.

    Nachdem Sie die Daten in das TFRecord-Format konvertiert haben, kopieren Sie sie mit der gcloud CLI aus dem lokalen Speicher in Ihren Cloud Storage-Bucket. Die Anmerkungsdateien müssen ebenfalls kopiert werden. Diese Dateien helfen dabei, die Leistung des Modells zu validieren.

    (vm)$ gcloud storage cp ./data/dir/coco/*.tfrecord ${DATA_DIR}
    (vm)$ gcloud storage cp ./data/dir/coco/raw-data/annotations/*.json ${DATA_DIR}
  10. Trennen Sie die Verbindung zur Compute Engine-VM:

    (vm)$ exit

    Die Eingabeaufforderung sollte nun username@projectname lauten und angeben, dass Sie sich in Cloud Shell befinden.

  11. So löschen Sie Ihre Compute Engine-VM:

    $ gcloud compute instances delete vm-name \
    --zone=us-central2-b

Cloud TPU-Training mit Einzelgerät

  1. Öffnen Sie ein Cloud Shell-Fenster.

    Zu Cloud Shell

  2. Erstellen Sie eine Variable für Ihre Projekt-ID.

    export PROJECT_ID=project-id
  3. Konfigurieren Sie die Google Cloud CLI für die Verwendung des Projekts, in dem Sie Cloud TPU erstellen möchten.

    gcloud config set project ${PROJECT_ID}

    Wenn Sie diesen Befehl zum ersten Mal in einer neuen Cloud Shell-VM ausführen, wird die Seite Authorize Cloud Shell angezeigt. Klicken Sie auf Authorize unten auf der Seite, damit gcloud Google Cloud API-Aufrufe mit Ihren Anmeldedaten durchführen kann.

  4. Erstellen Sie ein Dienstkonto für das Cloud TPU-Projekt.

    gcloud beta services identity create --service tpu.googleapis.com --project $PROJECT_ID

    Der Befehl gibt ein Cloud TPU-Dienstkonto im folgenden Format zurück:

    service-PROJECT_NUMBER@cloud-tpu.iam.gserviceaccount.com
    

  5. Erstellen Sie mit dem folgenden Befehl einen Cloud Storage-Bucket:

    gcloud storage buckets create gs://bucket-name --project=${PROJECT_ID} --location=europe-west4

    Dieser Cloud Storage-Bucket speichert die Daten, die Sie zum Trainieren Ihres Modells verwenden, sowie die Trainingsergebnisse. Mit dem gcloud-Befehl, der in dieser Anleitung zum Einrichten der TPU verwendet wird, werden auch Standardberechtigungen für das Cloud TPU-Dienstkonto eingerichtet, das Sie im vorherigen Schritt eingerichtet haben. Wenn Sie genauere Berechtigungen benötigen, können Sie die Berechtigungen auf Zugriffsebene anpassen.

Cloud TPU einrichten und starten

  1. Starten Sie mit dem Befehl gcloud eine Compute Engine-VM und eine Cloud TPU.

    $ gcloud compute tpus tpu-vm create retinanet-tutorial \
    --zone=europe-west4-a \
    --accelerator-type=v3-8 \
    --version=tpu-vm-tf-2.17.0-pjrt

    Beschreibung der Befehls-Flags

    zone
    Die Zone, in der Sie die Cloud TPU erstellen möchten.
    accelerator-type
    Mit dem Beschleunigertyp geben Sie die Version und Größe der Cloud TPU an, die Sie erstellen möchten. Weitere Informationen zu unterstützten Beschleunigertypen für jede TPU-Version finden Sie unter TPU-Versionen.
    version
    Die Softwareversion von Cloud TPU.

    Weitere Informationen zum Befehl gcloud finden Sie in der gcloud-Referenz.

  2. Stellen Sie über SSH eine Verbindung zur Compute Engine-Instanz her. Wenn Sie verbunden sind an die VM ändert sich Ihre Shell-Eingabeaufforderung von username@projectname in username@vm-name:

    gcloud compute tpus tpu-vm ssh retinanet-tutorial --zone=europe-west4-a
  3. Zusätzliche Pakete installieren

    Die RetinaNet-Trainingsanwendung erfordert mehrere zusätzliche Pakete. Installieren Sie diese jetzt:

    (vm)$ sudo apt-get install -y python3-tk
    (vm)$ pip3 install --user Cython matplotlib opencv-python-headless pyyaml Pillow
    (vm)$ pip3 install --user 'git+https://github.com/cocodataset/cocoapi#egg=pycocotools&subdirectory=PythonAPI'
  4. Installieren Sie TensorFlow-Anforderungen.

    (vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
  5. Legen Sie die Cloud TPU-Namensvariable fest.

    (vm)$ export TPU_NAME=local
  6. Fügen Sie Umgebungsvariablen für die Daten- und Modellverzeichnisse hinzu.

    (vm)$ export STORAGE_BUCKET=gs://bucket-name
    (vm)$ export DATA_DIR=${STORAGE_BUCKET}/coco
    (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/retinanet-train
    (vm)$ export PYTHONPATH="${PWD}/models:${PYTHONPATH}"
  7. Wenn Sie beim Erstellen der TPU den Parameter --version auf eine Version festlegen, die mit -pjrt, legen Sie die folgenden Umgebungsvariablen fest, um die PJRT-Laufzeit zu aktivieren:

      (vm)$ export NEXT_PLUGGABLE_DEVICE_USE_C_API=true
      (vm)$ export TF_PLUGGABLE_DEVICE_LIBRARY_PATH=/lib/libtpu.so
  8. Wechseln Sie zum Verzeichnis, in dem sich das Modell befindet:

    (vm)$ cd /usr/share/tpu/models/official/legacy/detection

Einzelnes Cloud TPU-Gerät trainieren

Die folgenden Trainingsskripts wurden auf einer Cloud TPU v3-8 ausgeführt. Es mehr Zeit in Anspruch nehmen, aber Sie können sie auch auf einer Cloud TPU v2-8 ausführen.

Das folgende Beispielskript trainiert nur 10 Schritte und dauert weniger als 5 Minuten, um auf einer v3-8-TPU ausgeführt zu werden. Für das Training zur Konvergenz sind etwa 22.500 und ca. 1 Stunde auf einer Cloud TPU v3-8 TPU.

  1. Richten Sie die folgenden Umgebungsvariablen ein:

    (vm)$ export RESNET_CHECKPOINT=gs://cloud-tpu-checkpoints/retinanet/resnet50-checkpoint-2018-02-07
    (vm)$ export TRAIN_FILE_PATTERN=${DATA_DIR}/train-*
    (vm)$ export EVAL_FILE_PATTERN=${DATA_DIR}/val-*
    (vm)$ export VAL_JSON_FILE=${DATA_DIR}/instances_val2017.json
  2. Führen Sie das Trainingsskript aus:

    (vm)$ python3 main.py \
         --strategy_type=tpu \
         --tpu=${TPU_NAME} \
         --model_dir=${MODEL_DIR} \
         --mode="train" \
         --params_override="{ type: retinanet, train: { total_steps: 10, checkpoint: { path: ${RESNET_CHECKPOINT}, prefix: resnet50/ }, train_file_pattern: ${TRAIN_FILE_PATTERN} }, eval: { val_json_file: ${VAL_JSON_FILE}, eval_file_pattern: ${EVAL_FILE_PATTERN}, eval_samples: 5000 } }"

    Beschreibung der Befehls-Flags

    strategy_type
    Wenn Sie das RetinaNet-Modell auf einer TPU trainieren möchten, müssen Sie die Methode distribution_strategy bis tpu.
    tpu
    Der Name der Cloud TPU. Diese wird mithilfe der TPU_NAME.
    model_dir
    Der Cloud Storage-Bucket, in dem während des Trainings Prüfpunkte und Zusammenfassungen gespeichert werden. Sie können einen vorhandenen Ordner verwenden, um zuvor generierte Prüfpunkte zu laden, die auf einer TPU mit derselben Größe und TensorFlow-Version erstellt wurden.
    mode
    Legen Sie diesen Wert auf train fest, um das Modell zu trainieren, oder auf eval um das Modell zu bewerten.
    params_override
    Ein JSON-String, der Standardskriptparameter überschreibt. Weitere Informationen zu Skriptparametern finden Sie unter /usr/share/models/official/legacy/detection/main.py.

Das Modell wird auf einer v3-8-TPU in zehn Schritten in etwa fünf Minuten trainiert. Nach Abschluss des Trainings sieht die Ausgabe in etwa so aus:

Train Step: 10/10  / loss = {
  'total_loss': 2.4581615924835205,
  'cls_loss': 1.4098565578460693,
  'box_loss': 0.012001709081232548,
  'model_loss': 2.0099422931671143,
  'l2_regularization_loss': 0.44821977615356445,
  'learning_rate': 0.008165999
}
/ training metric = {
  'total_loss': 2.4581615924835205,
  'cls_loss': 1.4098565578460693,
  'box_loss': 0.012001709081232548,
  'model_loss': 2.0099422931671143,
  'l2_regularization_loss': 0.44821977615356445,
 'learning_rate': 0.008165999
}

Bewertung eines einzelnen Cloud TPU-Geräts

Im folgenden Verfahren werden die COCO-Bewertungsdaten verwendet. Es dauert etwa zehn Minuten, um die Bewertungsschritte auf einer v3-8-TPU zu durchlaufen.

  1. Richten Sie die folgenden Umgebungsvariablen ein:

    (vm)$ export EVAL_SAMPLES=5000
  2. Führen Sie das Bewertungsskript aus:

    (vm)$ python3 main.py \
          --strategy_type=tpu \
          --tpu=${TPU_NAME} \
          --model_dir=${MODEL_DIR} \
          --checkpoint_path=${MODEL_DIR} \
          --mode=eval_once \
          --params_override="{ type: retinanet, eval: { val_json_file: ${VAL_JSON_FILE}, eval_file_pattern: ${EVAL_FILE_PATTERN}, eval_samples: ${EVAL_SAMPLES} } }"

    Beschreibung der Befehls-Flags

    strategy_type
    Die zu verwendende Verteilungsstrategie. Entweder tpu oder multi_worker_gpu.
    tpu
    Der Name der Cloud TPU. Dies wird mit der Umgebungsvariable TPU_NAME festgelegt.
    model_dir
    Der Cloud Storage-Bucket, in dem Prüfpunkte und Zusammenfassungen erstellt werden während des Trainings gespeichert werden. Sie können einen vorhandenen Ordner verwenden, um zuvor generierte Prüfpunkte zu laden, die auf einer TPU mit derselben Größe und TensorFlow-Version erstellt wurden.
    mode
    Entweder train, eval oder train_and_eval.
    params_override
    Ein JSON-String, der Standardskriptparameter überschreibt. Weitere Informationen Informationen zu Skriptparametern finden Sie unter /usr/share/models/official/legacy/detection/main.py

    Am Ende der Bewertung werden in der Konsole Meldungen wie die folgenden angezeigt:

    Accumulating evaluation results...
    DONE (t=7.66s).
     Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.000
     Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.000
     Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.000
     Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000
     Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.000
     Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.000
     Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.000
     Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.000
     Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.000
     Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000
     Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.000
     Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.000
    

Sie haben jetzt das Training und die Bewertung für ein einzelnes Gerät abgeschlossen. Verwenden Sie Folgendes: Schritte zum Löschen der TPU-Ressourcen eines einzelnen Geräts.

  1. Trennen Sie die Verbindung zur Compute Engine-Instanz:

    (vm)$ exit

    Die Eingabeaufforderung sollte nun username@projectname lauten und angeben, dass Sie sich in Cloud Shell befinden.

  2. Löschen Sie die TPU-Ressource.

    $ gcloud compute tpus tpu-vm delete retinanet-tutorial \
      --zone=europe-west4-a

    Beschreibung der Befehls-Flags

    zone
    Die Zone, in der sich Ihre Cloud TPU befindet.

Modell mit Cloud TPU Pods skalieren

Wenn Sie Ihr Modell auf Cloud TPU Pods trainieren möchten, müssen Sie möglicherweise einige Änderungen an Ihrem Trainingsskript vornehmen. Weitere Informationen finden Sie unter Auf TPU-Pods trainieren.

Retinanet auf einem TPU-Pod trainieren

  1. Öffnen Sie ein Cloud Shell-Fenster.

    Zu Cloud Shell

  2. Erstellen Sie eine Variable für Ihre Projekt-ID.

    export PROJECT_ID=project-id
  3. Konfigurieren Sie die Google Cloud CLI für die Verwendung des Projekts, in dem Sie Cloud TPU erstellen möchten.

    gcloud config set project ${PROJECT_ID}

    Wenn Sie diesen Befehl zum ersten Mal in einer neuen Cloud Shell-VM ausführen, wird die Seite Authorize Cloud Shell angezeigt. Klicken Sie unten auf Authorize. der Seite, damit gcloud Google Cloud API-Aufrufe mit Ihrem Google Cloud-Anmeldedaten

  4. Erstellen Sie ein Dienstkonto für das Cloud TPU-Projekt.

    Dienstkonten ermöglichen dem Cloud TPU-Dienst, auf andere Google Cloud-Dienste zuzugreifen.

    gcloud beta services identity create --service tpu.googleapis.com --project $PROJECT_ID

    Der Befehl gibt ein Cloud TPU-Dienstkonto im folgenden Format zurück:

    service-PROJECT_NUMBER@cloud-tpu.iam.gserviceaccount.com
    

  5. Erstellen Sie mit dem folgenden Befehl einen Cloud Storage-Bucket oder verwenden Sie einen Bucket, den Sie zuvor für Ihr Projekt erstellt haben:

    Ersetzen Sie im folgenden Befehl europe-west4 durch den Namen der Region, die Sie zum Ausführen des Trainings verwenden möchten. Ersetzen Sie bucket-name durch den Namen, den Sie dem Bucket zuweisen möchten.

    gcloud storage buckets create gs://bucket-name \
      --project=${PROJECT_ID} \
      --location=europe-west4

    Dieser Cloud Storage-Bucket speichert die Daten, die Sie zum Trainieren Ihres Modells verwenden, sowie die Trainingsergebnisse. Mit dem in dieser Anleitung verwendeten gcloud-Befehl werden Standardberechtigungen für das Cloud TPU-Dienstkonto eingerichtet, das Sie im vorherigen Schritt eingerichtet haben. Wenn Sie detailliertere Berechtigungen benötigen, können Sie die Berechtigungen auf Zugriffsebene anpassen.

    Der Bucket-Speicherort muss sich in derselben Region wie die TPU-Ressourcen befinden.

  6. Wenn Sie das COCO-Dataset bereits vorbereitet und in den Speicher verschoben haben Bucket für das Pod-Training nutzen. Wenn Sie das COCO-Dataset noch nicht vorbereitet haben, bereiten Sie es jetzt vor und kehren Sie dann hierher zurück, um das Training einzurichten.

  7. Cloud TPU Pod einrichten und starten

    In dieser Anleitung wird ein v3-32-Pod angegeben. Weitere Pod-Optionen finden Sie unter TPU-Versionen.

    Starten Sie einen TPU-VM-Pod mit dem gcloud compute tpus tpu-vm-Befehl. In dieser Anleitung wird ein v3-32-Pod angegeben. Weitere Pod-Optionen finden Sie auf der Seite zu verfügbaren TPU-Typen.

    $ gcloud compute tpus tpu-vm create retinanet-tutorial \
      --zone=europe-west4-a \
      --accelerator-type=v3-32 \
      --version=tpu-vm-tf-2.17.0-pod-pjrt
     

    Beschreibung der Befehls-Flags

    zone
    Die Zone, in der Sie die Cloud TPU erstellen möchten.
    accelerator-type
    Mit dem Beschleunigertyp geben Sie die Version und Größe der Cloud TPU an, die Sie erstellen möchten. Weitere Informationen zu unterstützten Beschleunigertypen für jede TPU-Version finden Sie unter TPU-Versionen.
    version
    Die Softwareversion von Cloud TPU.
  8. Stellen Sie eine SSH-Verbindung zur TPU-VM-Instanz her. Wenn Sie mit der VM verbunden sind, Ihre Shell-Eingabeaufforderung ändert sich von username@projectname in username@vm-name:

    gcloud compute tpus tpu-vm ssh retinanet-tutorial --zone=europe-west4-a
  9. Legen Sie die Cloud TPU-Namensvariable fest.

    (vm)$ export TPU_NAME=retinanet-tutorial
  10. Cloud Storage-Bucket-Variablen festlegen

    Richten Sie die folgenden Umgebungsvariablen ein und ersetzen Sie bucket-name durch den Namen Ihres Cloud Storage-Buckets:

    (vm)$ export STORAGE_BUCKET=gs://bucket-name
    (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/retinanet-train
    (vm)$ export DATA_DIR=${STORAGE_BUCKET}/coco

    Die Trainingsanwendung erwartet, dass Ihre Trainingsdaten in Cloud Storage verfügbar sind. Die Trainingsanwendung verwendet auch Ihren Cloud Storage-Bucket, um während des Trainings Prüfpunkte zu speichern.

  11. Zusätzliche Pakete installieren

    Die RetinaNet-Trainingsanwendung erfordert mehrere zusätzliche Pakete. Installieren sie jetzt:

    (vm)$ sudo apt-get install -y python3-tk
    (vm)$ pip3 install --user Cython matplotlib opencv-python-headless pyyaml Pillow
    (vm)$ pip3 install --user 'git+https://github.com/cocodataset/cocoapi#egg=pycocotools&subdirectory=PythonAPI'
  12. Installieren Sie TensorFlow-Anforderungen.

    (vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
  13. Legen Sie erforderliche Umgebungsvariablen fest:

    (vm)$ export RESNET_PRETRAIN_DIR=gs://cloud-tpu-checkpoints/retinanet/resnet50-checkpoint-2018-02-07
    (vm)$ export TRAIN_FILE_PATTERN=${DATA_DIR}/train-*
    (vm)$ export EVAL_FILE_PATTERN=${DATA_DIR}/val-*
    (vm)$ export VAL_JSON_FILE=${DATA_DIR}/instances_val2017.json
    (vm)$ export PYTHONPATH="${PWD}/models:${PYTHONPATH}"
    (vm)$ export TPU_LOAD_LIBRARY=0
  14. Wechseln Sie zum Verzeichnis, in dem sich das Modell befindet:

    (vm)$ cd /usr/share/tpu/models/official/legacy/detection
  15. Modell trainieren

    (vm)$ python3 main.py \
      --strategy_type=tpu \
      --tpu=${TPU_NAME} \
      --model_dir=${MODEL_DIR} \
      --mode=train \
      --model=retinanet \
      --params_override="{architecture: {use_bfloat16: true}, eval: {batch_size: 40, eval_file_pattern: ${EVAL_FILE_PATTERN}, val_json_file: ${VAL_JSON_FILE}}, postprocess: {pre_nms_num_boxes: 1000}, predict: {batch_size: 40}, train: {batch_size: 256, checkpoint: {path: ${RESNET_PRETRAIN_DIR}, prefix: resnet50/}, iterations_per_loop: 5000, total_steps: 5625, train_file_pattern: ${TRAIN_FILE_PATTERN}, } }" 

    Beschreibung der Befehls-Flags

    tpu
    Der Name Ihrer TPU.
    model_dir
    Gibt das Verzeichnis an, in dem während des Modelltrainings Prüfpunkte und Zusammenfassungen gespeichert werden. Wenn der Ordner fehlt, erstellt das Programm einen. Wenn Sie eine Cloud TPU verwenden, muss model_dir ein Cloud Storage-Pfad (gs://...) sein. Sie können einen vorhandenen Ordner wiederverwenden, um aktuelle Prüfpunktdaten zu laden und zusätzliche Prüfpunkte zu speichern, solange die vorherigen Prüfpunkte mit Cloud TPU derselben Größe und TensorFlow-Version erstellt wurden.
    params_override
    Ein JSON-String, der Standardskriptparameter überschreibt. Weitere Informationen zu Skriptparametern finden Sie unter /usr/share/tpu/models/official/legacy/detection/main.py.

    Mit diesem Verfahren wird das Modell für das COCO-Dataset für 5.625 Trainingsschritte trainiert. Dieses Training dauert auf einer v3-32-TPU etwa 20 Minuten. Wenn das Training abgeschlossen ist, wird eine Meldung wie diese angezeigt:

Wenn das Training abgeschlossen ist, wird eine Meldung wie diese angezeigt:

   Train Step: 5625/5625  / loss = {'total_loss': 0.730501651763916,
   'cls_loss': 0.3229793608188629, 'box_loss': 0.003082591574639082,
   'model_loss': 0.4771089553833008, 'l2_regularization_loss': 0.2533927261829376,
   'learning_rate': 0.08} / training metric = {'total_loss': 0.730501651763916,
   'cls_loss': 0.3229793608188629, 'box_loss': 0.003082591574639082,
   'model_loss': 0.4771089553833008, 'l2_regularization_loss': 0.2533927261829376,
   'learning_rate': 0.08} 

Bereinigen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.

  1. Trennen Sie die Verbindung zur Compute Engine-VM:

    (vm)$ exit

    Die Eingabeaufforderung sollte nun username@projectname lauten und angeben, dass Sie sich in Cloud Shell befinden.

  2. Löschen Sie Ihre Cloud TPU- und Compute Engine-Ressourcen.

    $ gcloud compute tpus tpu-vm delete retinanet-tutorial \
      --zone=europe-west4-a
  3. Prüfen Sie, ob die Ressourcen gelöscht wurden. Führen Sie dazu gcloud compute tpus tpu-vm list aus. Der Löschvorgang kann einige Minuten dauern. Eine Antwort wie die folgende gibt Ihre Instanzen wurden erfolgreich gelöscht.

    $ gcloud compute tpus tpu-vm list --zone=europe-west4-a
    Listed 0 items.
    
  4. Löschen Sie den Cloud Storage-Bucket. Ersetzen Sie bucket-name durch den Namen. Ihres Cloud Storage-Bucket.

  5. Löschen Sie Ihren Cloud Storage-Bucket wie im folgenden Beispiel mit der gcloud CLI. Ersetzen Sie bucket-name durch den Namen Ihres Cloud Storage-Buckets.

    $ gcloud storage rm gs://bucket-name --recursive

Nächste Schritte

In den Cloud TPU-Anleitungen von TensorFlow wird das Modell in der Regel mithilfe eines Beispiel-Datasets trainiert. Die Ergebnisse dieses Trainings sind nicht für die Inferenz verwendbar. Bis ein Modell für die Inferenz nutzen, können Sie die Daten anhand eines öffentlich verfügbaren oder Ihrem eigenen Dataset. Auf Cloud TPUs trainierte TensorFlow-Modelle müssen Datasets im Allgemeinen TFRecord-Format.

Sie können das Beispiel für das Dataset-Konvertierungstool verwenden, um ein Bildklassifizierungs-Dataset in das TFRecord-Format zu konvertieren. Wenn Sie kein Bild verwenden Klassifizierungsmodells spezifizieren, müssen Sie das Dataset TFRecord-Format für sich selbst. Weitere Informationen finden Sie unter TFRecord und tf.Example.

Hyperparameter-Feinabstimmung

Um die Leistung des Modells mit Ihrem Dataset zu verbessern, können Sie die Hyperparameter. Sie finden Informationen zu allgemeinen Hyperparametern Von TPU unterstützte Modelle auf GitHub Informationen zu modellspezifischen Hyperparametern finden Sie in der Quelle Code für die einzelnen modellieren. Weitere Informationen zur Hyperparameter-Abstimmung finden Sie unter Übersicht über Hyperparameter-Abstimmung und Hyperparameter abstimmen.

Inferenz

Sobald Ihr Modell trainiert ist, können Sie es für Inferenz (auch als Vorhersage bezeichnet) verwenden. Mit dem Cloud TPU-Inferenzkonverter können Sie ein TensorFlow-Modell für die Inferenz auf Cloud TPU v5e vorbereiten und optimieren. Weitere Informationen zur Inferenz auf Cloud TPU v5e finden Sie unter Einführung in die Inferenz mit Cloud TPU v5e.

Mit verschiedenen Bildgrößen trainieren

Sie können dies mit einem größeren Backbonenetzwerk wie ResNet-101 von ResNet-50). Ein größeres Eingabebild und ein leistungsfähigeres Backbonenetzwerk ergeben ein langsameres, aber präziseres Modell.

Andere Grundlage verwenden

Alternativ können Sie ein ResNet-Modell mit Ihrem eigenen Dataset vorab trainieren und es als Grundlage für Ihr RetinaNet-Modell verwenden. Sie haben auch die Möglichkeit, ResNet durch ein alternatives Backbonenetzwerk zu ersetzen, was etwas arbeitsaufwändiger ist. Schließlich: Wenn Sie eigene Objekterkennungsmodelle implementieren möchten, Netzwerk eine gute Grundlage für weitere Experimente sein.