Mengonversi set data klasifikasi gambar untuk digunakan dengan Cloud TPU
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 membuat pembacaan file besar dari 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: Membangun pipeline input TensorFlow
- Pembaca dan penulis TFRecord PyTorch
Jika Anda 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 penerapan, simple_example.py, yang dapat Anda salin dan ubah untuk melakukan
konversi data Anda sendiri.
Contoh konverter 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 untuk membuat instance
ImageClassificationBuilder.
ImageClassificationBuilder adalah pembuat set data TensorFlow
untuk set data klasifikasi gambar. Ini adalah subclass dari tdfs.core.GeneratorBasedBuilder.
Skrip ini mengambil contoh data dari set data Anda dan mengonversinya ke TFRecord. TFRecord ditulis ke jalur yang ditentukan oleh parameter data_dir ke metode __init__ dari ImageClassificationBuilder.
Di simple_example.py,
SimpleDatasetConfig membuat subclass ImageClassificationConfig, yang 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 dari data gambar yang dibuat secara acak dan membuat instance objek SimpleDatasetConfig yang menentukan jumlah kelas 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 Pengonversi Klasifikasi.
Ubah sampel 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 gambarsupported_modes: menampilkan daftar mode yang didukung oleh set data Anda (misalnya: test, train, dan validate)text_label_map: menampilkan kamus yang memodelkan pemetaan antara label kelas teks dan label kelas bilangan bulat (SimpleDatasetConfigtidak menggunakan properti ini, karena tidak memerlukan pemetaan)download_path: jalur tempat mendownload set data Anda (SimpleDatasetConfigtidak 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 menuliskannya ke disk dalam format TFRecord.
Jalankan contoh konversi data
Buat bucket Cloud Storage menggunakan perintah berikut:
gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_ID --location=LOCATION
Ganti kode berikut:
- BUCKET_NAME: Nama untuk bucket.
- PROJECT_ID: Project ID Anda.
- LOCATION: Lokasi tempat bucket Anda akan dibuat. Misalnya,
US-CENTRAL1.
Buat Cloud TPU menggunakan perintah
gcloud compute instances create.$ gcloud compute instances create TPU_NAME \ --machine-type=MACHINE_TYPE \ --zone=ZONE \ --image-family=IMAGE_FAMILY \ --image-project=IMAGE_PROJECT \ --maintenance-policy=TERMINATE
Ganti kode berikut:
- TPU_NAME: Nama untuk TPU.
- MACHINE_TYPE: Jenis mesin yang akan digunakan untuk VM TPU. Untuk mengetahui informasi selengkapnya, lihat Jenis mesin TPU.
- ZONE: Zona tempat TPU akan dibuat.
- IMAGE_FAMILY: Kelompok image dari image OS yang ingin
Anda gunakan. Image terbaru yang masih berlaku dan terkait dengan kelompok tersebut akan
digunakan. Untuk menentukan image tertentu, ganti tanda
--image-familydengan tanda--imagedan tetapkan nilainya ke image OS yang didukung. Untuk daftar sistem operasi yang didukung, lihat Image OS TPU. - IMAGE_PROJECT: Project ID image OS. Untuk mengetahui daftar ID project yang terkait dengan setiap image publik, lihat Image OS TPU.
Hubungkan ke TPU menggunakan SSH:
$ gcloud compute ssh TPU_NAME --zone=ZONE
Saat Anda terhubung ke TPU, perintah shell Anda akan berubah dari
username@projectnamemenjadiusername@vm-name.Instal paket yang diperlukan.
(vm)$ pip3 install opencv-python-headless pillow (vm)$ pip3 install tensorflow-datasets
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"
Download repositori TensorFlow TPU.
(vm)$ cd /usr/share/ (vm)$ git clone https://github.com/tensorflow/tpu.git (vm)$ cd tpu/tools/data_converter
Jalankan pengonversi data pada set data palsu
Skrip simple_example.py terletak di folder image_classification
contoh konverter data. Menjalankan skrip dengan parameter
berikut akan menghasilkan sekumpulan 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
Jalankan pengonversi data pada salah satu set data mentah kami
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_classesmengacu pada jumlah kelas dalam set data. Di sini kita menggunakan 1000 agar sesuai dengan format ImageNet.generatemenentukan apakah data mentah akan dibuat atau tidak.data_pathmengacu pada jalur tempat data dibuat jikagenerate=Trueatau jalur tempat data mentah disimpan jikagenerate=False.num_examples_per_class_lowdannum_examples_per_class_highmenentukan jumlah contoh per kelas yang akan dibuat. Skrip menghasilkan angka acak contoh dalam rentang ini.save_dirmengacu pada tempat TFRecord yang disimpan. Untuk melatih model di Cloud TPU, data harus disimpan di Cloud Storage. File ini dapat berada di Cloud Storage atau di VM.
Ganti nama dan pindahkan 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 update (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 koneksi dari Cloud TPU, jika Anda belum melakukannya:
(vm)$ exit
Sekarang perintah Anda akan menjadi
user@projectname, yang menunjukkan Anda berada di Cloud Shell.Di Cloud Shell, jalankan perintah
gcloud compute instances deleteuntuk menghapus VM TPU.$ gcloud compute instances delete TPU_NAME \ --zone=ZONE
Pastikan VM telah dihapus dengan menjalankan perintah
gcloud compute instances list. Penghapusan mungkin memerlukan waktu beberapa menit.$ gcloud compute instances list --zone=ZONE
Hapus bucket dengan menjalankan perintah berikut, dengan mengganti BUCKET_NAME dengan nama bucket yang Anda buat untuk tutorial ini:
$ gcloud storage rm gs://BUCKET_NAME --recursive