来源: ICCV 2019
Abstract
基于深度的ReID方法在训练过程中有两个常遇到的问题:1.前景目标不对齐;2.背景模糊。本文提出了一种新的利用attention进行前景约束的reid方法,同时通过约束不同stage层前景attention尽可能一致实现高层语义更好更早的指导低层特征抽取。最后训练过程还提出了一种新的改进的triplet loss。在Market1501, CUHK03和DukeMTMC-reID库上都取得非常好的性能。
Introduction
数据驱动的深度特征能够自动的将注意力集中到前景区域,但是前景attention的显式指导显然效果更好(我们一般认为网络能够自动学习很多东西,其实这些东西都需要大规模的数据集,所以平时我们习以为常的点都可以加到网络里试一试,说不定就能够降低模型的拟合难度,获得更好的效果。)一般使用前景mask的方式有两种。第一种:标注mask,或者使用off-the-shelf方法获得前景mask用于指导训练,但这种方法由于梯度反传的衰减可能导致低层特征学习不充分。第二种:利用attention机制,专门有分支进行attention的学习。
本文采用了attention分支的策略,不同的level上都采用attention,还希望attention得到的mask进坑一致。最后提出了一种改进的triplet loss。
Approach
本文方法结构图如上图所示。backbone是ResNet50, 在ResNet的1~4的stage上都使用了attention产生前景mask,将该mask作用在feature map上使其更关注于前景部分。最后特征经过全局池化和bn层抽象为2048维特征。
attention的结构如上图所示,主要点:1. 特征逐步降低为1/4;2.不同的感受野大小通过膨胀卷积率计算得到,最后经过求和算子进行结合。
目标函数
其中第一项为分类损失,第二项为改进的triplet损失,第三项为attention map的一致性损失。分类损失不再赘述。改进的triplet损失定义为:
其中d(,)表示欧式距离, 表示中间的某个点,是调节参数(这里的应该可以学习得到呀)
讨论
基本的triplet loss:
只考虑了正样本对和一个负样本对之间关系。
dual triplet loss
相当于
symmetric triplet loss定义为:
是dual triplet loss的泛化。
改进的triplet loss和基础的triplet loss的对比如下:
显然相对于左图,梯度能使右图中的更集中。(左图中x_i, x_j和T1中的定义相反)
个人认为 T和T1,T2考虑的方向都是一样的,即让两个负样本对都参与监督。其实把T2的梯度图画出来发现和T是一个目的,但没有T的目的性强。
consistent attention regularizer
两个约束:1.不同stage的attention图尽可能一致,相邻层之间不同的分辨率采用stride=2的池化层进行统一;2. 稀疏约束。个人认为稀疏约束有点太强了,因为前景目标其实占据的范围应该远大于一半吧。
实验部分
可以发现IT相对于basic triplet的性能提升很明显,CA的作用也很明显。
不同损失函数的性能对比见下表:
有点过于优秀了吧。。。
在三个数据集上的与SOTA对比如下:
视觉感受如下:不同stage的attention map的平均结果:
Conclusion
本文针对于ReID任务中前景不对齐以及背景干扰问题提出了两点:1.使用多层attention,且不同的stage的attention进可能一致,作者认为这样能让高层语义信息更好的指导低层特征聚焦在前景区域,实验也证明了这个方法非常有效,稳定性能提升;2. 改进的triplet loss,将三元组中的一个正样本对和两个负样本都纳入计算,通过引入两个同类点的中间点作为辅助点,更好更有效的让类间分离类内紧致。
看该方法的实验性能,想去看看代码,希望代码尽快放出来。