ImageNet-Dataset herunterladen, vorverarbeiten und hochladen
In diesem Artikel wird beschrieben, wie Sie das ImageNet-Dataset herunterladen, vorverarbeiten und hochladen, um es mit der Cloud TPU-VM-Architektur zu verwenden.
ImageNet ist eine Bilddatenbank. Die Bilder in der Datenbank sind hierarchisch organisiert, wobei jeder Knoten der Hierarchie durch Hunderttausende Bilder dargestellt wird.Die Größe der ImageNet-Datenbank bedeutet, dass das Trainieren eines Modells sehr viel Zeit in Anspruch nehmen kann. Alternativ können Sie auch eine Demoversion des Datasets verwenden, die als fake_imagenet bezeichnet wird. In dieser Demoversion können Sie das Modell testen und gleichzeitig den Speicher- und Zeitaufwand reduzieren, der mit der Verwendung der vollständigen ImageNet-Datenbank verbunden ist.
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 verpackt sind, damit sie leicht heruntergeladen werden können. 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 umfassen sowohl interne Knoten 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 wird in fünf Schritten zur Verwendung durch ein Modell für maschinelles Lernen vorbereitet:
- Prüfen Sie, ob am Ziel für den Download ausreichend Speicherplatz vorhanden ist.
- Richten Sie die Zielverzeichnisse ein.
- Melden Sie sich auf der ImageNet-Website an und fordern Sie die Downloadberechtigung an.
Laden Sie das Dataset auf ein lokales Laufwerk oder eine VM-Instanz herunter.
Führen Sie das Vorverarbeitungs- und Uploadskript aus.
Speicherplatzbedarf prüfen
Unabhängig davon, ob Sie das Dataset auf Ihren lokalen Computer oder auf eine VM-Instanz herunterladen, benötigen Sie etwa 300 GB freien Speicherplatz auf dem Downloadziel.
Die Standardlaufwerkszuweisung für eine TPU-VM beträgt 100 GB. Da für den Download auf Ihre TPU-VM 300 GB benötigt werden, müssen Sie einen nichtflüchtigen Speicher mit 200 GB zusätzlichem Speicherplatz hinzufügen, um den Download abzuschließen. Auf einer TPU-VM können Sie Ihren verfügbaren Speicher 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 beim Löschen der VM gelöscht wird.
- 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.
Erstellen und exportieren Sie ein Basisverzeichnis für das ImageNet-Dataset.
Erstellen Sie ein Verzeichnis, z. B.
imagenet
unter Ihrem Basisverzeichnis auf Ihrem Downloadziel (lokale Maschine oder TPU-VM). Erstellen Sie in diesem Verzeichnis zwei Unterverzeichnisse:train
undvalidation
. 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 Anmeldung bestätigt und Ihnen eine Bestätigungs-E-Mail gesendet hat. Wenn Sie die Bestätigungs-E-Mail nicht innerhalb weniger 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-Tutorials, die das ImageNet-Dataset verwenden, verwenden die Bilder aus der ImageNet Large Scale Visual Recognition Challenge 2012 (ILSVRC2012).
ImageNet-Dataset herunterladen
Wechseln Sie auf der Download-Website von LSRVC 2012 zum Abschnitt „Images“ auf der Seite und klicken Sie mit der rechten Maustaste auf „Training images (Task 1 & 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 „Validierungs-Images (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 VM kopieren, müssen Sie den Namen Ihrer VM-Instanz identifizieren. Führen Sie dazu den folgenden
gcloud describe
-Befehl aus und suchen Sie den Namen der VM-Instanz in der Ausgabe.gcloud compute tpus tpu-vm describe tpu-name --zone=zone
Dadurch wird eine Ausgabe generiert, die eine Zeile mit dem Namen Ihrer VM-Instanz enthält. Unten sehen Sie ein Beispiel für den Namen einer VM-Instanz in Fettschrift:
tpuVmSelflink: https://www.googleapis.com/compute/v1/projects/Projektname/zones/Zone/Instanzen/t1v-n-2b9b54cd-w-0
Verwenden Sie den folgenden Befehl, um die Dateien unter ~/imagenet auf Ihrem lokalen Computer nach
$IMAGENET_HOME
auf Ihrer VM zu kopieren.gcloud compute scp --recurse $IMAGENET_HOME username@vm-instance-name:~/imagenet
Verwenden Sie
wget
von $IMAGENET_HOME, um die Trainings- und Validierungsdateien mit den gespeicherten URLs herunterzuladen.Die Datei "Training images (Task 1 & 2)" ist der große Trainingsdatensatz. Der Download dauert 138 GB. Wenn Sie ihn mithilfe von Cloud Shell auf Ihre VM herunterladen, dauert der Download etwa 40 Stunden. Wenn Cloud Shell die Verbindung zur VM verliert, können Sie dem Befehl
nohup
voranstellen oder Bildschirm verwenden.cd `$IMAGENET_HOME` \ nohup wget http://image-net.org/challenges/LSVRC/2012/dd31405981ef5f776aa17412e1f0c112/ILSVRC2012_img_train.tar
Mit diesem Befehl wird eine große TAR-Datei heruntergeladen: ILSVRC2012_img_train.tar.
Extrahieren Sie die einzelnen Trainingsverzeichnisse mit dem folgenden Befehl aus der VM aus
$IMAGENET_HOME
in das Verzeichnis$IMAGENET_HOME/train
. Die Extraktion dauert 1 bis 3 Stunden.tar xf $IMAGENET_HOME/ILSVRC2012_img_train.tar -C $IMAGENET_HOME/traintar xf ILSVRC2012_img_train.tar
Extrahieren Sie die einzelnen TAR-Dateien für das Training, die sich im Verzeichnis
$IMAGENET_HOME/train
befinden, 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 die TAR-Dateien nach dem Extrahieren, um Speicherplatz freizugeben.
Die Datei "Training images (Task 3)" hat 728 MB und der Download dauert nur wenige Minuten. Es sind keine Vorkehrungen erforderlich, um das Trennen der Verbindung zu Cloud Shell zu vermeiden.
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
Wenn Sie die Datei „Validierungsbilder (alle Aufgaben)“ herunterladen, wird die Verbindung zu Cloud Shell möglicherweise getrennt. Sie können
nohup
oder screen verwenden, um zu verhindern, dass die Verbindung zu 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
auf Ihrer VM-Instanz kopieren. Der Kopiervorgang dauert etwa 30 Minuten.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 nach$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
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
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
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
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
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.