我们可以为 类 提取 VGG16/19 特征吗?

can we extract VGG16/19 features for classes it was not trained on

我有一个关于为我的实验提取 VGG16/VGG19 特征的问题。

预训练的 VGG16 和 VGG19 模型已经在具有 1000 类(例如 c1、c2、... c1000)的 ImageNet 数据集上进行了训练,通常我们从第一层和第二层完全连接的层中提取特征指定('FC1' 和 'FC2');然后将这些 4096 维特征向量用于计算机视觉任务。

我的问题是,我们可以使用这些网络来提取不属于上述 1000 个图像的特征吗 类?换句话说,我们可以使用这些网络来提取标签为 c1001 的图像的特征吗?请记住,c1001 不属于最初训练这些网络的 Imagenet 类。

https://www.pyimagesearch.com/2019/05/20/transfer-learning-with-keras-and-deep-learning/ 上的文章中,我引用了以下内容 -

When performing feature extraction, we treat the pre-trained network as an arbitrary feature extractor, allowing the input image to propagate forward, stopping at pre-specified layer, and taking the outputs of that layer as our features

从上面的文字来看,对于图像是否一定属于Imagenet之一没有任何限制类。

请抽出一些时间来揭开这个谜团。

在研究论文中,作者只是简单地声明他们使用了从在 Imagenet 数据集上预训练的 VGG16/VGG19 网络中提取的特征,而没有提供任何进一步的细节。

我举个案例供参考:

具有属性数据集的动物(参见 https://cvml.ist.ac.at/AwA2/) is a very popular dataset with 50 animal classes for image recognition task. The authors have extracted ILSVRC-pretrained ResNet101 features for the above dataset images. This ResNet 101 network has been pre-trained on 1000 imagenet classes (different imagenet classes are available at https://gist.github.com/yrevar/942d3a0ac09ec9e5eb3a#file-imagenet1000_clsidx_to_labels-txt)。

另外,AWA类如下:

antelope,  grizzly+bear, killer+whale, beaver, dalmatian, persian+cat, horse
german+shepherd, blue+whale, siamese+cat, skunk, mole, tiger, hippopotamus, leopard, moose, spider+monkey, humpback+whale, elephant, gorilla, ox, fox, sheep
seal, chimpanzee, hamster, squirrel, rhinoceros, rabbit, bat, giraffe, wolf, chihuahua, rat, weasel, otter, buffalo, zebra, giant+panda, deer, bobcat, pig, lion, mouse, polar+bear, collie, walrus, raccoon, cow, dolphin

现在,如果我们将数据集中的 类 与 1000 个 Imagenet 类 进行比较,我们发现 类 像海豚、牛、浣熊、山猫、蝙蝠、海豹、绵羊、马、灰熊、长颈鹿等不在 Imagenet 中,作者仍然继续提取 ResNet101 特征。我相信提取的特征是可概括的,这就是为什么作者认为这些特征对 AWA 图像有意义的表示。

你对此有何看法?

我们的想法是获取不属于 ImageNet 类 的图像的表示,并将它们与它们的标签一起用于其他分类器。

是的,你可以,但是。

第一个 fully-connected 层中的特征假设编码非常普遍的模式,如角度、线条和简单的形状。您可以假设这些可以在其训练的 class 集之外进行推广。

有一个但是,然而 - 发现这些功能可以最大限度地减少特定 classification 任务的 1000 classes 错误。这意味着,不能保证它们有助于 class 化任意 class。

对于仅提取特征,您可以在预训练的 VGG/other CNN 中输入您想要的任何图像。但是,为了训练的目的,您必须执行下面所述的其他步骤。

抽取的特征是通过对那1000个类进行专门训练确定的,属于那1000个类。您可以使用您的网络预测不属于这 1000 张 类 的图像,但在下面的段落中,我将解释为什么这不是所需的方法。

这里要概述的关键点是,提取的集合特征可用于detect/determine照片中其他对象的存在,但不能“准备好”/“开箱即用” .

例如,边和线是不仅与那 1000 个 类 相关的特征,而且还与其他特征相关,因此它们是有用的通用特征。

因此,您可以使用“迁移学习”,在您自己的图像(数据集)上训练,例如 c1001、c1002、c1003。

但是请注意,在使用网络预测新图像(新 类)之前,您需要在自己的集合上进行训练。迁移学习指的是使用一组已经 gathered/learned 的特征,它可以适用于另一个问题,但你需要训练你的“新问题”,比如 c1001、c1002、c1003。

对于图像 class化,您可能需要使用 c1001 class 标签的相关 classes 微调模型。 但是,如果您打算将其用于无监督学习并且仅将其用于特征提取部分,则无需重新训练模型。您可以使用 ImageNet 中现有的 pre-trained 权重并提取特征,然后使用该权重作为 VGG16/19 将在其初始层中概括较低级别的特征,最后几层仅用于 class 化目的。 所以基本上预训练模型可以用于无监督和特征提取目的而无需重新训练。