ImageNet-Dataset herunterladen, vorverarbeiten und hochladen

In diesem Dokument wird beschrieben, wie Sie das ImageNet-Dataset zur Verwendung mit der Cloud TPU-VM-Architektur herunterladen, vorverarbeiten und hochladen.

ImageNet ist eine Bilddatenbank. Die Bilder in der Datenbank sind hierarchisch angeordnet, wobei jeder Knoten der Hierarchie durch Hunderte und Tausende von Bildern dargestellt wird.

Aufgrund der Größe der ImageNet-Datenbank kann das Trainieren eines Modells einige Zeit in Anspruch nehmen. Alternativ können Sie auch eine Demoversion des Datasets verwenden, die als fake_imagenet bezeichnet wird. Mit dieser Demoversion können Sie das Modell testen und gleichzeitig den Speicher- und Zeitbedarf reduzieren, die mit der Nutzung der vollständigen ImageNet-Datenbank verbunden sind.

Das gesamte ImageNet-Dataset vorverarbeiten

Das ImageNet-Dataset besteht aus drei Teilen: Trainingsdaten, Validierungsdaten und Bildlabels.

Die Trainingsdaten umfassen 1.000 Kategorien und 1,2 Millionen Bilder, die zum Download verpackt sind. Die Validierungs- und Testdaten sind nicht in den ImageNet-Trainingsdaten enthalten (Duplikate wurden entfernt).

Die Validierungs- und Testdaten bestehen aus 150.000 Fotos, die über Flickr und andere Suchmaschinen zusammengestellt und manuell mit Labels zum Vorhandensein oder Fehlen von 1.000 Objektkategorien versehen wurden. Die 1.000 Objektkategorien enthalten sowohl interne als auch Blattknoten von ImageNet, überschneiden sich aber nicht. Eine zufällige Teilmenge von 50.000 Bildern mit Labels wurde zusammen mit einer Liste der 1.000 Kategorien als Validierungsdaten veröffentlicht. Die verbleibenden Bilder werden zur Bewertung verwendet und wurden ohne Labels veröffentlicht.

Schritte zur Vorverarbeitung des vollständigen ImageNet-Datasets

Das vollständige ImageNet-Dataset für die Verwendung durch ein Modell für maschinelles Lernen muss in fünf Schritten vorbereitet werden:

  1. Prüfen Sie, ob im Downloadziel Speicherplatz vorhanden ist.
  2. Richten Sie die Zielverzeichnisse ein.
  3. Registrieren Sie sich auf der ImageNet-Website und fordern Sie eine Downloadberechtigung an.
  4. Dataset auf lokales Laufwerk oder VM-Instanz herunterladen

  5. Führen Sie das Skript für die Vorverarbeitung und den Upload aus.

Speicherplatzbedarf prüfen

Unabhängig davon, ob Sie das Dataset auf Ihren lokalen Computer oder eine VM-Instanz herunterladen, benötigen Sie etwa 300 GB Speicherplatz auf dem Downloadziel.

Die standardmäßige Laufwerkszuweisung für eine TPU-VM beträgt 100 GB. Da für den Download auf Ihre TPU-VM 300 GB erforderlich sind, müssen Sie beim Herunterladen auf Ihre TPU-VM-Instanz einen nichtflüchtigen Speicher und 200 GB zusätzlichen Speicherplatz hinzufügen, um den Download abzuschließen. Auf einer TPU-VM können Sie den verfügbaren Speicherplatz mit dem Befehl df -ha prüfen.

Achten Sie beim Hinzufügen eines nichtflüchtigen Speichers auf Folgendes:

  • Setzen Sie die Option Beim Löschen der Instanz auf Laufwerk löschen, damit das Laufwerk gelöscht wird, wenn Sie die VM löschen.
  • Notieren Sie sich den Pfad zu Ihrem neuen Laufwerk. Beispiel: /mnt/disks/mnt-dir.

Zielverzeichnisse einrichten

Richten Sie auf Ihrem lokalen Computer oder Ihrer VM-Instanz die Verzeichnisstruktur zum Speichern der heruntergeladenen Daten ein.

  1. Erstellen Sie in Ihrem Basisverzeichnis auf Ihrem Downloadziel (lokaler Computer oder TPU-VM) ein Verzeichnis wie imagenet.

    mkdir imagenet
    
  2. Erstellen Sie in diesem Verzeichnis die beiden untergeordneten Verzeichnisse train und validation.

    mkdir imagenet/train
    mkdir imagenet/validation
    
  3. Exportieren Sie das Verzeichnis imagenet als IMAGENET_HOME.

    export IMAGENET_HOME=~/imagenet
    

Registrieren und Berechtigung zum Herunterladen des Datasets anfordern

