Tutorial ini menjelaskan cara menggunakan skrip contoh pengonversi data klasifikasi gambar untuk mengonversi set data klasifikasi gambar mentah ke format TFRecord yang digunakan untuk melatih model Cloud TPU.
TFRecord menjadikan pembacaan file besar dari Google Cloud Storage lebih efisien daripada membaca setiap gambar sebagai file individual. Anda dapat menggunakan TFRecord di mana pun Anda menggunakan
pipeline tf.data.Dataset
.
Lihat dokumen TensorFlow berikut untuk mengetahui informasi selengkapnya tentang penggunaan TFRecord:
- TFRecord dan tf.train.Example
- tf.data.Dataset
- tf.data: Membuat pipeline input TensorFlow
- Pembaca dan penulis PyTorch TFRecord
Jika menggunakan framework PyTorch atau JAX, dan tidak menggunakan penyimpanan Google Cloud untuk penyimpanan set data, Anda mungkin tidak mendapatkan keuntungan yang sama dari TFRecords.
Ringkasan konversi
Folder klasifikasi gambar dalam repositori pengonversi data
di GitHub berisi skrip converter
, image_classification_data.py
, dan
contoh implementasi, simple_example.py
, yang dapat Anda salin dan ubah untuk melakukan
konversi data Anda sendiri.
Contoh pengonversi data klasifikasi gambar menentukan dua class,
ImageClassificationConfig
dan ImageClassificationBuilder
. Class ini
ditentukan dalam tpu/tools/data_converter/image_classification_data.py
.
ImageClassificationConfig
adalah class dasar abstrak. Anda membuat subclass
ImageClassificationConfig
untuk menentukan konfigurasi yang diperlukan guna membuat instance
ImageClassificationBuilder
.
ImageClassificationBuilder
adalah builder set data TensorFlow untuk set data klasifikasi gambar. Ini adalah subclass dari tdfs.core.GeneratorBasedBuilder
.
Ini mengambil contoh data dari {i>dataset<i} Anda dan mengubahnya menjadi TFRecords. TFRecords
ditulis ke jalur yang ditentukan oleh parameter data_dir
ke
metode __init__
dari ImageClassificationBuilder
.
Dalam simple_example.py,
SimpleDatasetConfig
subclass ImageClassificationConfig
, yang mengimplementasikan
properti yang menentukan mode yang didukung, jumlah class gambar, dan
generator contoh yang menghasilkan kamus yang berisi data gambar dan class
gambar untuk setiap contoh dalam set data.
Fungsi main()
membuat set data yang berisi data gambar yang dihasilkan secara acak dan
membuat instance objek SimpleDatasetConfig
yang menentukan jumlah class dan
jalur ke set data di disk. Selanjutnya, main()
akan membuat instance
objek ImageClassificationBuilder
, dengan meneruskan instance
SimpleDatasetConfig
. Terakhir, main()
memanggil download_and_prepare()
. Saat metode ini
dipanggil, instance ImageClassificationBuilder
akan menggunakan generator contoh
data yang diimplementasikan oleh SimpleDatasetConfig
untuk memuat setiap contoh dan menyimpannya
ke serangkaian file TFRecord.
Untuk penjelasan yang lebih mendetail, lihat Notebook Konverter Klasifikasi.
Sebelum memulai
Memodifikasi sampel konversi data untuk memuat set data Anda
Untuk mengonversi set data ke dalam format TFRecord, buat subclass dari
class ImageClassificationConfig
yang menentukan properti berikut:
- num_labels - mengembalikan jumlah kelas gambar
- supported_modes - menampilkan daftar mode yang didukung oleh set data Anda (misalnya: menguji, melatih, dan memvalidasi)
- text_label_map - menampilkan kamus yang memodelkan pemetaan antara label class teks dan label class bilangan bulat (SimpleDatasetConfig tidak menggunakan properti ini, karena tidak memerlukan pemetaan)
- download_path - jalur tempat mendownload set data Anda (SimpleDatasetConfig tidak menggunakan properti ini, example_generator memuat data dari disk)
Mengimplementasikan fungsi generator example_generator. Metode ini harus menghasilkan
kamus yang berisi data gambar dan nama class gambar untuk setiap contoh.
ImageClassificationBuilder
menggunakan fungsi example_generator()
untuk mengambil
setiap contoh dan menulisnya ke disk dalam format TFRecord.
Menjalankan sampel konversi data
Buat bucket Cloud Storage menggunakan perintah berikut:
gsutil mb -p ${PROJECT_ID} -c standard -l us-central1 gs://bucket-name
Luncurkan VM Compute Engine menggunakan perintah
gcloud
.$ 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
Mulai saat ini, awalan
(vm)$
berarti Anda harus menjalankan perintah pada instance VM Compute Engine.Instal paket yang diperlukan.
(vm)$ pip3 install opencv-python-headless pillow
Buat variabel lingkungan berikut yang digunakan oleh skrip.
(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"
Ubah ke direktori
data_converter
.(vm)$ cd /usr/share/tpu/tools/data_converter
Menjalankan konverter data pada {i>dataset<i} palsu
Skrip simple_example.py
terletak di folder image_classification
contoh pengonversi data. Menjalankan skrip dengan parameter
berikut akan menghasilkan kumpulan gambar palsu dan mengonversinya menjadi TFRecords.
(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
Menjalankan pengonversi data pada salah satu kumpulan data mentah
Buat variabel lingkungan untuk lokasi data mentah.
(vm)$ export GCS_RAW=gs://cloud-tpu-test-datasets/data_converter/raw_image_classification
Jalankan skrip
simple_example.py
.(vm)$ python3 image_classification/simple_example.py \ --num_classes=1000 \ --data_path=$GCS_RAW \ --generate=False \ --save_dir=$CONVERTED_DIR
Skrip simple_example.py
menggunakan parameter berikut:
num_classes
mengacu pada jumlah class dalam set data. Di sini kita menggunakan 1000 untuk mencocokkan format ImageNet.generate
menentukan apakah akan menghasilkan data mentah atau tidak.data_path
mengacu pada jalur tempat data dihasilkan jikagenerate=True
atau jalur tempat data mentah disimpan jikagenerate=False
.num_examples_per_class_low
dannum_examples_per_class_high
menentukan jumlah contoh per class yang akan dibuat. Skrip ini menghasilkan sejumlah contoh acak dalam rentang ini.save_dir
merujuk pada tempat penyimpanan TFRecord yang disimpan. Untuk melatih model di Cloud TPU, data harus disimpan di Cloud Storage. Ini dapat terjadi di Cloud Storage atau di VM.
Mengganti nama dan memindahkan TFRecords ke Cloud Storage
Contoh berikut menggunakan data yang dikonversi dengan model ResNet.
Ganti nama TFRecords ke format yang sama dengan TFRecords ImageNet:
(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' *
Salin TFRecords ke Cloud Storage:
(vm)$ gsutil -m cp train* $GCS_CONVERTED (vm)$ gsutil -m cp validation* $GCS_CONVERTED