Na tej stronie opisano, w jaki sposób TF2 SavedModels do zadań związanych z obrazami powinien implementować interfejs API Reusable SavedModel . (Zastępuje to wspólne podpisy obrazów dla obecnie przestarzałego formatu TF1 Hub .)
Wektor funkcji obrazu
Podsumowanie użycia
Wektor cech obrazu to gęsty tensor 1-D reprezentujący cały obraz, zwykle używany przez prosty klasyfikator ze sprzężeniem zwrotnym w modelu konsumenckim. (W przypadku klasycznych sieci CNN jest to wartość wąskiego gardła po połączeniu lub spłaszczeniu zasięgu przestrzennego, ale przed dokonaniem klasyfikacji; w tym celu zobacz klasyfikację obrazów poniżej).
Model SavedModel wielokrotnego użytku do ekstrakcji cech obrazu ma metodę __call__
w obiekcie głównym, która odwzorowuje partię obrazów na partię wektorów cech. Można go używać w następujący sposób:
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].
W Keras odpowiednik jest
features = hub.KerasLayer("path/to/model")(images)
Dane wejściowe są zgodne z ogólną konwencją dotyczącą wprowadzania obrazów . Dokumentacja modelu określa dopuszczalny zakres height
i width
wejścia.
Dane wyjściowe to pojedynczy tensor typu dtype float32
i kształtu [batch_size, num_features]
. batch_size
jest taki sam jak w danych wejściowych. num_features
to stała specyficzna dla modułu, niezależna od rozmiaru danych wejściowych.
Szczegóły interfejsu API
Interfejs API SavedModel wielokrotnego użytku udostępnia także listę obj.variables
(np. do inicjalizacji, gdy ładowanie nie przebiega szybko).
Model obsługujący dostrajanie udostępnia listę obj.trainable_variables
. Wykonanie w trybie szkoleniowym może wymagać przejścia training=True
(np. w przypadku rezygnacji). Niektóre modele dopuszczają opcjonalne argumenty do zastąpienia hiperparametrów (np. wskaźnika rezygnacji; zostanie to opisane w dokumentacji modelu). Model może również udostępniać listę obj.regularization_losses
. Aby uzyskać szczegółowe informacje, zobacz interfejs API SavedModel wielokrotnego użytku .
W Keras zajmuje się tym hub.KerasLayer
: zainicjuj go za pomocą trainable=True
, aby umożliwić dostrojenie i (w rzadkich przypadkach, gdy mają zastosowanie przesłonięcia hparam) za pomocą arguments=dict(some_hparam=some_value, ...))
.
Notatki
Zastosowanie (lub nie) porzucenia funkcji wyjściowych należy pozostawić konsumentowi modelu. Sam SavedModel nie powinien wykonywać porzucania na rzeczywistych wynikach (nawet jeśli używa wewnętrznie porzucania w innych miejscach).
Przykłady
Zapisane modele wielokrotnego użytku dla wektorów cech obrazu są używane w
- samouczek Colab Ponowne uczenie klasyfikatora obrazu ,
Klasyfikacja obrazu
Podsumowanie użycia
Klasyfikacja obrazu odwzorowuje piksele obrazu na wyniki liniowe (logity) przynależności do klas taksonomii wybranej przez wydawcę modułu . Dzięki temu modelowi konsumenci mogą wyciągać wnioski z konkretnej klasyfikacji poznanej przez moduł wydawcy. (W przypadku klasyfikacji obrazu za pomocą nowego zestawu klas często zamiast tego używa się modelu wektora cech obrazu z nowym klasyfikatorem.)
Model SavedModel wielokrotnego użytku do klasyfikacji obrazów ma metodę __call__
w obiekcie głównym, która mapuje partię obrazów na partię logitów. Można go używać w ten sposób:
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].
W Keras odpowiednik jest
logits = hub.KerasLayer("path/to/model")(images)
Dane wejściowe są zgodne z ogólną konwencją dotyczącą wprowadzania obrazów . Dokumentacja modelu określa dopuszczalny zakres height
i width
wejścia.
logits
wyjściowe to pojedynczy tensor typu dtype float32
i kształtu [batch_size, num_classes]
. batch_size
jest taki sam jak w danych wejściowych. num_classes
to liczba klas w klasyfikacji, która jest stałą specyficzną dla modelu.
Wartość logits[i, c]
jest wynikiem przewidującym przynależność przykładu i
do klasy o indeksie c
.
Zależy to od podstawowej klasyfikacji, czy te wyniki mają być używane z softmax (dla klas wzajemnie się wykluczających), sigmoidem (dla klas ortogonalnych), czy czymś innym. Dokumentacja modułu powinna to opisywać i odsyłać do definicji indeksów klas.
Szczegóły interfejsu API
Interfejs API SavedModel wielokrotnego użytku udostępnia także listę obj.variables
(np. do inicjalizacji, gdy ładowanie nie przebiega szybko).
Model obsługujący dostrajanie udostępnia listę obj.trainable_variables
. Wykonanie w trybie szkoleniowym może wymagać przejścia training=True
(np. w przypadku rezygnacji). Niektóre modele dopuszczają opcjonalne argumenty do zastąpienia hiperparametrów (np. wskaźnika rezygnacji; zostanie to opisane w dokumentacji modelu). Model może również udostępniać listę obj.regularization_losses
. Aby uzyskać szczegółowe informacje, zobacz interfejs API SavedModel wielokrotnego użytku .
W Keras zajmuje się tym hub.KerasLayer
: zainicjuj go za pomocą trainable=True
, aby umożliwić dostrojenie i (w rzadkich przypadkach, gdy mają zastosowanie przesłonięcia hparam) za pomocą arguments=dict(some_hparam=some_value, ...))
.
Wejście obrazu
Jest to wspólne dla wszystkich typów modeli obrazów.
Model, który pobiera partię obrazów jako dane wejściowe, akceptuje je jako gęsty tensor 4-D typu dtype float32
i kształt [batch_size, height, width, 3]
którego elementami są wartości kolorów RGB pikseli znormalizowane do zakresu [0, 1] . Oto, co otrzymasz z tf.image.decode_*()
, po którym następuje tf.image.convert_image_dtype(..., tf.float32)
.
Model akceptuje dowolny batch_size
. Dokumentacja modelu określa dopuszczalny zakres height
i width
. Ostatni wymiar jest ustalony na 3 kanały RGB.
Zaleca się, aby modele korzystały z układu Tensorów channels_last
(lub NHWC
) i pozostawiły optymalizatorowi wykresów TensorFlow przepisanie go do channels_first
(lub NCHW
), jeśli to konieczne.