我应该使用VGG19的哪一层来提取特征

Which layer of VGG19 should I use to extract feature

现在,我想要图像的特征来计算它们的相似度。我们可以使用 tensorflow 中预训练的 VGG19 模型轻松获得特征。但是VGG19模型有很多层,我不知道应该用哪一层来获取特征。哪一层的输出适合这个问题?

# I think this how is correct to extract feature
model = tf.keras.application.VGG19(include_top=True, 
                                   weight='imagenet')
input = model.input
output = model.layers[-2].output
extract_model = tf.keras.Model(input, output)

据我推断,越接近上次输出,模型输出的特征就越强大。但是一些教程说 'use include_top=False to extract feature' (例如 Image Captioning with Attention TensorFlow

所以,我不知道应该使用哪一层。请尝试在此线程中帮助我。

可能会使用 include_top=False,因为最后 3 层(对于该特定模型)是完全连接的层,通常不是好的特征向量。如果模型直接输出一个特征向量,那你就不需要了。

大多数人使用最后一层进行迁移学习,但这可能取决于您的应用。例如,Gatys et. al.表明VGG的前几层对图像的风格敏感,后面的几层对内容敏感。

我可能会在超参数搜索中尝试所有这些,看看哪个性能最好。如果图像相似度是指内部包含的对象的相似度,我可能会从最后一层开始。