In dieser Anleitung wird beschrieben, wie Sie mit dem Skript Beispiel für die Konvertierung von Bildklassifizierungsdaten ein Rohformat zur Klassifizierung von Bildern in das TFRecord-Format konvertieren, das zum Trainieren von Cloud TPU-Modellen verwendet wird.
Mithilfe von TFRecords können große Dateien aus Google Cloud Storage effizienter gelesen werden, als wenn jedes Image als einzelne Datei gelesen wird. Sie können TFRecord überall dort verwenden, wo Sie eine tf.data.Dataset
-Pipeline verwenden.
Weitere Informationen zur Verwendung von TFRecord finden Sie in den folgenden TensorFlow-Dokumenten:
- TFRecord and tf.train.Example
- tf.data.Dataset
- tf.data: Build TensorFlow input pipelines
- PyTorch TFRecord reader and writer
Wenn Sie das PyTorch- oder JAX-Framework verwenden und keinen Google Cloud-Speicher für Ihren Dataset-Speicher verwenden, erhalten Sie möglicherweise nicht den gleichen Vorteil von TFRecords.
Konvertierung – Übersicht
Der Bildklassifizierungsordner im Datenkonverter-Repository auf GitHub enthält das Skript converter
, image_classification_data.py
und die Beispielimplementierung simple_example.py
, die Sie kopieren und in Ihre eigene Datenkonvertierung anpassen können.
Das Beispiel für die Bildklassifikationsdaten-Konvertierung definiert zwei Klassen, ImageClassificationConfig
und ImageClassificationBuilder
. Diese Klassen sind in tpu/tools/data_converter/image_classification_data.py
definiert.
ImageClassificationConfig
ist eine einfache Basisklasse. Sie leiten die Unterklasse ImageClassificationConfig
ab, um die Konfiguration zu definieren, die zum Instanziieren von ImageClassificationBuilder
erforderlich ist.
ImageClassificationBuilder
ist ein TensorFlow-Dataset-Builder für Bildklassifizierungs-Datasets. Es ist eine abgeleitete Klasse von tdfs.core.GeneratorBasedBuilder
.
Es ruft Beispieldaten aus Ihrem Dataset ab und konvertiert sie in TFRecords. Die TFRecords werden in einen Pfad geschrieben, der durch den Parameter data_dir
zur Methode __init__
von ImageClassificationBuilder
angegeben wird.
In simple_example.py , SimpleDatasetConfig
erstellt eine Unterklasse von ImageClassificationConfig
, Implementieren von Eigenschaften, die die unterstützten Modi definieren, implementieren Anzahl von Bildklassen und ein Beispielgenerator, der ein Wörterbuch mit Bilddaten und eine Bildklasse für jedes Beispiel im Dataset hervorbringt.
Die Funktion main()
erstellt ein Dataset mit zufällig generierten Bilddaten und instanziiert ein SimpleDatasetConfig
- Objekt, das die Anzahl der Klassen und den Pfad zum Dataset auf der Festplatte angibt. Als Nächstes instanziiert main()
ein Objekt ImageClassificationBuilder
und übergibt die Instanz SimpleDatasetConfig
. Schließlich ruft main()
download_and_prepare()
auf. Wenn diese Methode aufgerufen wird, verwendet die ImageClassificationBuilder
-Instanz den von SimpleDatasetConfig
implementierten Beispielgenerator für Daten, um jedes Beispiel zu laden und in einer Reihe von TFRecord-Dateien zu speichern.
Eine ausführlichere Erläuterung finden Sie im Classification Converter Notebook.
Hinweise
Datenkonvertierungsbeispiel ändern, um das Dataset zu laden
Um Ihr Dataset in das TFRecord-Format zu konvertieren, erstellen Sie eine Unterklasse der Klasse ImageClassificationConfig
, die die folgenden Eigenschaften definiert:
- num_labels: Gibt die Anzahl der Image-Klassen zurück
- supported_modes: Gibt eine Liste der Modi zurück, die von Ihrem Dataset unterstützt werden (z. B. testen, trainieren und validieren)
- text_label_map: Gibt ein Wörterbuch zurück, das die Zuordnung zwischen einem Textklassenlabel und einem Ganzzahlklassenlabel modelliert. SimpleDatasetConfig verwendet diese Eigenschaft nicht, da keine Zuordnung erforderlich ist.
- Download-Pfad - der Pfad, von dem Ihr Dataset heruntergeladen werden soll (SimpleDatasetConfig verwendet diese Eigenschaft nicht, example_generator lädt die Daten von der Festplatte)
Implementieren Sie die example_generator-Generatorfunktion. Diese Methode muss ein Wörterbuch mit den Bilddaten und dem Namen der Bildklasse für jedes Beispiel liefern.
ImageClassificationBuilder
verwendet die Funktion example_generator()
, um jedes Beispiel abzurufen und im TFRecord-Format auf die Festplatte zu schreiben.
Das Daten-konvertierungs-Beispiel wird ausgeführt
Erstellen Sie mit dem folgenden Befehl einen Cloud Storage-Bucket:
gsutil mb -p ${PROJECT_ID} -c standard -l us-central1 gs://bucket-name
Starten Sie mit dem Befehl
gcloud
eine Compute Engine-VM.$ gcloud compute tpus execution-groups create \ --vm-only \ --zone=us-central1-b \ --name=imageclassificationconverter \ --tf-version=2.5.0
gcloud compute ssh imageclassificationconverter --zone=us-central1-b
Ab jetzt bedeutet das Präfix
(vm)$
, dass Sie den Befehl auf der Compute Engine-VM-Instanz ausführen sollten.Erforderliche Pakete installieren
(vm)$ pip3 install opencv-python-headless pillow
Erstellen Sie die folgenden vom Skript verwendeten Umgebungsvariablen.
(vm)$ export STORAGE_BUCKET=gs://bucket-name
(vm)$ export CONVERTED_DIR=$HOME/tfrecords (vm)$ export GENERATED_DATA=$HOME/data (vm)$ export GCS_CONVERTED=$STORAGE_BUCKET/data_converter/image_classification/tfrecords (vm)$ export GCS_RAW=$STORAGE_BUCKET/image_classification/raw (vm)$ export PYTHONPATH="$PYTHONPATH:/usr/share/tpu/models"
Wechseln Sie zum Verzeichnis
data_converter
.(vm)$ cd /usr/share/tpu/tools/data_converter
Datenkonverter für ein künstliches Dataset ausführen
Das Skript simple_example.py
befindet sich im Ordner image_classification
des Datenkonverter-Beispiels. Wenn Sie das Skript mit den folgenden Parametern ausführen, wird ein Satz gefälschter Bilder generiert und in TFRecords konvertiert.
(vm)$ python3 image_classification/simple_example.py \
--num_classes=1000 \
--data_path=$GENERATED_DATA \
--generate=True \
--num_examples_per_class_low=10 \
--num_examples_per_class_high=11 \
--save_dir=$CONVERTED_DIR
Datenkonverter für eines unserer Rohdatasets ausführen
Erstellen Sie eine Umgebungsvariable für den Speicherort der Rohdaten.
(vm)$ export GCS_RAW=gs://cloud-tpu-test-datasets/data_converter/raw_image_classification
Führen Sie das Skript
simple_example.py
aus:(vm)$ python3 image_classification/simple_example.py \ --num_classes=1000 \ --data_path=$GCS_RAW \ --generate=False \ --save_dir=$CONVERTED_DIR
Das Skript simple_example.py
verwendet die folgenden Parameter:
num_classes
bezieht sich auf die Anzahl der Klassen im Dataset. Wir verwenden hier 1000, um dem ImageNet-Format zu entsprechen.generate
bestimmt, ob die Rohdaten generiert werden sollen.data_path
bezieht sich auf den Pfad, in dem die Daten generiert werden, wenngenerate=True
, oder den Pfad, in dem die Rohdaten gespeichert werden, wenngenerate=False
.num_examples_per_class_low
undnum_examples_per_class_high
bestimmen, wie viele Beispiele pro Klasse generiert werden sollen. Das Skript generiert eine zufällige Anzahl von Beispielen in diesem Bereich.save_dir
bezieht sich darauf, wo TFRecords gespeichert sind. Zum Trainieren eines Modells in Cloud TPU müssen die Daten in Cloud Storage gespeichert werden. Dies kann in Cloud Storage oder auf der VM geschehen.
TFRecords umbenennen und in Cloud Storage verschieben
Im folgenden Beispiel werden die konvertierten Daten mit dem ResNet-Modell verwendet.
Benennen Sie die TFRecords in dasselbe Format wie ImageNet TFRecords um:
(vm)$ cd $CONVERTED_DIR/image_classification_builder/Simple/0.1.0/ (vm)$ sudo apt install rename
(vm)$ rename -v 's/image_classification_builder-(\w+)\.tfrecord/$1/g' *
Kopieren Sie die TFRecords in Cloud Storage:
(vm)$ gsutil -m cp train* $GCS_CONVERTED (vm)$ gsutil -m cp validation* $GCS_CONVERTED