Typowe podpisy dla obrazów

Na tej stronie opisano typowe sygnatury, które powinny być implementowane przez moduły w formacie TF1 Hub do zadań związanych z obrazami. (W przypadku formatu TF2 SavedModel zobacz analogiczny interfejs API SavedModel .)

Niektórych modułów można używać do więcej niż jednego zadania (np. moduły klasyfikacji obrazów zwykle dokonują po drodze ekstrakcji cech). Dlatego każdy moduł zapewnia (1) nazwane podpisy dla wszystkich zadań przewidzianych przez wydawcę oraz (2) domyślny output = m(images) dla wyznaczonego zadania głównego.

Wektor funkcji obrazu

Podsumowanie użycia

Wektor cech obrazu to gęsty tensor 1-D, który reprezentuje cały obraz, zwykle do klasyfikacji według modelu konsumenckiego. (W przeciwieństwie do pośrednich aktywacji CNN nie zapewnia podziału przestrzennego. W przeciwieństwie do klasyfikacji obrazu odrzuca klasyfikację wyuczoną przez model wydawcy).

Moduł do ekstrakcji cech obrazu ma domyślną sygnaturę, która odwzorowuje partię obrazów na partię wektorów cech. Można go używać w ten sposób:

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

Definiuje również odpowiedni nazwany podpis.

Specyfikacja podpisu

Nazwany podpis do wyodrębniania wektorów cech obrazu jest wywoływany jako

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

Dane wejściowe są zgodne z ogólną konwencją dotyczącą wprowadzania obrazów .

Słownik wyników zawiera "default" wyjście typu dtype float32 i kształtu [batch_size, num_features] . batch_size jest taki sam jak w danych wejściowych, ale nie jest znany w momencie tworzenia wykresu. num_features to znana stała specyficzna dla modułu, niezależna od rozmiaru danych wejściowych.

Te wektory cech mają nadawać się do klasyfikacji za pomocą prostego klasyfikatora ze sprzężeniem zwrotnym (takiego jak zbiorcze cechy z najwyższej warstwy splotowej w typowym CNN do klasyfikacji obrazów).

Stosowanie rezygnacji z funkcji wyjściowych (lub nie) należy pozostawić konsumentowi modułu. Sam moduł nie powinien wykonywać dropoutu na rzeczywistych wyjściach (nawet jeśli wewnętrznie używa dropoutu w innych miejscach).

Słownik wyjść może udostępniać dalsze wyjścia, na przykład aktywacje ukrytych warstw wewnątrz modułu. Ich klucze i wartości zależą od modułu. Zalecane jest poprzedzanie kluczy zależnych od architektury nazwą architektury (np. aby uniknąć pomylenia warstwy pośredniej "InceptionV3/Mixed_5c" z najwyższą warstwą splotową "InceptionV2/Mixed_5c" ).

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 konsumenci mogą wyciągać wnioski z konkretnej klasyfikacji poznanej przez moduł wydawcy, a nie tylko z jej podstawowych cech (por. Image Feature Vector ).

Moduł do ekstrakcji cech obrazu ma domyślną sygnaturę, która odwzorowuje partię obrazów na partię logitów. Można go używać w ten sposób:

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

Definiuje również odpowiedni nazwany podpis.

Specyfikacja podpisu

Nazwany podpis do wyodrębniania wektorów cech obrazu jest wywoływany jako

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

Dane wejściowe są zgodne z ogólną konwencją dotyczącą wprowadzania obrazów .

Słownik wyników zawiera "default" wyjście typu dtype float32 i kształtu [batch_size, num_classes] . batch_size jest taki sam jak w danych wejściowych, ale nie jest znany w momencie tworzenia wykresu. num_classes to liczba klas w klasyfikacji, która jest znaną stałą niezależną od rozmiaru danych wejściowych.

Ocena outputs["default"][i, c] daje wynik przewidujący przynależność przykładu i do klasy z indeksem 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.

Słownik wyjść może udostępniać dalsze wyjścia, na przykład aktywacje ukrytych warstw wewnątrz modułu. Ich klucze i wartości zależą od modułu. Zalecane jest poprzedzanie kluczy zależnych od architektury nazwą architektury (np. aby uniknąć pomylenia warstwy pośredniej "InceptionV3/Mixed_5c" z najwyższą warstwą splotową "InceptionV2/Mixed_5c" ).

Wejście obrazu

Jest to wspólne dla wszystkich typów modułów obrazu i podpisów obrazów.

Sygnatura pobierająca 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) .

Moduł z dokładnie jednym (lub jednym głównym) wejściem obrazów używa nazwy "images" dla tego wejścia.

Moduł akceptuje dowolny batch_size i odpowiednio ustawia pierwszy wymiar TensorInfo.tensor_shape na „nieznany”. Ostatni wymiar jest ustalony na numer 3 kanałów RGB. Wymiary height i width są ustalane zgodnie z oczekiwanym rozmiarem obrazów wejściowych. (Przyszłe prace mogą usunąć to ograniczenie dla modułów w pełni splotowych.)

Konsumenci modułu nie powinni bezpośrednio sprawdzać kształtu, ale uzyskać informacje o rozmiarze, wywołując funkcję hub.get_expected_image_size() w specyfikacji modułu lub modułu. Oczekuje się, że odpowiednio zmienią rozmiar obrazów wejściowych (zwykle przed/w trakcie przetwarzania wsadowego).

Dla uproszczenia moduły TF-Hub korzystają z układu Tensor channels_last (lub NHWC ) i w razie potrzeby pozostawiają optymalizatorowi wykresów TensorFlow przepisanie do channels_first (lub NCHW ). Robi to domyślnie od wersji TensorFlow 1.7.