API SavedModel Umum untuk Tugas Gambar

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

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.