Harmonious Attention Network for Person Re-Identification
-
- 1、介绍
- 2、作者的方法
- 3、实验细节
- 4、实验结果
1、介绍
现有的行人重识别算法要么假设行人的bounding box对齐的很好,要么依赖有限制的、比较死板的注意力机制来校准没有对齐的图片。对行人大的姿态变化以及检测器检测错误的效果并不好。作者提出了一个HA-CNN的方法(harmonious attention cnn),具有以下优点:
- 网络参数量较少
- 联合学习全局特征和局部特征
- 联合学习软注意力和硬注意力
- 软、硬注意力之间进行了交互学习
文中无时不刻不在体现减少参数、简化网络的思想,train from scratch,便于训练,没有采用任何数据增强的手段和预训练网络,结果却非常优秀。
2、作者的方法
2.1、网络概述
该网络是一个多分支(branches)网络,分为上下两大部分。上面第一部分包括一支网络,用来提取输入图片的全局特征。下面的第二部分包括T支网络,用来提取局部特征。每支网络的基本单位都是Inception-A/B两种结构,不改变size,只改变depth。
Global branch:
输入图片的尺寸是160x64x3,经过一个(3x3,32,stride = 2)的卷积层后变为80x32x32,然后经过一个Inception-A模块,一个Inception-B模块后变为80x32xd1 。然后经过第一个Harmonious Attention模块乘以空间、深度注意力后变为40x16xd1。同时将获得的硬注意力位置信息(T个box的坐标)反馈到两个Inception模块之前,用于传递给局部特征支路。40x16xd1再经过一个Inception-A模块,一个Inception-B模块后变为40x16xd2 。然后经过第二个Harmonious Attention模块乘以空间、深度注意力后变为20x8xd2。同时将获得的硬注意力位置信息(T个box的坐标)反馈到两个Inception模块之前,用于传递给局部特征支路。20x8xd2再经过一个Inception-A模块,一个Inception-B模块后变为20x8xd3 。然后经过第三个Harmonious Attention模块乘以空间、深度注意力后变为10x4xd3。同时将获得的硬注意力位置信息(T个box的坐标)反馈到两个Inception模块之前,用于传递给局部特征支路。最后10x4xd3通过global average pooling变为1xd3,再经过一个fc变成512维的全局向量特征。
Local branches:
多支网络组成,用来提取局部特征。每支网络分别提取T部分中的一个部分的特征,每支网络共享d1、d2、d3的权重。每支网络最开始的输入来自第一个卷积层得到的80x32x32特征图的有多条(T branches,T=4)的1/T,即24x28x32。然后经过第一个Inception-B模块,变成12x14xd1,和global branch对应的特征图40x16xd1的对应位置(后面的硬注意力反馈回来的位置信息)、1/T大小相加(即是Cross-Attention Interaction Learning)。这样作者解释说利用了global branch的表达能力,使local branch不丢失表达能力的情况下能够减少卷积层数,降低参数量。因为global branch对应的特征图的1/T其实对应的是原图同样的部分(如都是第二个矩形部分,因为global branch经过的卷积层多,和local branch相加就可以使local branch在经过卷积层少的情况下仍然有较好的表达能力)。相加后12x14xd1经过第二个Inception-B模块,变成6x7xd2,同样和global branch特征图对应位置、1/T大小相加。相加后6x7xd2经过第三个Inception-B模块,变成3x4xd3,同样和global branch特征图对应位置、1/T大小相加。再经过global avg pool后变成1xd3,T个1xd3连接在一起后再经过fc变成512维的局部向量特征。
向量特征:
最后,512维的全局向量特征和512维的局部向量特征连接在一起构成1024维的向量特征。
2.2 Harmonious Attention模块
软注意力关注的是pixel (空间上、通道上),硬注意力关注的是region(空间上)。Harmonious attention分成软空间注意力、软通道注意力、硬注意力三部分。作者考虑到空间、通道注意力的相对独立性,把软空间、软通道注意力分开,在保证效果的同时很好地减小了复杂度和参数量。
软空间注意力:绿色框是软空间注意力,对于hxwxc的输入,首先在通道上进行avg pool,得到hxw (此步骤0params)。然后使用3x3 kernels = 1 stride=2卷积,得到h/2 x w/2(此步骤3x3x1x1=9params)。然后进行双线性插值,恢复hxw。然后进行1x1 kernels = 1 stride=1的卷积,输出hxwx1的软空间注意力权重图。
软通道注意力:首先把h x w x c的输入经过global avg pool变为1x1xc,然后经过1x1 kernels = c/r stride=1的卷积变为1x1xc/r,再经过1x1 kernels = c stride=1的卷积变为1x1xc的输出。(总参数量2c^2 /r,如果直接进行1x1 kernels=c卷积则参数量c ^ 2)。
然后我们把软空间注意力权重图和通道注意力权重图相乘得到h x w x c的软注意力权重图。
硬注意力:
在硬注意力中学习了一个矩阵(5)。通过改变尺度参数(sh,sw)、位置参数(tx,ty)的值,能够进行图像裁切、翻译、缩放等一系列操作。为了降低复杂度,作者固定了(sh,sw) (l1:24x28,l2:12x14,l3:6x7),学习T个(tx,ty),即输出一个2T向量即可。作者将软通道注意力模块第一次global avg pool的输出1xc作为输入,经过一个fc变成1x2T的向量(共cx2Tparams),然后用一个tanh激活函数,将向量的值限定在[-1,1]之间(表示在图片的百分比位置)。之所以允许负值是考虑到可能注意力区域超过了图片的边界,可以适用一个人只有一部分身体被检测到的情况)。硬注意力的输出T个矩形区域位置信息,会反馈到两个Inception module前,选择对应区域的特征图输入到下面对应的local branches中。
反向传播梯度的计算:
因为global branch的权重Wg在local branch中因为软硬注意力交互,对局部损失也有作用,所以求它的梯度时应该加上局部损失对它的梯度。
至于Wl,它只对局部损失起作用,不对全局损失起作用,所以只用算局部损失对它的导数即可。
3、实验细节
实施细节:
d1=128 d2=256 d3=384 T=4
hard attention size:(24,28) (12,14) (6,7)
Adam:beta1=0.9 beta2=0.999
bath_size=32 epoch=150 momentum=0.9
无数据增强、未使用预训练模型
4、实验结果
Table5证明了软硬注意力的作用,作者的方法能够有效的利用粗的硬注意力和细粒度的软注意力的互补信息。
Table6证明了软硬注意力交互(between global and local branches)的作用。
作者的全局特征、局部特征单独使用效果都很好,一起使用更好。
可以看到,作者的模型深度较深,参数量很少,浮点数较少。训练快、方便。