Halaman ini menjelaskan bagaimana TF2 SavedModels untuk tugas terkait gambar harus mengimplementasikan Reusable SavedModel API . (Ini menggantikan Tanda Tangan Umum untuk Gambar untuk format Hub TF1 yang sekarang sudah tidak digunakan lagi.)
Vektor Fitur Gambar
Ringkasan penggunaan
Vektor fitur gambar adalah tensor 1-D padat yang mewakili keseluruhan gambar, biasanya digunakan oleh pengklasifikasi feed-forward sederhana dalam model konsumen. (Dalam CNN klasik, ini adalah nilai hambatan setelah luas spasial dikumpulkan atau diratakan, namun sebelum klasifikasi dilakukan; untuk itu, lihat klasifikasi gambar di bawah.)
SavedModel yang Dapat Digunakan Kembali untuk ekstraksi fitur gambar memiliki metode __call__
pada objek root yang memetakan kumpulan gambar ke kumpulan vektor fitur. Ini dapat digunakan seperti ini:
obj = hub.load("path/to/model") # That's tf.saved_model.load() after download.
images = ... # A batch of images with shape [batch_size, height, width, 3].
features = obj(images) # A batch with shape [batch_size, num_features].
Di Keras, yang setara adalah
features = hub.KerasLayer("path/to/model")(images)
Inputnya mengikuti konvensi umum untuk input gambar . Dokumentasi model menentukan kisaran height
dan width
masukan yang diizinkan.
Outputnya adalah tensor tunggal dtype float32
dan bentuk [batch_size, num_features]
. batch_size
sama dengan input. num_features
adalah konstanta khusus modul yang tidak bergantung pada ukuran input.
detail API
API SavedModel yang Dapat Digunakan Kembali juga menyediakan daftar obj.variables
(misalnya, untuk inisialisasi ketika tidak memuat dengan penuh semangat).
Model yang mendukung penyesuaian menyediakan daftar obj.trainable_variables
. Anda mungkin harus lulus training=True
untuk mengeksekusi dalam mode pelatihan (misalnya, untuk dropout). Beberapa model mengizinkan argumen opsional untuk mengesampingkan hyperparameter (misalnya, tingkat putus sekolah; akan dijelaskan dalam dokumentasi model). Model juga dapat memberikan daftar obj.regularization_losses
. Untuk detailnya, lihat API SavedModel yang Dapat Digunakan Kembali .
Di Keras, hal ini ditangani oleh hub.KerasLayer
: inisialisasi dengan trainable=True
untuk mengaktifkan penyesuaian, dan (dalam kasus yang jarang terjadi, penggantian hpam dapat diterapkan) dengan arguments=dict(some_hparam=some_value, ...))
.
Catatan
Penerapan dropout pada fitur keluaran (atau tidak) harus diserahkan kepada konsumen model. SavedModel sendiri tidak boleh melakukan dropout pada output aktual (meskipun menggunakan dropout secara internal di tempat lain).
Contoh
SavedModels yang dapat digunakan kembali untuk vektor fitur gambar digunakan di
- tutorial Colab Melatih Ulang Pengklasifikasi Gambar ,
Klasifikasi Gambar
Ringkasan penggunaan
Klasifikasi gambar memetakan piksel suatu gambar ke skor linier (logit) untuk keanggotaan dalam kelas taksonomi yang dipilih oleh penerbit modul . Hal ini memungkinkan konsumen model untuk menarik kesimpulan dari klasifikasi tertentu yang dipelajari oleh modul penerbit. (Untuk klasifikasi gambar dengan kumpulan kelas baru, biasanya menggunakan kembali model Vektor Fitur Gambar dengan pengklasifikasi baru.)
SavedModel yang Dapat Digunakan Kembali untuk klasifikasi gambar memiliki metode __call__
pada objek root yang memetakan kumpulan gambar ke kumpulan logit. Ini dapat digunakan seperti ini:
obj = hub.load("path/to/model") # That's tf.saved_model.load() after download.
images = ... # A batch of images with shape [batch_size, height, width, 3].
logits = obj(images) # A batch with shape [batch_size, num_classes].
Di Keras, yang setara adalah
logits = hub.KerasLayer("path/to/model")(images)
Inputnya mengikuti konvensi umum untuk input gambar . Dokumentasi model menentukan kisaran height
dan width
masukan yang diizinkan.
logits
keluarannya adalah tensor tunggal dtype float32
dan bentuk [batch_size, num_classes]
. batch_size
sama dengan input. num_classes
adalah jumlah kelas dalam klasifikasi, yang merupakan konstanta khusus model.
Nilai logits[i, c]
adalah skor yang memprediksi keanggotaan contoh i
di kelas dengan indeks c
.
Tergantung pada klasifikasi yang mendasari apakah skor ini dimaksudkan untuk digunakan dengan softmax (untuk kelas yang saling eksklusif), sigmoid (untuk kelas ortogonal), atau yang lainnya. Dokumentasi modul harus menjelaskan hal ini, dan mengacu pada definisi indeks kelas.
detail API
API SavedModel yang Dapat Digunakan Kembali juga menyediakan daftar obj.variables
(misalnya, untuk inisialisasi ketika tidak memuat dengan penuh semangat).
Model yang mendukung penyesuaian menyediakan daftar obj.trainable_variables
. Anda mungkin harus lulus training=True
untuk mengeksekusi dalam mode pelatihan (misalnya, untuk dropout). Beberapa model mengizinkan argumen opsional untuk mengesampingkan hyperparameter (misalnya, tingkat putus sekolah; akan dijelaskan dalam dokumentasi model). Model juga dapat memberikan daftar obj.regularization_losses
. Untuk detailnya, lihat API SavedModel yang Dapat Digunakan Kembali .
Di Keras, hal ini ditangani oleh hub.KerasLayer
: inisialisasi dengan trainable=True
untuk mengaktifkan penyesuaian, dan (dalam kasus yang jarang terjadi, penggantian hpam dapat diterapkan) dengan arguments=dict(some_hparam=some_value, ...))
.
masukan gambar
Hal ini umum terjadi pada semua jenis model gambar.
Model yang mengambil sekumpulan gambar sebagai masukan menerimanya sebagai tensor 4-D padat dari dtype float32
dan bentuk [batch_size, height, width, 3]
yang elemennya merupakan nilai warna RGB piksel yang dinormalisasi ke kisaran [0, 1] . Inilah yang Anda dapatkan dari tf.image.decode_*()
diikuti oleh tf.image.convert_image_dtype(..., tf.float32)
.
Model menerima batch_size
apa pun. Dokumentasi model menentukan kisaran height
dan width
yang diizinkan. Dimensi terakhir ditetapkan pada 3 saluran RGB.
Disarankan agar model menggunakan tata letak channels_last
(atau NHWC
) secara keseluruhan, dan menyerahkannya kepada pengoptimal grafik TensorFlow untuk menulis ulang channels_first
(atau NCHW
) jika diperlukan.