Registrieren Sie sich auf der Imagenet-Website. Sie können das Dataset erst herunterladen, wenn ImageNet Ihre Registrierung bestätigt und Ihnen eine Bestätigungs-E-Mail gesendet hat. Wenn Sie die Bestätigungs-E-Mail nicht innerhalb der nächsten Tage erhalten, wenden Sie sich an den ImageNet-Support, um zu erfahren, warum Ihre Registrierung nicht bestätigt wurde. Sobald Ihre Registrierung bestätigt wurde, können Sie das Dataset herunterladen. Die Cloud TPU-Anleitungen, die das ImageNet-Dataset verwenden, nutzen die Bilder der ImageNet Large Scale Visual Recognition Challenge 2012 (ILSVRC2012).

ImageNet-Dataset herunterladen

  1. Gehen Sie auf der Downloadwebsite von LSRVC 2012 zum Abschnitt „Images“ und klicken Sie mit der rechten Maustaste auf „Trainingsbilder (Aufgabe 1 und 2)“. Die URL zum Herunterladen des größten Teils des Trainings-Datasets. Speichern Sie die URL.

    Klicken Sie mit der rechten Maustaste auf „Trainingsbilder (Aufgabe 3)“, um die URL für den zweiten Trainingssatz abzurufen. Speichern Sie die URL.

    Klicken Sie mit der rechten Maustaste auf „Validierungsbilder (alle Aufgaben)“, um die URL für das Validierungs-Dataset abzurufen. Speichern Sie die URL.

    Wenn Sie die ImageNet-Dateien auf Ihren lokalen Computer herunterladen, müssen Sie die Verzeichnisse auf Ihrem lokalen Computer in das entsprechende $IMAGENET_HOME-Verzeichnis auf Ihrer VM-Instanz kopieren. Das Kopieren des ImageNet-Datasets vom lokalen Host auf die VM-Instanz dauert etwa 13 Stunden.

    Bevor Sie das ImageNet-Dataset auf Ihre TPU-VM kopieren, müssen Sie den Namen Ihrer TPU-VM-Instanz ermitteln. Stellen Sie dazu über SSH eine Verbindung zu Ihrer TPU-VM her. Der Name der VM-Instanz wird in der Eingabeaufforderung nach dem Symbol @ angezeigt.

    Kopieren Sie mit dem folgenden Befehl die Dateien unter ~/imagenet auf Ihrem lokalen Computer nach $IMAGENET_HOME auf Ihrer VM.

    gcloud compute scp --recurse $IMAGENET_HOME username@vm-instance-name:~/imagenet
    
  2. Laden Sie aus $IMAGENET_HOME die Dateien mit den Trainingsbildern (Aufgabe 1 und 2) mit der gespeicherten URL herunter.

    Die Datei "Training images (Task 1 & 2)" ist der große Trainingsdatensatz. Es ist 138 GB groß. Wenn Sie mit Cloud Shell auf Ihre TPU-VM herunterladen, dauert der Download etwa 40 Stunden. Wenn Cloud Shell die Verbindung zur VM verliert, können Sie dem Befehl nohup voranstellen oder screen verwenden.

    cd $IMAGENET_HOME \
    nohup wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_train.tar
    

    Ersetzen Sie die URL durch die URL, die Sie zuvor unter „Trainingsbilder (Aufgabe 1 und 2)“ gespeichert haben, da sich die URL möglicherweise geändert hat.

  3. Extrahieren Sie mit dem folgenden Befehl die einzelnen Trainingsverzeichnisse in das Verzeichnis $IMAGENET_HOME/train. Die Extraktion dauert zwischen 1 und 3 Stunden.

    tar xf $IMAGENET_HOME/ILSVRC2012_img_train.tar -C $IMAGENET_HOME/train
    

    Extrahieren Sie die einzelnen Trainings-TAR-Dateien im Verzeichnis $IMAGENET_HOME/train, wie im folgenden Skript gezeigt:

    cd `$IMAGENET_HOME/train`
    
    for f in *.tar; do
     d=`basename $f .tar`
     mkdir $d
     tar xf $f -C $d
    done
    

    Löschen Sie nach dem Extrahieren die TAR-Dateien, um Speicherplatz freizugeben.

  4. Laden Sie aus $IMAGENET_HOME die Dateien mit den Trainingsbildern (Aufgabe 3) mit der gespeicherten URL herunter.

    Die Datei „Trainings-Images (Aufgabe 3)“ ist 728 MB groß und der Download dauert nur wenige Minuten. Sie müssen also keine Vorkehrungen gegen den Verlust der Cloud Shell-Verbindung treffen.

    wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_train_t3.tar
    

    Ersetzen Sie die URL durch die URL, die Sie zuvor unter „Trainingsbilder (Aufgabe 3)“ gespeichert haben, da sich die URL möglicherweise geändert hat.

  5. Extrahieren Sie mit dem folgenden Befehl die einzelnen Trainingsverzeichnisse in das Verzeichnis $IMAGENET_HOME/train.

    tar xf $IMAGENET_HOME/ILSVRC2012_img_train_t3.tar -C $IMAGENET_HOME/train
    

    Extrahieren Sie die einzelnen Trainings-TAR-Dateien im Verzeichnis $IMAGENET_HOME/train, wie im folgenden Skript gezeigt:

    cd `$IMAGENET_HOME/train`
    
    for f in *.tar; do
     d=`basename $f .tar`
     mkdir $d
     tar xf $f -C $d
    done
    

    Löschen Sie nach dem Extrahieren die TAR-Dateien, um Speicherplatz freizugeben.

  6. Laden Sie aus $IMAGENET_HOME die Dateien „Validierungsbilder (alle Aufgaben)“ unter Verwendung der gespeicherten URL herunter.

    Wenn Sie die Datei „Validierungsbilder (alle Aufgaben)“ herunterladen, wird die Verbindung zu Cloud Shell möglicherweise getrennt. Mit nohup oder screen können Sie verhindern, dass die Verbindung zu Cloud Shell getrennt wird.

    wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_val.tar
    

    Ersetzen Sie die URL durch die URL, die Sie zuvor unter „Validierungsbilder (alle Aufgaben)“ gespeichert haben, da sich die URL möglicherweise geändert hat.

    Dieser Download dauert etwa 30 Minuten.

  7. Extrahieren Sie mit dem folgenden Befehl die einzelnen Validierungsdateien in das Verzeichnis $IMAGENET_HOME/validation.

    tar xf $IMAGENET_HOME/ILSVRC2012_img_val.tar -C $IMAGENET_HOME/validation
    

    Wenn Sie die Validierungsdateien auf Ihren lokalen Computer heruntergeladen haben, müssen Sie das Verzeichnis $IMAGENET_HOME/validation auf Ihrem lokalen Computer in das Verzeichnis $IMAGENET_HOME/validation auf Ihrer VM-Instanz kopieren. Der Kopiervorgang dauert etwa 30 Minuten.

  8. Laden Sie die Labeldatei herunter.

    wget -O $IMAGENET_HOME/synset_labels.txt \
    https://raw.githubusercontent.com/tensorflow/models/master/research/slim/datasets/imagenet_2012_validation_synset_labels.txt
    

    Wenn Sie die Labeldatei auf Ihren lokalen Computer heruntergeladen haben, müssen Sie sie in das Verzeichnis $IMAGENET_HOME auf Ihrem lokalen Computer in $IMAGENET_HOME auf Ihrer VM-Instanz kopieren. Dieser Kopiervorgang dauert einige Sekunden.

    Die Namen der Trainingsunterverzeichnisse (z. B. n03062245) sind WordNet-IDs (wnid). Die ImageNet API zeigt die Zuordnung von WordNet-IDs zu den zugehörigen Validierungslabels in der Datei synset_labels.txt. Ein Synset ist in diesem Kontext eine visuell ähnliche Gruppe von Bildern.

