此页面介绍了适用于图像相关任务的 TF2 SavedModel 应如何实现 可重复使用的 SavedModel API。(这取代了现在已弃用的 TF1 Hub 格式 的 图像通用签名。)
图像特征向量
用法摘要
图像特征向量是一个稠密的 1-D 张量,它表示一整幅图像,通常供消费者模型中的简单前馈分类器使用。(就经典 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].
在 Keras 中,等效项是
features = hub.KerasLayer("path/to/model")(images)
输入遵循 图像输入 的一般惯例。模型文档指定了输入的 height
和 width
的允许范围。
输出是一个数据类型为 float32
且形状为 [batch_size, num_features]
的单张量。batch_size
与输入中的相同。num_features
是一个与输入大小无关的特定于模块的常量。
API 详情
可重复利用的 SavedModel API 还提供了一个 obj.variables
列表(例如,在不急切加载时进行初始化)。
支持微调的模型提供了一个 obj.trainable_variables
列表。它可能要求你传递 training=True
以在训练模式下执行(例如,对于 dropout)。一些模型允许可选参数覆盖超参数(例如,dropout 率;将在模型文档中描述)。该模型还可能提供一个 obj.regularization_losses
列表。有关详细信息,请参阅 可重复利用的 SavedModel API。
在 Keras 中,这是由 hub.KerasLayer
处理的:使用 trainable=True
对其进行初始化以启用微调,并且(在罕见的情况下应用 hparam 覆盖时)使用 arguments=dict(some_hparam=some_value, ...))
。
注释
是否对输出特征应用 dropout 应留给模型使用者。SavedModel 本身不应对实际输出执行 dropout(即使它在其他地方内部使用 dropout)。
示例
图像特征向量的可重复利用的 SavedModels 用于
- Colab 教程 重新训练图像分类器,
图像分类
用法摘要
图像分类将图像的像素映射到线性分数(logits),用于判断图像是否属于 由模块发布者 选定的分类法中的类别。这允许模型使用者从发布者模块学习的特定分类中得出结论。(对于使用一组新类别的图像分类,通常会重复使用 图像特征向量 模型,并使用新的分类器。)
用于图像分类的可重复利用的 SavedModel 在根对象上有一个 __call__
方法,该方法将一批图像映射到一批 logits。它可以像这样使用
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].
在 Keras 中,等效项是
logits = hub.KerasLayer("path/to/model")(images)
输入遵循 图像输入 的一般惯例。模型文档指定了输入的 height
和 width
的允许范围。
输出 logits
是一个数据类型为 float32
且形状为 [batch_size, num_classes]
的单张量。 batch_size
与输入中的相同。 num_classes
是分类中的类数,这是一个特定于模型的常量。
值 logits[i, c]
是一个分数,预测示例 i
在索引为 c
的类中的成员资格。
这些分数是否要与 softmax(对于互斥类)、sigmoid(对于正交类)或其他内容一起使用,这取决于底层分类。模块文档应对此进行描述,并参考类索引的定义。
API 详情
可重复利用的 SavedModel API 还提供了一个 obj.variables
列表(例如,在不急切加载时进行初始化)。
支持微调的模型提供了一个 obj.trainable_variables
列表。它可能要求你传递 training=True
以在训练模式下执行(例如,对于 dropout)。一些模型允许可选参数覆盖超参数(例如,dropout 率;将在模型文档中描述)。该模型还可能提供一个 obj.regularization_losses
列表。有关详细信息,请参阅 可重复利用的 SavedModel API。
在 Keras 中,这是由 hub.KerasLayer
处理的:使用 trainable=True
对其进行初始化以启用微调,并且(在罕见的情况下应用 hparam 覆盖时)使用 arguments=dict(some_hparam=some_value, ...))
。
图像输入
这是所有类型的图像模型的共性。
将一批图像作为输入的模型会将它们作为数据类型为 float32
且形状为 [batch_size, height, width, 3]
的密集 4-D 张量接受,其元素是归一化到 [0, 1] 范围内的像素的 RGB 颜色值。这是从 tf.image.decode_*()
后跟 tf.image.convert_image_dtype(..., tf.float32)
获得的。
该模型接受任何 batch_size
。模型文档指定了 height
和 width
的允许范围。最后一个维度固定为 3 个 RGB 通道。
建议模型始终使用张量的 channels_last
(或 NHWC
)布局,并让 TensorFlow 的图优化器在需要时将其重写为 channels_first
(或 NCHW
)。