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

На этой странице описаны общие сигнатуры, которые должны быть реализованы модулями в формате 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-мерный тензор dtype float32 и shape [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 ) и оставляют оптимизатору графов TensorFlow возможность переписать его channels_first (или NCHW ), если это необходимо. Это делается по умолчанию, начиная с версии TensorFlow 1.7.