细粒度分类的一种方法是基于定位-识别,又可以继续分为强监督和弱监督两种。这篇文章是ECCV 2014的一篇强监督细粒度图像检测。

主要贡献:提出了一个细粒度分类模型,该模型学习整个对象和部分检测器,在它们之间强制学习几何约束,并从姿势规范化表示中预测细粒度类别,在端到端评估中,能够优于最先进的细粒度分类方法,而无需在测试时使用边界框。

摘要

  目前已有的姿势规范化表示的方法,由于对象检测的困难,通常在测试时使用边界框标注。

  文章提出了一个细粒度分类模型,该模型通过利用基于自底向上区域建议计算的深层卷积特征来克服这些限制。该方法学习整个对象和部分检测器,在它们之间强制学习几何约束,并从姿势规范化表示中预测细粒度类别。在Caltech的UCSD bird数据集上的实验证实,我们的方法在端到端评估中,能够优于最先进的细粒度分类方法,而无需在测试时使用边界框。

Introduction

  细粒度图像分类的挑战——相关的类别中某些细节存在细微的差异。通常需要以物体的姿势作为条件,才能进行可靠的识别。这里举了一个例子,人脸识别中表现最好的方法就是从脸部标志的位置提取特征。

  因此,定位对象中的part,对于建立对象实例之间的对应关系,以及忽略对象的姿势变化和摄影机视角位置至关重要。以前的工作已经研究了基于部件(part-base)的方法来解决这个问题。许多姿势规范化表示的瓶颈实际上是精确的部件定位。接着举出几个工作:Poselet和DPM,这些工作在测试时也需要给定标注框。

端到端的细粒度分类系统,在测试时不需要物体的标注框,并且可以实现与先前报告的方法相媲美的性能。

统一的方法,使用同样的深度卷积表示来进行检测和part描述。

stanfordCoreNLP中细分的实体类型包括 细分模型_python

Related Work 

  这部分分为三块,分别介绍了一下基于部分的检测模型和姿势定位、细粒度分类和CNN。

Part-based R-CNNs 

  我们将R-CNN扩展到检测物体和在几何先验下定位其中的部分。通过对感兴趣对象的各个语义部分的位置(例如,动物类的头部位置)进行假设,可以对细微的外观差异进行建模,这些差异往往出现在相对于这些部分大致固定的位置。

  在R-CNN方法中,对于特定对象类别,具有CNN特征描述符

stanfordCoreNLP中细分的实体类型包括 细分模型_深度学习_02

的候选检测

stanfordCoreNLP中细分的实体类型包括 细分模型_权重_03

被分配一个

stanfordCoreNLP中细分的实体类型包括 细分模型_深度学习_04

的分数,其中

stanfordCoreNLP中细分的实体类型包括 细分模型_细粒度_05

是对象类别的SVM权重的学习向量。在我们的方法中,我们假设一个强监督设置(例如,[3]),其中在训练时,我们不仅对完整对象,而且对固定的语义部分集

stanfordCoreNLP中细分的实体类型包括 细分模型_细粒度_06

也有ground truth边界框标注。  给定这些部分标注,所有的对象和它们的每个部分都在训练时被当作独立的对象类来处理:我们在局部建议下提取的特征描述符上训练一个一对多的线性SVM,区域与ground truth对象或部件边界框的≥0.7重叠被标记为该对象或部件的positives,区域与任何ground truth区域的≤0.3重叠被标记为negatives。因此对于单个对象类别,我们学习整个对象(“root”)的SVM权重

stanfordCoreNLP中细分的实体类型包括 细分模型_细粒度_05

和部分

stanfordCoreNLP中细分的实体类型包括 细分模型_细粒度_06

各自的SVM权重

stanfordCoreNLP中细分的实体类型包括 细分模型_python_09

。在测试时,对于每个区域proposal窗,我们从所有的root和part SVM计算分数。当然,这些分数并不包含任何关于对象及其部分如何受到几何约束的知识;例如,在没有任何附加约束的情况下,鸟头探测器可能会在鸟头探测器所在区域之外检测。因此,我们最终的联合对象和部分假设是使用几何评分模型计算的,评分函数将在下一节中详细介绍,它强制执行直觉上想要的属性,即姿势预测与训练时观察到的姿势统计一致。

