Wspólne interfejsy API SavedModel dla zadań obrazu

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

Używane są zapisane modele wielokrotnego użytku dla wektorów cech 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 channels_last (lub NHWC ) i w razie potrzeby pozostawiły optymalizatorowi wykresów TensorFlow przepisanie do channels_first (lub NCHW ).