Weź udział w sympozjum Women in ML 7 grudnia Zarejestruj się teraz

Typowe podpisy do zdjęć

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Ta strona opisuje wspólne sygnatury, które powinny być zaimplementowane przez moduły w formacie TF1 Hub dla zadań związanych z obrazami. (Dla formatu SavedModel TF2 zobacz analogiczne API SavedModel .)

Niektóre moduły mogą być używane do więcej niż jednego zadania (np. moduły klasyfikacji obrazów mają tendencję do wyodrębniania niektórych funkcji po drodze). Dlatego każdy moduł zapewnia (1) nazwane podpisy dla wszystkich zadań oczekiwanych przez wydawcę oraz (2) domyślne output = m(images) dla wyznaczonego zadania głównego.

Wektor funkcji obrazu

Podsumowanie użytkowania

Wektor cech obrazu to gęsty tensor jednowymiarowy, który reprezentuje cały obraz, zwykle do klasyfikacji przez model konsumencki. (W przeciwieństwie do pośrednich aktywacji CNN, nie oferuje podziału przestrzennego. W przeciwieństwie do klasyfikacji obrazów , odrzuca klasyfikację poznaną przez model wydawcy).

Moduł wyodrębniania cech obrazu ma domyślną sygnaturę, która mapuje wiązkę obrazów na wiązkę wektorów cech. Może być używany tak:

  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ą wprowadzania obrazów .

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

Te wektory cech mają nadawać się do klasyfikacji za pomocą prostego klasyfikatora typu feed-forward (takiego jak połączone cechy z najwyższej warstwy splotowej w typowej CNN do klasyfikacji obrazów).

Stosowanie dropoutu do funkcji wyjściowych (lub nie) powinno być pozostawione konsumentowi modułu. Sam moduł nie powinien wykonywać dropoutu na rzeczywistych wyjściach (nawet jeśli używa dropout wewnętrznie 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 są zależne od modułu. Zaleca się poprzedzenie kluczy zależnych od architektury nazwą architektury (np. aby uniknąć pomylenia warstwy pośredniej "InceptionV3/Mixed_5c" z najwyższą warstwą "InceptionV2/Mixed_5c" ).

Klasyfikacja obrazu

Podsumowanie użytkowania

Klasyfikacja obrazu odwzorowuje piksele obrazu na wyniki liniowe (logity) dla przynależności do klas taksonomii wybranych przez wydawcę modułu . Pozwala to konsumentom na wyciąganie wniosków z konkretnej klasyfikacji, której nauczył się moduł wydawcy, a nie tylko z jej podstawowych cech (por. Wektor cech obrazu ).

Moduł wyodrębniania cech obrazu ma domyślną sygnaturę, która mapuje partię obrazów na partię logitów. Może być używany tak:

  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ą wprowadzania obrazów .

Słownik wyników zawiera "default" dane wyjściowe float32 i shape [batch_size, num_classes] . batch_size jest taki sam jak na wejściu, ale nie jest znany w czasie tworzenia wykresu. num_classes to liczba klas w klasyfikacji, która jest znaną stałą niezależną od rozmiaru danych wejściowych.

Obliczanie danych outputs["default"][i, c] daje wynik przewidujący 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 wykluczających się), sigmoid (dla klas ortogonalnych), czy z czymś innym. Dokumentacja modułu powinna to opisywać i odnosić się 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 są zależne od modułu. Zaleca się poprzedzenie kluczy zależnych od architektury nazwą architektury (np. aby uniknąć pomylenia warstwy pośredniej "InceptionV3/Mixed_5c" z najwyższą warstwą "InceptionV2/Mixed_5c" ).

Wejście obrazu

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

Sygnatura, która przyjmuje partię obrazów jako dane wejściowe, akceptuje je jako gęsty tensor 4-D typu float32 i shape [batch_size, height, width, 3] którego elementami są wartości kolorów RGB pikseli znormalizowanych do zakresu [0, 1] . To jest to, co otrzymujesz z tf.image.decode_*() , a następnie 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 przypisany do liczby 3 kanałów RGB. Wymiary height i width są ustalone zgodnie z oczekiwanym rozmiarem obrazów wejściowych. (Przyszłe prace mogą usunąć to ograniczenie dla w pełni splotowych modułów.)

Odbiorcy modułu nie powinni bezpośrednio sprawdzać kształtu, ale uzyskiwać informacje o rozmiarze, wywołując hub.get_expected_image_size() w specyfikacji modułu lub modułu i oczekuje się, że odpowiednio zmienią rozmiar obrazów wejściowych (zazwyczaj przed/podczas przetwarzania wsadowego).

Dla uproszczenia, moduły TF-Hub wykorzystują układ tensorów channel_last (lub NHWC ) i pozostawiają to optymalizatorowi wykresów TensorFlow channels_first channels_last lub NCHW ). Robi to domyślnie od wersji TensorFlow 1.7.