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 analogi SavedModel API .)

Beberapa modul dapat digunakan untuk lebih dari satu tugas (misalnya, modul klasifikasi gambar cenderung melakukan beberapa ekstraksi fitur dalam prosesnya). 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 ditentukan.

Vektor Fitur Gambar

Ringkasan penggunaan

Vektor fitur gambar adalah tensor 1-D padat yang mewakili keseluruhan gambar, biasanya untuk klasifikasi berdasarkan model konsumen. (Berbeda dengan aktivasi perantara CNN, CNN tidak menawarkan pengelompokan spasial. Berbeda dengan klasifikasi gambar , CNN membuang klasifikasi yang dipelajari oleh model penerbit.)

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

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

Ini 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"]

Inputnya mengikuti konvensi umum untuk input gambar .

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

Vektor fitur ini dimaksudkan agar dapat digunakan untuk klasifikasi dengan pengklasifikasi feed-forward sederhana (seperti fitur gabungan 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 keluaran sebenarnya (meskipun 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. Disarankan untuk mengawali kunci yang bergantung pada arsitektur dengan nama arsitektur (misalnya, untuk menghindari kebingungan antara lapisan perantara "InceptionV3/Mixed_5c" dengan lapisan konvolusional paling atas "InceptionV2/Mixed_5c" ).

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 menarik kesimpulan dari klasifikasi tertentu yang dipelajari oleh modul penerbit, dan bukan hanya fitur dasarnya (lih. Vektor Fitur Gambar ).

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

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

Ini 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"]

Inputnya mengikuti konvensi umum untuk input gambar .

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

Mengevaluasi outputs["default"][i, c] menghasilkan 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.

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

masukan gambar

Hal ini umum terjadi pada semua jenis modul gambar dan tanda tangan gambar.

Tanda tangan 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) .

Modul dengan tepat satu (atau satu masukan utama) berupa gambar menggunakan nama "images" untuk masukan ini.

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

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

Untuk mempermudah, modul TF-Hub menggunakan tata letak channels_last (atau NHWC ), dan menyerahkannya kepada pengoptimal grafik TensorFlow untuk menulis ulang channels_first (atau NCHW ) jika diperlukan. Hal ini telah dilakukan secara default sejak TensorFlow versi 1.7.