Общие API-интерфейсы SavedModel для задач изображения

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

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

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

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

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

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

В Керасе эквивалент

features = hub.KerasLayer("path/to/model")(images)

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

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

Детали API

Reusable SavedModel API также предоставляет список obj.variables (например, для инициализации, когда не загружается с нетерпением).

Модель, поддерживающая тонкую настройку, предоставляет список obj.trainable_variables . Может потребоваться передать training=True для выполнения в режиме обучения (например, для отсева). Некоторые модели допускают необязательные аргументы для переопределения гиперпараметров (например, коэффициент отсева, который будет описан в документации модели). Модель также может предоставлять список obj.regularization_losses . Дополнительные сведения см. в разделе Reusable SavedModel API .

В Keras об этом позаботится hub.KerasLayer : инициализируйте его с помощью trainable=True , чтобы включить точную настройку, и (в редком случае, когда применяются переопределения hparam) с arguments=dict(some_hparam=some_value, ...)) .

Заметки

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

Примеры

Многоразовые SavedModels для векторов признаков изображения используются в

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

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

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

Многоразовая SavedModel для классификации изображений имеет метод __call__ для корневого объекта, который сопоставляет пакет изображений с пакетом логитов. Его можно использовать так:

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

В Керасе эквивалент

logits = hub.KerasLayer("path/to/model")(images)

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

Выходные logits представляют собой один тензор dtype float32 и shape [batch_size, num_classes] . batch_size такой же, как и во входных данных. num_classes — это количество классов в классификации, которое является константой, зависящей от модели.

Значение logits[i, c] — это оценка, предсказывающая принадлежность примера i к классу с индексом c .

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

Детали API

Reusable SavedModel API также предоставляет список obj.variables (например, для инициализации, когда не загружается с нетерпением).

Модель, поддерживающая тонкую настройку, предоставляет список obj.trainable_variables . Вам может потребоваться передать training=True для выполнения в режиме обучения (например, для отсева). Некоторые модели допускают необязательные аргументы для переопределения гиперпараметров (например, коэффициент отсева; это будет описано в документации модели). Модель также может предоставлять список obj.regularization_losses . Дополнительные сведения см. в разделе Reusable SavedModel API .

В Keras об этом позаботится hub.KerasLayer : инициализируйте его с помощью trainable=True , чтобы включить точную настройку, и (в редком случае, когда применяются переопределения hparam) с arguments=dict(some_hparam=some_value, ...)) .

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

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

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

Модель принимает любой batch_size . В документации модели указан допустимый диапазон height и width . Последнее измерение фиксируется на 3 каналах RGB.

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