Das ImageNet-Dataset herunterladen, vorverarbeiten und hochladen

In diesem Thema wird beschrieben, wie Sie das ImageNet-Dataset herunterladen, vorverarbeiten und hochladen, um es mit der Cloud TPU zu nutzen. Zu den Modellen für maschinelles Lernen, die das ImageNet-Dataset verwenden, gehören:

  • ResNet
  • AmoebaNet
  • EfficientNet
  • MNASNet
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 für die Verwendung der vollständigen ImageNet-Datenbank reduzieren.

Das gesamte ImageNet-Dataset vorverarbeiten

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

Die Trainingsdaten enthalten 1.000 Kategorien und 1,2 Millionen Bilder, die zum einfachen Herunterladen 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 von Flickr und anderen Suchmaschinen aufgenommen wurden. Sie werden manuell mit dem Vorhandensein oder Fehlen von 1.000 Objektkategorien gekennzeichnet. Die 1.000 Objektkategorien enthalten sowohl interne Knoten als auch untergeordnete Knoten von ImageNet, überschneiden sich jedoch 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 Images werden zur Bewertung verwendet und ohne Labels veröffentlicht.

Schritte zur Vorverarbeitung des vollständigen ImageNet-Datasets

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

  1. Prüfen Sie, ob am Ziel für den Download ausreichend Speicherplatz vorhanden ist.
  2. Richten Sie die Zielverzeichnisse ein.
  3. Melden Sie sich auf der ImageNet-Website an und fordern Sie die Downloadberechtigung an.
  4. Laden Sie das Dataset auf das lokale Laufwerk oder die Compute Engine-VM herunter.

  5. Führen Sie das Vorverarbeitungs- und Uploadskript aus.

Speicherplatzbedarf prüfen

Unabhängig davon, ob Sie das Dataset auf Ihren lokalen Computer oder eine Compute Engine-VM herunterladen, benötigen Sie ca. 300 GB Speicherplatz auf dem Downloadziel. Auf einer VM können Sie den verfügbaren Speicherplatz mit dem Befehl df -ha prüfen.

Die Kapazität des VM-Laufwerks lässt sich mit einer der folgenden Methoden erhöhen:

  • Geben Sie in der gcloud compute-Befehlszeile das Flag --disk-size zusammen mit der Größe in GB an, die Sie zuweisen möchten.
  • Folgen Sie der Compute Engine-Anleitung, um der VM ein Laufwerk hinzuzufügen.
    • Setzen Sie die Option Beim Löschen der Instanz auf Laufwerk löschen, damit das Laufwerk entfernt wird, wenn Sie die VM entfernen.
    • Notieren Sie sich den Pfad zu Ihrem neuen Laufwerk. Beispiel: /mnt/disks/mnt-dir.

Zielverzeichnisse einrichten

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

  • Erstellen und exportieren Sie ein Basisverzeichnis für das ImageNet-Dataset.

    Erstellen Sie ein Verzeichnis wie imagenet in Ihrem Basisverzeichnis auf Ihrem lokalen Computer oder Ihrer VM. Erstellen Sie unter diesem Verzeichnis zwei Unterverzeichnisse: train und validation. Exportieren Sie das Basisverzeichnis 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 Sie eine Bestätigungs-E-Mail erhalten hat. Wenn Sie die Bestätigungs-E-Mail nicht innerhalb von zwei Tagen erhalten, wenden Sie sich an den ImageNet-Support, um zu erfahren, warum Ihre Registrierung nicht bestätigt wurde. Sobald die Registrierung bestätigt wurde, können Sie das Dataset herunterladen. Die Cloud TPU-Anleitungen, die das ImageNet-Dataset verwenden, verwenden die Bilder aus der ImageNet Large Scale Visual Recognition Challenge 2012 (ILSVRC2012).

