【问题标题】:can we extract VGG16/19 features for classes it was not trained on我们可以为未训练的类提取 VGG16/19 特征吗
【发布时间】:2020-12-14 21:22:21
【问题描述】:

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

预训练的 VGG16 和 VGG19 模型已在具有 1000 个类(例如 c1、c2、... '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.x keras deep-learning feature-extraction vgg-net


    【解决方案1】:

    是的,你可以,但是。

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

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

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

      【讨论】:

      • 因此,假设提取的特征表示“边缘和线是与这 1000 个类不完全相关的特征”,我们可以使用这些提取的特征作为类 c1001 和以上
      • 你可以估计它,但你的估计不会是正确的,因为由于训练时使用的 softmax 函数的性质,网络总是将你的新图像分配给一个属于的类到那 1000 个。你不希望这样,你希望你的网络使用它在这 1000 个类上学到的特性,使用它们来正确预测你的新 c1001、c1002、c1003。但是,要做到这一点,您需要在新课程上进行培训并使用迁移学习的概念,正如 Adrian Rosebrock 所解释的那样。
      • 例如,如果我在鸟类、猫和狗上训练我的网络,它会学习形状、边缘、线条等基本特征。我无法使用该网络对客厅椅子进行分类,但我可以迁移学习之前在鸟类、猫和狗方面训练时所学的特征,并在“living_room_chairs 和沙发”课程中重新训练。
      • 这里重要的是要了解,必须进行再培训才能正确预测您的新课程。
      • 亲爱的@Timbus Calin,最后一个疑问。实际上,请参阅修改后的问题
      猜你喜欢
      • 2019-11-14
      • 2020-12-10
      • 2013-07-28
      • 2023-03-14
      • 2016-05-11
      • 2021-07-25
      • 2017-07-28
      • 1970-01-01
      • 2016-03-14
      相关资源
      最近更新 更多