Tanda Tangan Umum untuk Gambar

Halaman ini menjelaskan tanda tangan umum yang harus diterapkan oleh modul dalam format TF1 Hub untuk tugas terkait gambar. (Untuk format TF2 SavedModel , lihat Analog SavedModel API .)

Beberapa modul dapat digunakan untuk lebih dari satu tugas (misalnya, modul klasifikasi gambar cenderung melakukan beberapa ekstraksi fitur di jalan). Oleh karena itu, setiap modul menyediakan (1) tanda tangan bernama untuk semua tugas yang diantisipasi oleh penerbit, dan (2) output = m(images) untuk tugas utama yang ditunjuk.

Vektor Fitur Gambar

Ringkasan penggunaan

Vektor fitur gambar adalah tensor 1-D padat yang mewakili keseluruhan gambar, biasanya untuk klasifikasi menurut model konsumen. (Tidak seperti aktivasi perantara CNN, ini tidak menawarkan perincian spasial. Tidak seperti klasifikasi gambar , ini membuang klasifikasi yang dipelajari oleh model penerbit.)

Modul untuk ekstraksi fitur gambar memiliki tanda tangan default yang memetakan sekumpulan gambar ke kumpulan vektor fitur. Ini dapat digunakan seperti:

  module_spec = hub.load_module_spec("path/to/module")
  height, width = hub.get_expected_image_size(module_spec)
  images = ...  # A batch of images with shape [batch_size, height, width, 3].
  module = hub.Module(module_spec)
  features = module(images)   # A batch with shape [batch_size, num_features].

Itu juga mendefinisikan tanda tangan bernama yang sesuai.

Spesifikasi tanda tangan

Tanda tangan bernama untuk mengekstraksi vektor fitur gambar dipanggil sebagai

  outputs = module(dict(images=images), signature="image_feature_vector",
                   as_dict=True)
  features = outputs["default"]

Input mengikuti konvensi umum untuk input gambar .

Kamus output berisi output "default" dari dtype float32 dan shape [batch_size, num_features] . batch_size sama dengan input, tetapi tidak diketahui pada waktu konstruksi grafik. num_features adalah konstanta khusus modul yang tidak bergantung pada ukuran input.

Vektor fitur ini dimaksudkan agar dapat digunakan untuk klasifikasi dengan pengklasifikasi feed-forward sederhana (seperti kumpulan fitur dari lapisan konvolusional paling atas di CNN tipikal untuk klasifikasi gambar).

Menerapkan dropout ke fitur keluaran (atau tidak) harus diserahkan kepada konsumen modul. Modul itu sendiri tidak boleh melakukan dropout pada output aktual (bahkan jika menggunakan dropout secara internal di tempat lain).

Kamus keluaran dapat memberikan keluaran lebih lanjut, misalnya, aktivasi lapisan tersembunyi di dalam modul. Kunci dan nilainya bergantung pada modul. Direkomendasikan untuk mengawali kunci yang bergantung pada arsitektur dengan nama arsitektur (misalnya, untuk menghindari kebingungan antara lapisan perantara "InceptionV3/Mixed_5c" dengan lapisan konvolusi paling atas "InceptionV2/Mixed_5c" ).

Klasifikasi Gambar

Ringkasan penggunaan

Klasifikasi gambar memetakan piksel gambar ke skor linier (logit) untuk keanggotaan dalam kelas taksonomi yang dipilih oleh penerbit modul . Hal ini memungkinkan konsumen untuk menarik kesimpulan dari klasifikasi tertentu yang dipelajari oleh modul penerbit, dan bukan hanya fitur dasarnya (lih. Image Feature Vector ).

Modul untuk ekstraksi fitur gambar memiliki tanda tangan default yang memetakan kumpulan gambar ke kumpulan log. Ini dapat digunakan seperti:

  module_spec = hub.load_module_spec("path/to/module")
  height, width = hub.get_expected_image_size(module_spec)
  images = ...  # A batch of images with shape [batch_size, height, width, 3].
  module = hub.Module(module_spec)
  logits = module(images)   # A batch with shape [batch_size, num_classes].

Itu juga mendefinisikan tanda tangan bernama yang sesuai.

Spesifikasi tanda tangan

Tanda tangan bernama untuk mengekstraksi vektor fitur gambar dipanggil sebagai

  outputs = module(dict(images=images), signature="image_classification",
                   as_dict=True)
  logits = outputs["default"]

Input mengikuti konvensi umum untuk input gambar .

Kamus output berisi output "default" dari dtype float32 dan shape [batch_size, num_classes] . batch_size sama dengan input, tetapi tidak diketahui pada waktu konstruksi grafik. num_classes adalah jumlah kelas dalam klasifikasi, yang merupakan konstanta yang diketahui terlepas dari ukuran input.

Mengevaluasi outputs["default"][i, c] menghasilkan skor yang memprediksi keanggotaan contoh i di kelas dengan indeks c .

Itu 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.

Kamus keluaran dapat memberikan keluaran lebih lanjut, misalnya, aktivasi lapisan tersembunyi di dalam modul. Kunci dan nilainya bergantung pada modul. Direkomendasikan untuk mengawali kunci yang bergantung pada arsitektur dengan nama arsitektur (misalnya, untuk menghindari kebingungan antara lapisan perantara "InceptionV3/Mixed_5c" dengan lapisan konvolusi paling atas "InceptionV2/Mixed_5c" ).

Masukan gambar

Ini umum untuk semua jenis modul gambar dan tanda tangan gambar.

Tanda tangan yang mengambil kumpulan gambar sebagai input menerimanya sebagai tensor 4-D padat dari dtype float32 dan bentuk [batch_size, height, width, 3] yang elemennya adalah nilai warna RGB dari piksel yang dinormalisasi ke rentang [0, 1] . Inilah yang Anda dapatkan dari tf.image.decode_*() diikuti oleh tf.image.convert_image_dtype(..., tf.float32) .

Modul dengan input gambar tepat satu (atau satu prinsip) menggunakan nama "images" untuk input ini.

Modul ini menerima batch_size apa pun, dan karenanya menyetel dimensi pertama TensorInfo.tensor_shape ke "unknown". Dimensi terakhir ditetapkan pada saluran RGB nomor 3 . Dimensi height dan width ditetapkan sesuai dengan ukuran gambar input yang diharapkan. (Pekerjaan di masa depan dapat menghilangkan batasan itu untuk modul yang sepenuhnya konvolusional.)

Konsumen modul tidak boleh memeriksa bentuk secara langsung, tetapi memperoleh informasi ukuran dengan memanggil hub.get_expected_image_size() pada spesifikasi modul atau modul, dan diharapkan untuk mengubah ukuran gambar input sesuai (biasanya sebelum/selama pengelompokan).

Untuk kemudahan, modul TF-Hub menggunakan tata letak Tensor channels_last (atau NHWC ), dan serahkan pada pengoptimal grafik TensorFlow untuk menulis ulang ke channels_first (atau NCHW ) jika diperlukan. Itu telah dilakukan secara default sejak TensorFlow versi 1.7.