一、介绍
现有的行人重识别方法关注在匹配裁切好的行人图像,但是这和真实场景有很大不同。真实场景中行人的bbx并不存在并且目标行人需要从一个场景图片库中查找。为了弥合这个鸿沟,作者提出了一个新的网络,不同于一般的将其分解为行人检测、行人重识别两个任务,作者搭建了一个CNN来同时解决这两个问题,即行人搜索问题。此外,作者还提出了一个新的OIM损失函数(online instance matching)来训练这个网络。OIM损失函数适用于类别较多、每类样本又较少的分类问题。为了验证作者的方法,作者收集并标注了一个大规模的行人搜索数据集。它包含18, 184 images, 8, 432 identities, and 96, 143 pedestrian bounding boxes。实验证明作者的网络比行人检测、行人重识别分开的方式更好,并且证明了OIM loss比传统的Softmax损失收敛更快更好。
二、作者的方法
2.1 网络结构
网络结构如上图所示,输入一张图片首先使用Stem CNN(ResNet50)得到特征图,然后输入到上路Pedestrian proposal net进行行人检测,产生行人的bbx后,经过RoI pooling后输入到分类的网络,每个bbx得到L2正则化的256维特征嵌入。训练阶段,使用OIM loss来监督分类网络,使用其他相应的损失函数来监督Pedestrian proposal net。
Stem CNN使用的是ResNet50预训练网络,使用了conv1到conv4_3层,对于3xHxW的图片,输出1024 x H/16 x W/16;至于Pedestrian proposal net,首先是3x3 kernls=512的卷积层,将特征转化为适合行人的特征(这是什么意思?)。然后仿照【27】对每个feature map位置关联9个锚点,使用Softmax分类器预测每个锚点是否为行人,并通过线性回归对其位置进行调整。作者将非最大压制后的top128个bbx作为最后的proposals;为了在这些proposals找到目标行人,作者使用分类网络来提取每个proposal的特征,然后和目标行人的特征进行对比。作者首先用RoI pooling将每个proposal bbx特征图池化成1024x14x14的区域。然后将1024x14x14通过ResNet50的conv4_4到conv5_3,然后再经过一个global avg pool得到2048维的特征向量。然后经过一个256的fc将其投影为256维。训练阶段,使用OIM loss来监督分类网络,使用其他相应的损失函数来监督Pedestrian proposal net。测试阶段,使用256维的特征计算距离。
2.2 Online Instance Matching Loss (OIM loss)
维护一个DxL大小(L为id总数)的查找表LUT(lookup table): V和一个Dx|Q|大小的环形队列:Q(用来作为反例)。每个proposal提取的Dx1的特征,和V和Q计算cosine距离,即V.t() * x得到Lx1的scores。同样,Q.t() * x得到|Q|x1的scores。然后使用Softmax:
其中,t为温度系数,t越大概率分布越平缓(类似SVM中的参数)。
损失函数为:
其中,t为这个proposal对应行人所属的类别。
后向阶段,损失函数关于x的梯度为:
根据
作者指出,OIM loss能够有效地使特征向量趋向于本类的特征,同时远离不是同类的特征。而Softmax loss需要学习一个分类矩阵(DxL)。而大规模行人搜索数据集有很多的人(作者的数据集中超过5000),每个人仅有几个样本、每张图仅包括几个人。Softmax loss需要同时学习超过5000个判别函数。但是每个SGD迭代仅有几十个类(batch size)的正样本。导致分类矩阵梯度变化太大,学习效率较低,即使使用了合适的预训练和大的动量。此外,Softmax无法利用无标签的行人,而OIM loss通过环形队列用到了他们。
OIM loss虽然看起来和Softmax loss很像,但是主要的区别是OIM loss不包含参数,查找表LUT和环形队列Q都是存储在外部的数据结构而不是网络参数,梯度直接作用在特征X矩阵上而不用通过分类矩阵。OIM loss这种无参的损失函数潜在的缺点是很容易过拟合,作者发现将特征投影在一个低纬的L2正则化后的特征空间能够避免过拟合。
扩展性:计算(1)和(2)式在类别较多时时间复杂度是很高的,作者指出可以对分母进行采样,如总共有1000类,可以随机采样500类计算分母,相当于负样本减少了一些,能够加快训练速度,同时preformance同样优秀。
2.3 数据集介绍
作者通过在城市街景拍摄、电影截图,构架了一个行人搜索的数据集。数据集的信息如下:
对于2900个人的测试集,作者随机选取一个人的一个样本作为query(这里是指一个proposal),这个人的其他样本图片和不包含这个人的图片作为gallery。不同人的gallery不同,所有人的gallery加在一起覆盖了测试集总共的6978张图片。为了更好地理解gallery size对行人搜索performance的影响,作者设置了gallery size从50到4000的对比实验。以gallery size = 100为例,每张图大概包含6个行人,因此这个任务相当于在600个人中寻找目标行人。和现有的行人重识别数据集如CUHK-03,VIPeR在检索行人数量上难度类似,但是考虑到包含背景bbx来分散注意力,作者的任务更具挑战性。
三、实施细节
- 固定第一个7x7卷积层、bn的权重
- 温度系数t设为0.1 |Q|=5000
- 所有的loss权重相同
- 每个batch都包含来自两个场景的图片
- 前40k iterations学习律为0.001,后10k iterations学习律为0.0001
- 对比的算法有:行人检测:现成的CCF,在我们数据集上fine tune的ACF、Faster-RCNN(和作者的检测网络相同)、GT(ground truth) 行人重识别:DSIFT、BoW、LOMO特征,欧氏距离、cosine距离、KISSME、XQDA、以及使用Softmax loss训练的IDNet(作者训练IDNet时发现把背景噪声作为单独一个类提升表现,但是把无标签行人作为单独一类无效果)
- 如不特殊说明,gallery size=100
四、实验结果
- 由上表可以看到,作者的方法以很大的优势超过了state of the art。和CNN+IDNet相比,作者得到的额外的奖励来自检测和识别网络一起优化,还有OIM loss。
- 不同的检测器对每个reid的方法影响很大,直接使用现成的检测器CCF并不适合真实场景的行人检索。否则检测器会成为一个瓶颈,减小好的reid方法带来的优势。
- IDNet和LOMO+XQDA在使用GT、ACF、CNN检测器时表现差不多,但是当使用现成的CCF检测器时,作者发现IDNet表现要好很多,这说明IDNet深度学习的方法比人工提取的特征更鲁棒
- 用的是IDNet+Softmax loss对比
- 可以看到,使用没有预训练分类矩阵的Softmax loss在整个训练过程中准确率一直很低。这说明学习一个大的分类矩阵确实是很困难的。就算有合适的预训练,测试mAP也就在60%左右
- 而OIM loss初始准确率很低,但是收敛的很快,最后达到了最好的效果。无参数的OIM loss直接学习特征而不用学习一个大的分类矩阵。而且,训练和测试的不匹配也不再存在,因为两者都是L2正则后的特征向量的内积。而Softmax loss面临着在训练数据上学习的分类矩阵在测试数据上不适合的问题
作者又设计了额外的实验,在行人重识别数据集上分别使用Softmax loss和OIM loss来训练不同的CNN结构,发现对于不同的网络结构和不同的数据集,OIM loss都获得了优于Softmax loss的结果。
- (a)图说明了OIM loss采样率对结果的影响,可以看到,较小的采样率对结果影响不大,却能显著地加快训练速度(当类别很多时,计算(1)、(2)运算量很大,是系统的瓶颈)
- (b)图研究的是检测器召回率对行人搜索结果的影响。作者使用LOMO+XQDA作为行人识别的方法,对各个检测器按召回率从30%到各自的最大值,最终的结果如图。实验证明搞得召回率并不能带来高的搜索表现,这时识别器会被一些false alarms(不是人,检测成人)干扰。这进一步说明了我们不应该仅仅关注在裁切好的行人数据集上做行人重识别,而应该在行人搜索问题设定下联合考虑行人检测
- (c)图研究的是gallery size对搜索表现的影响。作者把gallery size从50设定到6978,通过实验得到,随着gallery size的增加,各种方法都遇到了共同的难的样本,效果都变差。作者指出未来可以通过hard example mining来提升表现
上图说明,经过L2正则后的特征向量的维度对行人搜索结果的影响很大。当维度太大(2048维)时,会出现严重的过拟合:损失降到很小,但是测试的表现要差20%还多。这说明把特征向量投影到一个低阶的子空间对于使用OIM loss来说是很重要的。作者通过实验发现,256到1024维效果较好。