Общие подписи для изображений

На этой странице описаны общие сигнатуры, которые должны быть реализованы модулями формата TF1 Hub для задач, связанных с изображениями. (Для формата TF2 SavedModel см. аналогичный API SavedModel .)

Некоторые модули можно использовать для более чем одной задачи (например, модули классификации изображений имеют тенденцию попутно извлекать некоторые признаки). Таким образом, каждый модуль предоставляет (1) именованные подписи для всех задач, ожидаемых издателем, и (2) output = m(images) для назначенной основной задачи.

Вектор функции изображения

Сводка по использованию

Вектор признаков изображения — это плотный одномерный тензор, который представляет все изображение, обычно для классификации по потребительской модели. (В отличие от промежуточных активаций CNN, он не предлагает пространственной разбивки. В отличие от классификации изображений , он отбрасывает классификацию, полученную моделью издателя.)

Модуль для извлечения признаков изображения имеет сигнатуру по умолчанию, которая сопоставляет пакет изображений с пакетом векторов признаков. Его можно использовать так:

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

Он также определяет соответствующую именованную подпись.

Спецификация подписи

Именованная сигнатура для извлечения векторов признаков изображения вызывается как

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

Ввод соответствует общему соглашению по вводу изображений .

Словарь выходных данных содержит выходные данные "default" dtype float32 и shape [batch_size, num_features] . batch_size такой же, как и во входных данных, но неизвестен во время построения графика. num_features — это известная константа, специфичная для модуля, независимая от размера входных данных.

Эти векторы признаков предназначены для использования для классификации с помощью простого классификатора прямого распространения (например, объединенных признаков из самого верхнего сверточного слоя в типичной CNN для классификации изображений).

Применение исключения к выходным функциям (или нет) должно быть оставлено на усмотрение потребителя модуля. Сам модуль не должен выполнять отключение на реальных выходах (даже если он использует отключение внутри в других местах).

Словарь выходов может предоставлять дополнительные выходные данные, например, активацию скрытых слоев внутри модуля. Их ключи и значения зависят от модуля. Рекомендуется добавлять к ключам, зависящим от архитектуры, префикс имени архитектуры (например, чтобы не путать промежуточный уровень "InceptionV3/Mixed_5c" с самым верхним сверточным слоем "InceptionV2/Mixed_5c" ).

Классификация изображений

Сводка по использованию

Классификация изображений сопоставляет пиксели изображения с линейными показателями (логитами) принадлежности к классам таксономии , выбранным издателем модуля . Это позволяет потребителям делать выводы на основе конкретной классификации, полученной модулем издателя, а не только ее основных функций (см. Image Feature Vector ).

Модуль для извлечения признаков изображения имеет подпись по умолчанию, которая сопоставляет пакет изображений с пакетом логитов. Его можно использовать так:

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

Он также определяет соответствующую именованную подпись.

Спецификация подписи

Именованная сигнатура для извлечения векторов признаков изображения вызывается как

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

Ввод соответствует общему соглашению по вводу изображений .

Словарь выходных данных содержит выходные данные "default" dtype float32 и shape [batch_size, num_classes] . batch_size такой же, как и во входных данных, но неизвестен во время построения графика. num_classes — это количество классов в классификации, которое является известной константой, не зависящей от размера входных данных.

Оценка outputs["default"][i, c] дает оценку, предсказывающую членство примера i в классе с индексом c .

От базовой классификации зависит, будут ли эти оценки использоваться с softmax (для взаимоисключающих классов), сигмоидой (для ортогональных классов) или с чем-то еще. Это должно быть описано в документации модуля и содержать ссылку на определение индексов классов.

Словарь выходов может предоставлять дополнительные выходные данные, например, активацию скрытых слоев внутри модуля. Их ключи и значения зависят от модуля. Рекомендуется добавлять к ключам, зависящим от архитектуры, префикс имени архитектуры (например, чтобы не путать промежуточный уровень "InceptionV3/Mixed_5c" с самым верхним сверточным слоем "InceptionV2/Mixed_5c" ).

Ввод изображения

Это является общим для всех типов модулей изображений и подписей изображений.

Сигнатура, которая принимает на вход пакет изображений, принимает их как плотный 4-D тензор dtype float32 и форму [batch_size, height, width, 3] элементами которой являются значения цветов RGB пикселей, нормализованные к диапазону [0, 1] . Это то, что вы получаете от tf.image.decode_*() , за которым следует tf.image.convert_image_dtype(..., tf.float32) .

Модуль с ровно одним (или одним основным) входом изображений использует для этого входа имя "images" .

Модуль принимает любой batch_size и, соответственно, устанавливает для первого измерения TensorInfo.tensor_shape значение «неизвестно». Последнее измерение привязано к числу 3 каналов RGB. Размеры height и width фиксируются в соответствии с ожидаемым размером входных изображений. (Дальнейшая работа может снять это ограничение для полностью сверточных модулей.)

Потребители модуля не должны проверять форму напрямую, а получают информацию о размере, вызывая Hub.get_expected_image_size() в модуле или спецификации модуля, и должны соответствующим образом изменить размер входных изображений (обычно до/во время пакетной обработки).

Для простоты модули TF-Hub используют макет channels_last (или NHWC ) Tensors и оставляют его оптимизатору графов TensorFlow для перезаписи в channels_first (или NCHW ), если это необходимо. Это происходит по умолчанию, начиная с версии TensorFlow 1.7.