Mengonversi set data klasifikasi gambar untuk digunakan dengan Cloud TPU
Tutorial ini menjelaskan cara menggunakan skrip contoh konverter data klasifikasi gambar untuk mengonversi set data klasifikasi gambar mentah menjadi format TFRecord yang digunakan untuk melatih model Cloud TPU.
TFRecord membuat
pembacaan file besar dari Cloud Storage lebih efisien daripada membaca setiap
gambar sebagai file terpisah. 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 TFRecord PyTorch
Jika menggunakan framework PyTorch atau JAX, dan tidak menggunakan Cloud Storage 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 di tpu/tools/data_converter/image_classification_data.py
.
ImageClassificationConfig
adalah class dasar abstrak. Anda membuat subclass
ImageClassificationConfig
untuk menentukan konfigurasi yang diperlukan untuk membuat instance
ImageClassificationBuilder
.
ImageClassificationBuilder
adalah pembuat set data TensorFlow
untuk set data klasifikasi gambar. Ini adalah subclass dari tdfs.core.GeneratorBasedBuilder
.
Fungsi ini mengambil contoh data dari set data Anda dan mengonversinya menjadi TFRecords. TFRecords ditulis ke jalur yang ditentukan oleh parameter data_dir
ke metode __init__
dari ImageClassificationBuilder
.
Di simple_example.py,
SimpleDatasetConfig
subclass ImageClassificationConfig
, menerapkan
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 data gambar yang dihasilkan secara acak dan
membuat instance objek SimpleDatasetConfig
yang menentukan jumlah class dan
jalur ke set data di disk. Selanjutnya, main()
membuat instance
objek ImageClassificationBuilder
, dengan meneruskan instance
SimpleDatasetConfig
. Terakhir, main()
memanggil download_and_prepare()
. Saat metode ini
dipanggil, instance ImageClassificationBuilder
menggunakan generator contoh
data yang diterapkan oleh SimpleDatasetConfig
untuk memuat setiap contoh dan menyimpannya
ke serangkaian file TFRecord.
Untuk penjelasan yang lebih mendetail, lihat Notebook Konverter Klasifikasi.
Mengubah contoh konversi data untuk memuat set data Anda
Untuk mengonversi set data Anda ke format TFRecord, buat subclass
class ImageClassificationConfig
yang menentukan properti berikut:
- num_labels: menampilkan jumlah class gambar
- supported_modes: menampilkan daftar mode yang didukung oleh set data Anda (misalnya: pengujian, pelatihan, dan validasi)
- text_label_map: menampilkan kamus yang membuat model 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)
Implementasikan 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 contoh konversi data
Buat bucket Cloud Storage menggunakan perintah berikut:
gcloud storage buckets create gs://bucket-name --project=${PROJECT_ID} --location=us-central2
Luncurkan Cloud TPU menggunakan perintah
gcloud
.$ gcloud compute tpus tpu-vm create tpu-name \ --zone=us-central2-b \ --accelerator-type=v4-8 \ --version=tpu-vm-tf-2.18.0-pjrt
Deskripsi flag perintah
zone
- Zona tempat Anda berencana membuat Cloud TPU.
accelerator-type
- Jenis akselerator menentukan versi dan ukuran Cloud TPU yang ingin Anda buat. Untuk mengetahui informasi selengkapnya tentang jenis akselerator yang didukung untuk setiap versi TPU, lihat versi TPU.
version
- Versi software Cloud TPU.
Hubungkan ke TPU menggunakan SSH:
$ gcloud compute tpus tpu-vm ssh tpu-name --zone=us-central2-b
Saat Anda terhubung ke TPU, perintah shell akan berubah dari
username@projectname
menjadiusername@vm-name
.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 pengonversi data pada set data palsu
Skrip simple_example.py
terletak di folder image_classification
sampel 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 di salah satu set 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. Kita menggunakan 1000 di sini untuk mencocokkan format ImageNet.generate
menentukan apakah akan membuat 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 dihasilkan. Skrip menghasilkan sejumlah contoh secara acak dalam rentang ini.save_dir
mengacu pada tempat TFRecords tersimpan. Untuk melatih model di Cloud TPU, data harus disimpan di Cloud Storage. File ini dapat berada 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)$ gcloud storage cp train* $GCS_CONVERTED (vm)$ gcloud storage cp validation* $GCS_CONVERTED
Pembersihan
Putuskan sambungan dari Cloud TPU, jika Anda belum melakukannya:
(vm)$ exit
Perintah Anda sekarang akan menjadi
user@projectname
, yang menunjukkan bahwa Anda berada di Cloud Shell.Di Cloud Shell, jalankan
gcloud
untuk menghapus resource VM.$ gcloud compute tpus tpu-vm delete tpu-name \ --zone=us-central2-b
Verifikasi bahwa VM telah dihapus dengan menjalankan
gcloud compute tpus tpu-vm list
. Penghapusan mungkin memerlukan waktu beberapa menit. Respons seperti berikut menunjukkan bahwa instance Anda telah berhasil dihapus.$ gcloud compute tpus tpu-vm list --zone=us-central2-b
Listed 0 items.
Jalankan gcloud CLI seperti yang ditampilkan, yang mengganti bucket-name dengan nama bucket Cloud Storage yang Anda buat untuk tutorial ini:
$ gcloud storage rm gs://bucket-name --recursive