首页 > 解决方案 > 我们可以为未训练的类提取 VGG16/19 特征吗

问题描述

我有一个关于为我的实验提取 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/上的文章中,我引用了以下内容 -

在执行特征提取时,我们将预训练的网络视为任意特征提取器,允许输入图像向前传播,在预先指定的层停止,并将该层的输出作为我们的特征

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

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

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

我提供一个案例研究供参考:

Animal with Attribute dataset(见https://cvml.ist.ac.at/AwA2/)是一个非常流行的数据集,包含 50 个用于图像识别任务的动物类。作者为上述数据集图像提取了 ILSVRC 预训练的 ResNet101 特征。这个 ResNet 101 网络已经在 1000 个 imagenet 类上进行了预训练(不同的 imagenet 类可在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 类的图像的表示,并在其他分类器中使用它们以及它们的标签。

标签: python-3.xkerasdeep-learningfeature-extractionvgg-net

解决方案


是的,你可以,但是。

第一个全连接层中的特征假设编码非常普遍的模式,如角度、线条和简单的形状。您可以假设这些可以在其训练的类集之外泛化。

但是,有一个但是 - 发现这些特征可以最大限度地减少具有 1000 个类的特定分类任务的错误。这意味着,不能保证它们有助于分类任意类。


推荐阅读