Görüntü Görevleri için Yaygın SavedModel API'leri

Bu sayfada, görüntüyle ilgili görevlere yönelik TF2 SavedModels'in Yeniden Kullanılabilir SavedModel API'sini nasıl uygulaması gerektiği açıklanmaktadır. (Bu, artık kullanımdan kaldırılan TF1 Hub biçimi için Görüntüler için Ortak İmzaların yerini alır.)

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

Kullanım özeti

Bir görüntü özellik vektörü, tipik olarak tüketici modelinde basit bir ileri besleme sınıflandırıcı tarafından kullanılmak üzere, bir görüntünün tamamını temsil eden yoğun bir 1 boyutlu tensördür. (Klasik CNN'ler açısından bu, uzamsal kapsam toplandıktan veya düzleştirildikten sonraki, ancak sınıflandırma yapılmadan önceki darboğaz değeridir; bunun için aşağıdaki görüntü sınıflandırmasına bakın.)

Görüntü özelliği çıkarma için Yeniden Kullanılabilir SavedModel'in kök nesnesinde, bir grup görüntüyü bir grup özellik vektörüne eşleyen bir __call__ yöntemi vardır. Şu şekilde kullanılabilir:

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

Keras'ta eşdeğeri

features = hub.KerasLayer("path/to/model")(images)

Giriş, görüntülerin girişine ilişkin genel kurallara uygundur. Model belgeleri, girişin height ve width için izin verilen aralığı belirtir.

Çıktı, dtype float32 ve şeklin [batch_size, num_features] tek bir tensörüdür. batch_size giriştekiyle aynıdır. num_features giriş boyutundan bağımsız, modüle özgü bir sabittir.

API ayrıntıları

Yeniden Kullanılabilir SavedModel API'si aynı zamanda obj.variables bir listesini de sağlar (örneğin, istekli bir şekilde yüklenmediğinde başlatma için).

İnce ayarı destekleyen bir model, obj.trainable_variables listesini sağlar. Eğitim modunda yürütmek için training=True komutunu geçmeniz gerekebilir (örneğin, bırakma için). Bazı modeller isteğe bağlı bağımsız değişkenlerin hiperparametreleri geçersiz kılmasına izin verir (örn. bırakma oranı; model belgelerinde açıklanacaktır). Model aynı zamanda obj.regularization_losses listesini de sağlayabilir. Ayrıntılar için Yeniden Kullanılabilir SavedModel API'sine bakın.

Keras'ta bu durum hub.KerasLayer tarafından halledilir: ince ayarı etkinleştirmek için trainable=True ile başlatın ve (hparam geçersiz kılmalarının geçerli olduğu nadir durumlarda) arguments=dict(some_hparam=some_value, ...)) ile başlatın. .

Notlar

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

Örnekler

Görüntü özellik vektörleri için yeniden kullanılabilir SavedModels,

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, model tüketicilerinin, yayıncı modülü tarafından öğrenilen belirli sınıflandırmadan sonuçlar çıkarmasına olanak tanır. (Yeni bir sınıf kümesiyle görüntü sınıflandırması için, bunun yerine Görüntü Özellik Vektörü modelinin yeni bir sınıflandırıcıyla yeniden kullanılması yaygındır.)

Görüntü sınıflandırmasına yönelik Yeniden Kullanılabilir SavedModel, kök nesne üzerinde, bir görüntü kümesini bir logit kümesiyle eşleyen bir __call__ yöntemine sahiptir. Şu şekilde kullanılabilir:

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

Keras'ta eşdeğeri

logits = hub.KerasLayer("path/to/model")(images)

Giriş, görüntülerin girişine ilişkin genel kurallara uygundur. Model belgeleri, girişin height ve width için izin verilen aralığı belirtir.

Çıkış logits dtype float32 ve şeklin [batch_size, num_classes] tek bir tensörüdür. batch_size giriştekiyle aynıdır. num_classes modele özgü bir sabit olan sınıflandırmadaki sınıfların sayısıdır.

logits[i, c] değeri, örnek i c indeksli sınıfa üyeliğini tahmin eden bir puandır.

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.

API ayrıntıları

Yeniden Kullanılabilir SavedModel API'si aynı zamanda obj.variables bir listesini de sağlar (örneğin, istekli bir şekilde yüklenmediğinde başlatma için).

İnce ayarı destekleyen bir model, obj.trainable_variables listesini sağlar. Eğitim modunda yürütmek için training=True komutunu geçmeniz gerekebilir (örneğin, bırakma için). Bazı modeller isteğe bağlı bağımsız değişkenlerin hiperparametreleri geçersiz kılmasına izin verir (örn. bırakma oranı; model belgelerinde açıklanacaktır). Model aynı zamanda obj.regularization_losses listesini de sağlayabilir. Ayrıntılar için Yeniden Kullanılabilir SavedModel API'sine bakın.

Keras'ta bu durum hub.KerasLayer tarafından halledilir: ince ayarı etkinleştirmek için trainable=True ile başlatın ve (hparam geçersiz kılmalarının geçerli olduğu nadir durumlarda) arguments=dict(some_hparam=some_value, ...)) ile başlatın. .

Görüntü girişi

Bu, tüm görüntü modellerinde ortaktır.

Bir dizi görüntüyü girdi olarak alan bir model, 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.

Model herhangi bir batch_size kabul eder. Model dokümantasyonu height ve width için izin verilen aralığı belirtir. Son boyut 3 RGB kanalına sabitlenmiştir.

Modellerin baştan sona channels_last (veya NHWC ) düzenini kullanması ve gerekirse channels_first (veya NCHW ) olarak yeniden yazılmasını TensorFlow'un grafik iyileştiricisine bırakması önerilir.