3.1 几何约束

  令

stanfordCoreNLP中细分的实体类型包括 细分模型_pytorch_10

表示对象

stanfordCoreNLP中细分的实体类型包括 细分模型_python_11


stanfordCoreNLP中细分的实体类型包括 细分模型_权重_12

个部分

stanfordCoreNLP中细分的实体类型包括 细分模型_pytorch_13

的位置(边界框),在训练数据中有标注,但在测试时未知。我们的目标是在以前没见过的测试图像中推断对象位置和part位置。给定对象和parts的R-CNN权值

stanfordCoreNLP中细分的实体类型包括 细分模型_深度学习_14

,我们要得到相应的检测器

stanfordCoreNLP中细分的实体类型包括 细分模型_细粒度_15

,其中每个检测器的分数是

stanfordCoreNLP中细分的实体类型包括 细分模型_权重_16

,其中

stanfordCoreNLP中细分的实体类型包括 细分模型_深度学习_17

是sigmoid函数,

stanfordCoreNLP中细分的实体类型包括 细分模型_深度学习_02

是从位置

stanfordCoreNLP中细分的实体类型包括 细分模型_权重_03

提取出的CNN特征描述器。我们通过解决接下来的优化问题来推断对象和parts的联合配置。

stanfordCoreNLP中细分的实体类型包括 细分模型_python_20

  其中

stanfordCoreNLP中细分的实体类型包括 细分模型_细粒度_21

定义了一个对象和root边界框的联合配置上的评分函数。我们考虑并报告了几种配置评分函数∆的定量结果, 下文将详细介绍。

  Box Constraints:一种直观的定位对象和部件的方法是考虑每个可能的对象窗和对象内的所有窗,并选择具有最高部分分数的窗。在这种情况下,我们定义了评分函数

stanfordCoreNLP中细分的实体类型包括 细分模型_深度学习_22

  其中:

stanfordCoreNLP中细分的实体类型包括 细分模型_深度学习_23

  在我们的实验中,

stanfordCoreNLP中细分的实体类型包括 细分模型_细粒度_24

=10。框约束的大概意思就是,看每个部件(part)的边界框落在整个对象的边界框

stanfordCoreNLP中细分的实体类型包括 细分模型_权重_25

外面的像素值是否大于规定的 

stanfordCoreNLP中细分的实体类型包括 细分模型_细粒度_24

值,如果大于,说明这个边界框里的内容落在对象外面太多了,它可能不属于这个物体的一部分,故取0,反之取1

  Geometric Straints:由于单个部件检测器不够完美,因此具有最高单个部件检测器分数的窗并不总是正确的,尤其是在存在遮挡的情况下。因此,我们考虑几个评分函数来执行相对于对象位置的部件布局的约束,以过滤出不正确的检测。我们定义:

stanfordCoreNLP中细分的实体类型包括 细分模型_深度学习_27

  其中

stanfordCoreNLP中细分的实体类型包括 细分模型_pytorch_28

是一个对给定训练数据的part

stanfordCoreNLP中细分的实体类型包括 细分模型_细粒度_29

的评分函数。我们的实验中使用三个

stanfordCoreNLP中细分的实体类型包括 细分模型_深度学习_30

的定义:

stanfordCoreNLP中细分的实体类型包括 细分模型_细粒度_31


  上标MG的:将带有

stanfordCoreNLP中细分的实体类型包括 细分模型_pytorch_32

分量的高斯模型混合拟合到部件

stanfordCoreNLP中细分的实体类型包括 细分模型_细粒度_29

的训练数据,本实验中我们设定

stanfordCoreNLP中细分的实体类型包括 细分模型_pytorch_32

=4

  上标NP的:在

stanfordCoreNLP中细分的实体类型包括 细分模型_深度学习_35

的外观空间中查找K个最近邻,其中

stanfordCoreNLP中细分的实体类型包括 细分模型_python_36

是root检测器的top-计分窗。然后,我们将高斯模型拟合到这些K个近邻。在我们的实验中,我们设定K=20。图2展示了最近邻的一些示例。  DPM[17]使用每个组件的高斯先验值对变形成本进行建模。R-CNN[21]是一个单组分模型,推动了

