Görseller için Ortak İmzalar

Bu sayfada, görüntüyle ilgili görevler için TF1 Hub formatındaki modüller tarafından uygulanması gereken ortak imzalar açıklanmaktadır. ( TF2 SavedModel formatı için benzer SavedModel API'sine bakın.)

Bazı modüller birden fazla görev için kullanılabilir (örneğin, görüntü sınıflandırma modülleri yolda bazı özellik çıkarımları yapma eğilimindedir). Bu nedenle, her modül (1) yayıncının beklediği tüm görevler için adlandırılmış imzalar ve (2) belirlenen birincil görev için varsayılan imza output = m(images) sağlar.

Görüntü Özellik Vektörü

Kullanım özeti

Bir görüntü özellik vektörü, tipik olarak tüketici modeline göre sınıflandırma için bir görüntünün tamamını temsil eden yoğun bir 1 boyutlu tensördür. (CNN'lerin ara aktivasyonlarından farklı olarak mekansal bir döküm sunmaz. Görüntü sınıflandırmanın aksine yayıncı modeli tarafından öğrenilen sınıflandırmayı göz ardı eder.)

Görüntü özelliği çıkarımına yönelik bir modülün, bir dizi görüntüyü bir grup özellik vektörüne eşleyen varsayılan bir imzası vardır. Şu şekilde kullanılabilir:

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

Aynı zamanda karşılık gelen adlandırılmış imzayı da tanımlar.

İmza spesifikasyonu

Görüntü özellik vektörlerini çıkarmak için adlandırılmış imza şu şekilde çağrılır:

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

Giriş, görüntülerin girişine ilişkin genel kurallara uygundur.

Çıkışlar sözlüğü, dtype float32 ve şeklin [batch_size, num_features] "default" çıktısını içerir. batch_size girdidekiyle aynıdır ancak grafik oluşturma sırasında bilinmemektedir. num_features , giriş boyutundan bağımsız olarak bilinen, modüle özgü bir sabittir.

Bu özellik vektörlerinin, basit bir ileri beslemeli sınıflandırıcıyla sınıflandırma için kullanılabilmesi amaçlanmaktadır (görüntü sınıflandırması için tipik bir CNN'deki en üstteki evrişimsel katmandan toplanan özellikler gibi).

Çıkış özelliklerine bırakma uygulanması (ya da uygulanmaması) modül tüketicisine bırakılmalıdır. Modülün kendisi gerçek çıkışlarda bırakma işlemi yapmamalıdır (başka yerlerde dahili olarak bırakma kullansa bile).

Çıkış sözlüğü, örneğin modül içindeki gizli katmanların etkinleştirilmesi gibi başka çıktılar da sağlayabilir. Anahtarları ve değerleri modüle bağlıdır. Mimariye bağlı anahtarların önüne bir mimari adı eklenmesi önerilir (örneğin, "InceptionV3/Mixed_5c" ara katmanının en üstteki evrişimsel katman "InceptionV2/Mixed_5c" ile karıştırılmasını önlemek için).

Görüntü Sınıflandırması

Kullanım özeti

Görüntü sınıflandırması, bir görüntünün piksellerini , modül yayıncısı tarafından seçilen bir taksonominin sınıflarına üyelik için doğrusal puanlarla (logitler) eşleştirir. Bu, tüketicilerin yalnızca altta yatan özelliklerden değil, yayıncı modülü tarafından öğrenilen belirli sınıflandırmadan sonuçlar çıkarmasına olanak tanır (bkz. Görüntü Özellik Vektörü ).

Görüntü özelliği çıkarmaya yönelik bir modülün, bir dizi görüntüyü bir grup logit ile eşleyen varsayılan bir imzası vardır. Şu şekilde kullanılabilir:

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

Aynı zamanda karşılık gelen adlandırılmış imzayı da tanımlar.

İmza spesifikasyonu

Görüntü özellik vektörlerini çıkarmak için adlandırılmış imza şu şekilde çağrılır:

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

Giriş, görüntülerin girişine ilişkin genel kurallara uygundur.

Çıkışlar sözlüğü, dtype float32 ve şeklin [batch_size, num_classes] "default" çıktısını içerir. batch_size girdidekiyle aynıdır ancak grafik oluşturma sırasında bilinmemektedir. num_classes , giriş boyutundan bağımsız olarak bilinen bir sabit olan, sınıflandırmadaki sınıfların sayısıdır.

outputs["default"][i, c] değerlendirilmesi, örnek i c indeksli sınıfa üyeliğini tahmin eden bir puan verir.

Bu puanların softmax (birbirini dışlayan sınıflar için), sigmoid (ortogonal sınıflar için) veya başka bir şeyle mi kullanılacağı, temel sınıflandırmaya bağlıdır. Modül dokümantasyonu bunu açıklamalı ve sınıf indekslerinin tanımına atıfta bulunmalıdır.

Çıkış sözlüğü, örneğin modül içindeki gizli katmanların etkinleştirilmesi gibi başka çıktılar da sağlayabilir. Anahtarları ve değerleri modüle bağlıdır. Mimariye bağlı anahtarların önüne bir mimari adı eklenmesi önerilir (örneğin, "InceptionV3/Mixed_5c" ara katmanının en üstteki evrişimsel katman "InceptionV2/Mixed_5c" ile karıştırılmasını önlemek için).

Görüntü girişi

Bu, tüm görüntü modülü türleri ve görüntü imzaları için ortaktır.

Bir dizi görüntüyü girdi olarak alan bir imza, bunları, öğeleri [0, 1] aralığına normalleştirilmiş piksellerin RGB renk değerleri olan dtype float32 ve şeklin [batch_size, height, width, 3] yoğun bir 4 boyutlu tensörü olarak kabul eder. . Bu, tf.image.decode_*() ve ardından tf.image.convert_image_dtype(..., tf.float32) öğesinden elde ettiğiniz şeydir.

Tam olarak bir (veya bir temel) görüntü girişi olan bir modül, bu giriş için "images" adını kullanır.

Modül herhangi bir batch_size kabul eder ve buna uygun olarak TensorInfo.tensor_shape'in ilk boyutunu "bilinmeyen" olarak ayarlar. Son boyut RGB kanallarının 3 numarasına sabitlenmiştir. height ve width boyutları, giriş görüntülerinin beklenen boyutuna sabitlenir. (Gelecekteki çalışmalar tamamen evrişimli modüller için bu kısıtlamayı kaldırabilir.)

Modülün tüketicileri, şekli doğrudan incelememelidir; ancak boyut bilgisini modül veya modül özelliklerinde hub.get_expected_image_size() öğesini çağırarak elde etmelidir ve giriş görüntülerini buna göre yeniden boyutlandırmaları beklenir (genellikle toplu işlem öncesinde/sırasında).

Basitlik açısından, TF-Hub modülleri channels_last (veya NHWC ) düzenini kullanır ve gerekirse channels_first (veya NCHW ) yeniden yazılmasını TensorFlow'un grafik iyileştiricisine bırakır. Bunu TensorFlow sürüm 1.7'den beri varsayılan olarak yapıyor.