细粒度分析--WS-DAN

论文:https://arxiv.org/pdf/1901.09891.pdf
代码:https://github.com/GuYuc/WS-DAN.PyTorch
论文主要训练流程及思想为:(1)生成attention maps;(2)Bilinear Attention Pooling(BAP); (3)loss设计
细粒度分析--WS-DAN_第1张图片
(1)生成attention maps
①首先使用Inceptionv3等普通网络作为主干网络提取特征,得到特征图F,
在这里插入图片描述
②然后对F进行1*1卷积操作,得到attention map,其中,这里的M为一个经验值。
细粒度分析--WS-DAN_第2张图片
实验证明,attention map数越多,模型精度会越高,但是直到增加到32时,模型精度趋于稳定,所以,论文中,便将M设置成32.
32个attention map表示原图目标中32个不同的部位,那么就是一张原图,会生成32张attention maps。
细粒度分析--WS-DAN_第3张图片
(2)BAP
细粒度分析--WS-DAN_第4张图片
①将F与每个channel 的attention map逐元素相乘(element-wise multiplication),得到32个Part Feature Maps组合。
在这里插入图片描述
Ak表示第k个通道的attention map。
②对每个Part Feature Maps组合进行GAP,或者GMP,或者卷积操作,进行降维。
在这里插入图片描述
每组Part Feature Maps中的一张Part Feature Map,最终降维变成一个数,那么一组Part Feature Maps通过降维操作(论文里使用GAP)就变成一组一维tensor。也就是说,一张attention map与F融合后,最终成为一组一维tensor。然后将这32张attention map与F融合后的结果拼接(concatenate)在一起,便形成了最后线性分类层的输入特征Feature Matrix。
(3)loss 设计
得到Feature Matrix之后,再接个loss,就能完成网络构建了。论文中总共有2处loss,一处为普通分类的交叉熵损失函数,论文中定义为预测粗粒度概率(Predict coarse-grained probability)的函数;另一处为均方差损失函数,文中定义为attention归一化约束(attention Regularization),这个loss,对辅助部分,即通过attention maps增强得到的数据不使用,如下图所示:
细粒度分析--WS-DAN_第5张图片
fk为对每个Part Feature Maps组合进行GAP降维后的结果,表示原图第k部分的attention map与F融合的结果;初始值为0,是一个学习出来的tensor,其表示的意义为objects part`s feature center.学习更新过程为:
在这里插入图片描述
整个LA设计的初衷为:在细粒度分类中,objects之间的差别一般在于物体局部的某个part,所以,我们希望生成的各个attention map不要有太大差异,比如对于鸟类品种的细粒度分类,我们希望,生成的所有attention map大多数在鸟头部的part。所以设计的LA就是能够使得每个特征图能够固定到每个parts的中心。
辅助部分
辅助部分便是对attention maps进行数据增强。论文中存在两处,一处为attention cropping;另一种为attention Dropping。首先看这两辅助部分给模型结果带来的优势。
细粒度分析--WS-DAN_第6张图片
(1)attention cropping
对归一化之后的attention maps进行兴趣域选取,所截取的兴趣域文中叫Crop Mask。通过设置一个超参数,将归一化的attention map中,像素值大于这个超参数的值置1,小于这个超参数的值置0。这里设置为1的区域我们重点关注的FGVC细节区域。得到这块区域之后,对这块区域进行上采样到原图大小,也就是扩大细节方式,作为增强的数据集,参与模型训练。
(2)attention dropping
这种方式与attention cropping正好相反,attention dropping的过程为将Crop Mask的区域从原图中eliminated去,将剩下的其他parts作为训练集参与模型训练。

你可能感兴趣的:(细粒度分类)