DFL-CNN

Learning a Discriminative Filter Bankwithin a CNN for Fine-grained Recognition --2018cvpr

GitHub:https://github.com/songdejia/DFL-CNN

1.引言

端到端的细粒度识别可以分为两类:一个是定位-分类子网络和端到端特征编码。

之前的多阶段网络利用低层CNN特征发现有判别性的区域和语义部分,然后由它们构造中层特征来分类。与两个基准(1)与传统的手工特征,低层CNN效果更好(2)CNN学习中层特征的能力还是有限制的。

第一类方法,定位-分类子网络,包含了由定位网络辅助的分类网络。分类网络的中级学习是由定位网络中定位信息(部位定位和分割掩码)加强的。早期工作是依赖于数据集的额外部位标注信息,最近的只需要分类标签。不管标注信息,这些方法的的共同当即就是先寻找到匹配的部位在比较它们的外观。第一步要求对象类间的语义部分可以共享,鼓励不同部位之间的表示相似,但是,为了有区分性,第二步鼓励在不同类别之间部位表示是不同的。这种微妙的冲突可能需要在定位网络和分类网络进行权衡,这可能会降低单个集成网络的分类表现。这种权衡也涉及到实践,在训练时,这两个网络往往分开交替训练,因此网络会变得复杂。

第二类方法,端到端的特征编码增强了CNN中层学习能力通过卷积特征高阶统计编码。端到端的高阶统计编码的需求变得明显。但与定位分类自网络比较来说,端到端的网络虽然有效,但可解释性和在严格非严格领域的性能很难保持一致性。

本篇文章面对端到端网络提出了一些解决策略。我们主要的贡献是在不需要额外部位标注和回归框下针对端到端CNN网络明确的学习有判别性的mid-level patches。实现是通过1×1的卷积核作为小的‘’部位检测子“设计一个非对称的、多支路的结构来利用patch-level信息和全局外观表示,并且引入了非随机初始化滤波器监督去激活特征块的滤波器。我们的判别性特征块不同于定位-分类子网络的特征块,比如不需要雷剑的分享就能获得判别性表征。因此,我们的网络关注于分类并且避免了识别与定位的权衡。一般的,一个卷积特征训练为一个判别性特征检测子只需要对一类的某个特定区域产生高回应。

这个框架通过引入一个具有判别性的过滤器组来提高传统CNN网络的中层学习能力。我们的框架也保持原先两种方式的优点:

简单有效。

可解释性。

跨不同可视化和网络表现得一致性。

2.最近工作

3.学习判别性特征检测子作为过滤器组

我们把1×1的卷积滤波器作为一个小的块检测子。如图一。


          我们把特征图里的C×1×1的向量作为小块的表示并且1×1的卷积滤波器作为特征块检测子。一个具有判别性的块可以通过对特征图进行1×1的卷积和对响应图的全局最大池化。

如果,我们通过卷积池化等操作获得C×H×W的,每个C×1×1的跨通道向量在固定空间位置代表了在原图中的一个小块。假定我们学习到1×1的滤波器对某一具有判别性区域有高响应。通过用这个滤波器对特征图进行卷积获得热力图。因此,一个具有判别性区域可以通过选择热力图中最大值来获得。这个操作叫做全局最大池化。

为了将这个idea放到特征图中,有两个要求:

①因为特征区域在细粒度图像中是高度定位的,因此我们需要一个较小的感受野,比如C×1×1的向量代表了一个小的块在原图中。

②因为细粒度图像识别需要精确的块定位,stride(跨步)在原图的相邻块间要小。

在早期网络中,卷积核和跨步都比较大。。。。

在下面,我们描述了1×1卷积核是如何学习到判别性特征块检测子的。图2是网络架构。


一共有三条线在我们的设计中:一个非对称结构的两个支路去学习局部和全局特征(3.1部分)卷积核监督去确保判别性特征检测子(3.2)和非随机初始化去加速网络迭代(3.3)。之后在(3.4)扩展我们的网络去处理不同尺度的块。

3.1 非对称结构的两条支路

核心组件如图一所示。这个组件后接分类器(比如全连接层和softmax层)形成网络判别的P-stream,其中预测是通过判断判别性块检测子的响应来预测的。P-stream是使用Conv4_3的输出,并且对这个特征图使用较小的感受野,一片的大小为92×92,跨步是8。

细粒度图像识别还要依赖于全局形状和表观,所以另一个支路保存的是更深的卷积核和全连接,第一个全连接编码全局信息通过线性结合整个卷积特征图。因为这个支路关注于全局信息,所以我们称之为G-stream。

3.2 判别性监督/卷积核监督

使用上述网络结构不能够完全的保证得到判别性区域。为了学到特定类别的特征判别性检测子,我们在softmax层后引入一个跨通道的池化层直接对1×1的卷积核进行监督。如图三。该部分就是图二的side branch。


 我们的卷积监督就是在conv6时把卷积核分为M组,M是类别数。第i组每个最大的响应的平均值就是i类判别patch的影响。这个池化向量送到softmax loss layer去进行监督判别性patch的学习。


卷积滤波监督的这样实现的:假设我们有M类别,每个类别有K个判别性patch检查子,那么卷积核有KM个,通过GMP获得最大响应后,得到KM维向量。跨通道平均池化通过K维来对某个类别的响应,就会有M维。


通过把池化向量加到M-way softmax loss里,我们鼓励卷积从训练时找到判别性patch,因为它们的平均卷积响应很大。我们使用平均而不是卷积是为了让一个类别的所有卷积核都一个平均的响应。

由于在softmax loss和1*1卷积层中,没有可以学习到的参数,我们直接通过损失函数调整滤波器权重。之前的工作在side loss和主网络中有学习的权重。主网络只收反向传播和梯度的影响,这和以前的网络不同。

3.3 层的初始化

如果随便的初始化,容易收敛到差的局部最小。所以,为了克服这个问题,采用非随机初始化的方法。

3.4 多尺度

通过最近的实验,并且代码由于并非作者所作,因此并未达到论文的效果。如果,你有别的见解,欢迎交流。

你可能感兴趣的:(DFL-CNN)