ImageNet-Dataset verarbeiten und optional in Cloud Storage hochladen

  1. Laden Sie aus GitHub das Skript imagenet_to_gcs.py herunter:

    wget https://raw.githubusercontent.com/tensorflow/tpu/master/tools/datasets/imagenet_to_gcs.py
    
  2. Wenn Sie das Dataset in Cloud Storage hochladen, geben Sie den Standort des Storage-Buckets an, in den das ImageNet-Dataset hochgeladen werden soll:

    export STORAGE_BUCKET=gs://bucket-name
    
  3. Wenn Sie das Dataset auf Ihren lokalen Computer oder Ihre lokale VM hochladen, geben Sie ein Datenverzeichnis zum Speichern des Datasets an:

    (vm)$ export DATA_DIR=$IMAGENET_HOME/dataset-directory
    
  4. Installieren Sie die folgenden Bibliotheken auf Ihrem Computer oder in einer virtuellen Umgebung:

    pip3 install google-cloud-storage
    pip3 install tensorflow
    
  5. Führen Sie das Skript aus, um das unformatierte Dataset als TFRecords vorzuverarbeiten, und verwenden Sie den folgenden Befehl, um es in Cloud Storage hochzuladen:

     python3 imagenet_to_gcs.py \
      --project=$PROJECT \
      --gcs_output_path=$STORAGE_BUCKET  \
      --raw_data_dir=$IMAGENET_HOME \
      --local_scratch_dir=$IMAGENET_HOME/tf_records
    

Das Skript generiert eine Reihe von Verzeichnissen (sowohl für das Training als auch für die Validierung) im folgenden Format:

${DATA_DIR}/train-00000-of-01024
${DATA_DIR}/train-00001-of-01024
...
${DATA_DIR}/train-01023-of-01024

und

${DATA_DIR}/validation-00000-of-00128
${DATA_DIR}/validation-00001-of-00128
...
${DATA_DIR}/validation-00127-of-00128

Nachdem die Daten in Ihren Cloud-Bucket hochgeladen wurden, führen Sie Ihr Modell aus und legen Sie --data_dir=${DATA_DIR} fest.