使用从TFhub保存的模型来提取特征向量



我一直在使用TF hub的不同模型来提取胎儿矢量:

module = hub.load('https://tfhub.dev/google/tf2-preview/inception_v3/feature_vector/4')
features = module(image)

我不太明白输入图像应该如何预处理。集线器中的每个模型都有以下通用指令:

输入图像1的颜色值应在[0,1]范围内,遵循常见的图像输入约定。默认情况下,输入图像的预期大小为高x宽=299 x 299像素,但其他输入大小也是可能的(在限制范围内(。其中";公共图像输入";是指向以下内容的链接:将一批图像作为输入的签名接受它们作为dtype float32和shape[batch_size,height,width,3]的密集4-D张量,其元素是归一化到范围[0,1]的像素的RGB颜色值。这是从tf.image.decode_*((后面跟着tf.image。convert_image_dtype(…,tf.float32(得到的。

这确实是我经常在网上看到的:

image = tf.io.read_file(path)
# Decodes the image to W x H x 3 shape tensor with type of uint8
image = tf.io.decode_jpeg(image, channels=3)
# Resize the image to for model
image = tf.image.resize(image, [model_input_size, model_input_size])
# 1 x model_input_size x model_input_size x 3 tensor with the data type of float32
image = tf.image.convert_image_dtype(image, tf.float32)[tf.newaxis, ...]

但是,颜色值预计在[0,1]范围内,在这种情况下,颜色在[0255]范围内并且应该按比例缩小:

image = numpy.array(image) * (1. / 255)

这只是一个常见的错误,还是TF文件不是最新的?

我在玩tf.keras.applications中的模型,并在github中阅读源代码。我注意到在一些模型(EfficientNet(中,第一层是:

x = layers.Rescaling(1. / 255.)(x)

但在某些模型中没有这样的层,而是使用实用程序函数将颜色缩放到[0,1]范围,例如tf.keras.applications.mobilenet.preprrocess_input.

那么,对于TFhub保存的模型来说,图像颜色在[0,1]范围内有多重要?

这只是TF Hub提出的一个惯例:"鼓励用于相同任务的模型实现共同的API,使得模型消费者可以在不修改使用它们的代码的情况下容易地交换它们,即使它们来自不同的发行商";(从这里(。

正如您所注意到的,google/tf2-preview/inception_v3/feature_vector/4的发布者决定输入图像";期望具有在[0,1]"范围内的颜色值;,而tensorflow/efficientdet/d1/1的发布者决定将CCD_ 1层添加到模型本身;值为[0255]"的[a张量];可以通过。因此,最终取决于出版商如何实现他们的模型。在任何情况下,当使用tfhub.dev中的模型时,预期的预处理步骤将始终记录在模型页面上。

最新更新