ECCV2018 | 细粒度分类:多注意力多类别约束

转自 HongYuSuiXinLang的博客,谢谢博主

https://blog.csdn.net/HongYuSuiXinLang/article/details/82854254

方法

本文提出方法可以高效精确地获取判别区域尽管只是在图像级别的标签上训练。如下图所示,本文方法框架有两部分组成:1)压缩-多扩展(OSME)模块,轻微增加计算量(也不算太轻),从多个注意力区域提取特征。2)多注意力多类别约束(MAMC),加强注意力区域之间的联系。本文方法比其他方法具有端到端单阶段的优势。
在这里插入图片描述

OSME

也是一种弱监督下的部件定位的注意力方法。先前工作总结:1)部件检测。往往将部件检测和特征提取分开,计算开销增大。2)软注意力,来自响应可视化。
如上图,我们的框架以ResNet50作为baseline, SEnet通过压缩-扩展操作对输出特征图再校准。为了产生P个特定注意力的特征图,我们从SEnet延伸,把一次扩展操作换成多次扩展操作。
在压缩操作中,我们聚合特征图空间产生通道级的描述子,和通道数一致。全局平均池化是一种简单高效的通道统计特征描述方法。
在扩展操作中,对通道描述子施加多个独立门机制,产生多个注意力图。门机制中是FC+Relu+FC+Sigmoid,由于sigmoid特性,其输出对通道间的非互斥关系进行了编码。我们利用其输出对起初Resnet50的输出进行再次加权,得到特定注意力图。
为了对每个特定注意力图进行特征提取,将这些特定注意力图展平成向量之后输入进FC层。
简单而言,本文通过对baseline输出全剧平均池化之后进行多次门操作获得P个特征向量。并认为这些特征向量是对不同非互斥部件/特征的聚类(这里还不能称为判别性特征)。

MAMC

下面解决的问题可以描述为,如何让以上模块产生的注意力特征指向类别,产生判别性注意力特征。先前方法总结: 1)把以上注意力特征合并进行softmax loss(指交叉熵损失函数),softmax loss不能掌握两两注意力特征之间的关系,2)递归搜索机制,会把初代误差迭代方放大。还要使用强化学习以及一些复杂的初始化方法。我们的方法在训练中增强两两部件之间的关系。这种方法就是多注意力多类别机制。
训练集我们有图像-类别对,为了对图内和类内注意力图进行建模,我们重新组织输入Batch。参考文章 Improved Deep Metric Learning with Multi-class N-pair Loss Objective中的N-pair采样方法。具体而言就是,每个batch中有N对图片,每对图片来自同一个子类,一个成为anchor,另一个成为此anchor的正样本,然后给出他们所属类别。那么经过OSME模块,一个同类对样本就各自产生P个注意力特征向量。
在这里插入图片描述
那么,每个batch就有2N个样本, 经过OMSE产生2NP个特征向量,我们相对这些向量进行聚类。举例来说。我们选一个特征向量,是第i类anchor的第p个特征向量。我们可以把剩余特征向量分成4组:
同注意力门同类别:sasc,就是其正样本同一个注意力门的特征向量
同注意力门异类别;sadc
不同注意力门同类别;dasc
不同注意力门异类别;dadc
我们通过度量学习框架探寻4组间关系。

sasc:

这是选取的anchor最为相似的特征向量,其负样本就是sadc并dasc并dadc.

sadc:

取自与anchor同意注意力门的不同各类特征,负样本是dadc.

dasc:

取自anchor不同注意力门的同类,负样本是dadc.
以下是度量学习损失函数,m是阈值。就anchor与正样本的距离要比距负样本距离小至少一个m.
在这里插入图片描述

以上三个约束作用过程如下图。
在这里插入图片描述
本文方法结合近期度量学习成果,使用N-pair loss 做loss
在这里插入图片描述

总之,总loss就是softmax loss 和n-pair loss:
在这里插入图片描述
以下是本方法在细分类benchmark上跑分以及与其他方法对比:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zsx1713366249/article/details/82937043