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 (görüntü sınıflandırması için tipik bir CNN'deki en üstteki evrişimsel katmandan toplanan özellikler gibi) sınıflandırma için kullanılabilmesi amaçlanmaktadır.
Çı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ı en üstteki evrişimsel katman "InceptionV2/Mixed_5c"
ile karıştırmamak 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ı en üstteki evrişimsel katman "InceptionV2/Mixed_5c"
ile karıştırmamak 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.