stanfordCoreNLP中细分的实体类型包括 细分模型_python_37


stanfordCoreNLP中细分的实体类型包括 细分模型_pytorch_38

的定义。我们的

stanfordCoreNLP中细分的实体类型包括 细分模型_pytorch_38

定义受Belhumur等人[4]的启发,但不同之处在于——我们根据外观而非几何对最近邻进行索引。 

stanfordCoreNLP中细分的实体类型包括 细分模型_python_40

图2. 对几何约束

stanfordCoreNLP中细分的实体类型包括 细分模型_pytorch_38

的图解。在每一行中,第一个列是使用R-CNN边界框检测的测试图像,接下来的几张是训练集中的top 5最近邻,使用pool5特征和cosine距离度量进行索引排序。

3.2 细粒度分类

  我们从局部以及整个对象中提取语义特征。最后的特征表示是

stanfordCoreNLP中细分的实体类型包括 细分模型_细粒度_42

,其中

stanfordCoreNLP中细分的实体类型包括 细分模型_权重_25


stanfordCoreNLP中细分的实体类型包括 细分模型_深度学习_44

是全部对象和部分位置的预测,而

stanfordCoreNLP中细分的实体类型包括 细分模型_深度学习_45

是第

stanfordCoreNLP中细分的实体类型包括 细分模型_权重_46

部分的特征表示。   在一组实验中,我们从ImageNet预先训练的CNN中提取深度卷积特征

stanfordCoreNLP中细分的实体类型包括 细分模型_深度学习_45

,类似DeCAF[14]。为了使深度CNN衍生的特征对细粒度鸟类分类的目标任务更具辨别力,我们还对原始幼体图像的ground truth边界框中的ImageNet预训练CNN进行了微调,以用于200路鸟类分类任务。特别地,我们将原来的1000路fc8分类层替换为一个新的200路fc8层,该层具有随机初始化的权重,该权重来自于一个µ=0且σ=0.01的高斯分布。我们按照R-CNN[21]的建议设置微调学习率,将全局速率初始化为初始ImageNet学习率的十分之一,并在整个训练过程中将其降低10倍,但新fc8层的学习速率为全局学习速率的10倍。对于整个对象边界框和每个部分边界框,我们独立微调ImageNet预先训练的CNN,以便对扭曲为227×227网络输入大小的每个区域的ground truth breed进行分类,输入的每个边缘上始终有16个像素用作R-CNN中的上下文[21]。在测试时,我们使用为特定的整个对象或部分微调的网络来提取预测的整个对象或部分区域的特征。   为了训练分类器,我们使用一对多线性支持向量机,使用最终的特征表示。对于新的测试图像,我们使用带有几何评分函数的整体和部分检测器来获取检测到的部分位置,并使用特征进行预测。如果在测试图像的任何地方都没有检测到特定的零件i(由于所有proposals都低于部件检测器的阈值,设置为实现高召回率),我们将其特征

stanfordCoreNLP中细分的实体类型包括 细分模型_深度学习_45

=0(零向量)。

4 Evaluation

数据集:Caltech-UCSD CUB200-2011 鸟类数据集

语义划分:头和身体

提取深度特征和微调我们的CNN:开源包Caffe 

物体和部件检测:Caffe reference模型

训练R-CNN物体和部件检测和图像表示分类:fc6

stanfordCoreNLP中细分的实体类型包括 细分模型_pytorch_38

的最近邻计算:pool5 和cosine距离度量 

stanfordCoreNLP中细分的实体类型包括 细分模型_pytorch_50

5 Conclusion

我们提出了一个联合目标检测和部件定位系统,能够实现最先进的细粒度目标识别。我们的方法学习检测器和零件模型,并在零件之间和对象框架中强制学习几何约束。我们的实验结果表明,即使有一个非常强大的特征表示和目标检测系统,它是非常有益的额外模型的一个对象的姿态通过部分的困难

语义相似度高的类别之间的细粒度区分任务。在这项工作的未来扩展,我们将考虑的方法,共同建模在训练时间的对象类别及其各部分和变形成本。我们还计划探索弱监督设置,在该设置中,我们仅从对象边界框注释中自动发现和建模part作为潜在变量。最后,我们将考虑放宽对小部分的选择性搜索的使用,并采用密集窗口采样。