我正在使用Tensorflow Hub从图像中提取特征。即,我正在使用模块hub.Module("https://tfhub.dev/google/imagenet/resnet_v2_50/feature_vector/3")
。
因为我想从最后一个卷积层中提取特征,所以我有点困惑,应该从Resnet50
中使用哪个字典输出。例如:
image = ...
embedding_module = hub.Module("https://tfhub.dev/google/imagenet/resnet_v2_50/feature_vector/3")
output = embedding_module(image, signature="image_feature_vector",
as_dict=True)
现在,如果我们从该词典中打印出键,则有3种不同的键,我不知道它们之间的区别。
resnet_v2_50/block4/unit_3/bottleneck_v2
resnet_v2_50/block4/unit_3/bottleneck_v2/conv3
resnet_v2_50/block4
我感到困惑的是,它们所有的输出都具有相同的形状(7, 7, 2048)
,但是resnet_v2_50/block4/unit_3/bottleneck_v2
和resnet_v2_50/block4
的值不同于resnet_v2_50/block4/unit_3/bottleneck_v2/conv3
。有人可以指出我应该从Resnet50
的最后一个卷积层中使用哪个键进行特征提取,以及我列出的每个键之间的区别是什么?
谢谢!
答案 0 :(得分:1)
在 Tensorflow2 中,我们可以这样做。 如需更多文档:link
from tensorflow.keras.preprocessing.image import img_to_array
from tensorflow.keras.preprocessing.image import load_img
# as per updated docs
model = hub.KerasLayer("https://tfhub.dev/google/imagenet/resnet_v2_50/feature_vector/5")
imagePath = "......."
image = load_img(imagePath, target_size=(224, 224))
image = img_to_array(image)
image = np.expand_dims(image, axis=0)
embeddings = model(image)
答案 1 :(得分:0)
根据the official manual,我们可以直接使用module(xxx)
获得结果。
对我来说很好
module = hub.Module("https://tfhub.dev/google/imagenet/resnet_v2_50/feature_vector/3")
features = module(images)
实际上,我也在尝试找出如何通过name
来获得正确的最后一层,而不是一些缺乏灵活性的预先提供的API。