ImageNet-Dataset herunterladen

  1. Wechseln Sie auf der LSRVC 2012-Download-Website zum Abschnitt "Images" und klicken Sie mit der rechten Maustaste auf "Training images (Task 1 & 2)". Dadurch erhalten Sie die URL, die zum Herunterladen des größten Teils des Trainings-Datasets erforderlich ist. 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 den Validierungsdatensatz abzurufen. Speichern Sie die URL.

    Wenn Sie die ImageNet-Dateien auf den lokalen Computer herunterladen, müssen Sie nach Abschluss des Downloads die Verzeichnisse auf Ihrem lokalen Computer in das entsprechende Verzeichnis $IMAGENET_HOME auf Ihrer Compute Engine-VM kopieren. Das Kopieren des ImageNet-Datasets von einem lokalen Host auf Ihre VM dauert ungefähr 13 Stunden.

    Mit dem folgenden Befehl werden beispielsweise alle Dateien unter $IMAGENET_HOME auf Ihrem lokalen Computer auf Ihre VM kopiert, auf der die Shell-Eingabeaufforderung username@vm-name angezeigt wird:

    gcloud compute scp --recurse $IMAGENET_HOME username@vm-name:~/imagenet
    
  2. Verwenden Sie unter $IMAGENET_HOME wget, um über die gespeicherten URLs die Trainings- und Validierungsdateien herunterzuladen.

    Die Datei "Training images (Task 1 & 2)" ist der große Trainingsdatensatz. Sie beträgt 138 GB und wenn der Download auf eine Compute Engine-VM mit Cloud Shell erfolgt, dauert der Download ca. 40 Stunden. Bei dieser besonders großen Datei können Sie dem Befehl nohup voranstellen oder screen verwenden, um den Download-Exit zu vermeiden, wenn die Cloud Shell getrennt wird.

    cd $IMAGENET_HOME \
    nohup wget http://image-net.org/challenges/LSVRC/2012/dd31405981ef5f776aa17412e1f0c112/ILSVRC2012_img_train.tar
    

    Dadurch wird eine große TAR-Datei heruntergeladen: ILSVRC2012_img_train.tar.

    Extrahieren Sie mit dem folgenden Befehl die einzelnen Trainingsverzeichnisse auf der VM aus $IMAGENET_HOME in das Verzeichnis $IMAGENET_HOME/train. Die Extraktion dauert 1–3 Stunden.

    tar xf ILSVRC2012_img_train.tar
    

    Die Datei "Trainingsbilder (Aufgabe 3)" ist 728 MB groß und dauert nur wenige Minuten, bis sie heruntergeladen wurde. Sie müssen also keine Vorsichtsmaßnahmen zum Verlust der Cloud Shell-Verbindung ergreifen.

    Wenn Sie diese Datei herunterladen, werden die einzelnen Trainingsverzeichnisse in das vorhandene Verzeichnis $IMAGENET_HOME/train extrahiert.

    wget http://www.image-net.org/challenges/LSVRC/2012/dd31405981ef5f776aa17412e1f0c112/ILSVRC2012_img_train_t3.tar
    

    Die Datei "Validierungsbilder (alle Aufgaben)" ist 6 GB groß. Sie sollten daher nohup oder Bildschirm verwenden, um den Download-Exit zu vermeiden, wenn die Cloud Shell getrennt wird.

    wget http://www.image-net.org/challenges/LSVRC/2012/dd31405981ef5f776aa17412e1f0c112/ILSVRC2012_img_val.tar
    

    Dieser Download dauert etwa 30 Minuten. Wenn Sie diese Datei herunterladen, werden die einzelnen Validierungsverzeichnisse in das Verzeichnis $IMAGENET_HOME/validation extrahiert.

    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 Ihrer Compute Engine-VM kopieren. Dieser Kopiervorgang dauert etwa 30 Minuten.

    Laden Sie die Labeldatei herunter. Dies dauert nur wenige Sekunden.

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

    Wenn Sie die Label-Datei auf Ihren lokalen Computer heruntergeladen haben, müssen Sie sie in das Verzeichnis $IMAGENET_HOME Ihres lokalen Computers in $IMAGENET_HOME auf Ihrer Compute Engine-VM 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 Zusammenhang 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 Speicherort des Storage-Buckets zum Hochladen des ImageNet-Datasets an:

    export STORAGE_BUCKET=gs://bucket-name
    
  3. Wenn Sie das Dataset auf Ihren lokalen Computer oder Ihre VM hochladen, geben Sie ein Datenverzeichnis für das Dataset an:

    (vm)$ export DATA_DIR=$IMAGENET_HOME/dataset-directory
    
  4. Führen Sie das Skript aus, um das Roh-Dataset als TFRecord vorzuverarbeiten und mit dem folgenden Befehl in Cloud Storage hochzuladen:

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

Das Skript generiert eine Reihe von Verzeichnissen (für Training und Validierung) der folgenden Form:

${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
S{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.