На этой странице описывается, как 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 для векторов признаков изображения используются в
- учебник Colab «Переобучение классификатора изображений »,
- инструмент командной строки make_image_classifier .
Классификация изображений
Сводка по использованию
Классификация изображений сопоставляет пиксели изображения с линейными оценками (логитами) для принадлежности к классам таксономии , выбранным издателем модуля . Это позволяет потребителям модели делать выводы из конкретной классификации, полученной модулем публикации. (Для классификации изображений с новым набором классов вместо этого обычно повторно используется модель вектора признаков изображения с новым классификатором.)
Многоразовая 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
), если это необходимо.