Joint Detection and Identification Feature Learning for Person Search阅读笔记

本人阅读的第一篇端到端且符合现实场景的行人重识别的文章。文章的逻辑尚属清晰,但是具体细节没有讲解清楚。所以本人现大致翻译一下文章,然后讲解一下关于这篇文章的代码。原作者贴出的基于caffe框架的代码,本人找到一位大神复现的基于pytorch的。侵权即删!

文献翻译

摘要:现有的行人再识别方法中所使用的标准和方法主要关注的是经过裁剪的行人照片,这与现实生活场景中的图片有所不同。本文为了缩小两者的差距,提出了一种行人搜索的新框架,将行人检测和行人再识别结合起来,利用单个CNN来进行训练。文中使用了OIM损失(Online Instance Matching)来训练网络,它比一般的Softmax损失函数的效果更快更好。为了验证我们的方法,我们搜集和标注了一个大的行人重识别的数据集。它包括18184张照片,8432个行人,96143个行人标注框。实验结果显示我们的模型优于其他分离的方法,并且OIM损失函数收敛速度快于且结果优于传统的Softmax损失函数。

Introduction:行人重识别的目标是在一个行人的查询集中找到目标人物。它有很多视频监控方面的应用,例如寻找罪犯、跨摄像头追踪、行人姿态分析。由于其复杂的行人姿态、摄像头的视角、光照、分辨率、背景多变等原因导致行人重识别是一项极具挑战性的工作。最近几年,也吸引了更多研究者的关注。

尽管业界已经有很多行人重识别的数据集和方法,但是它和现实世界的应用还有很大的距离。在现有大多数标准里,查询集包含的是手动切好的行人图片(fig 1),但是在现实场景的应用时,目标是在一个实际场景的查询集里找到目标行人(fig 2)。遵循这些基准的协议,现存的很多行人重识别方法假设目标检测已经趋于完美。但是,这些手动裁剪的边界框在实际应用中不可用。现成的行人检测器不可避免地会产生误检、错位,这可能会严重损害最终的搜索性能。

2014,Xu et al.做出了缩小这个差距的第一步。他们将人搜索问题引入社区,提出了一种基于行人检测和人匹配得分相结合的滑动窗口搜索策略。然而,性能受到手工制作功能的限制,滑动窗口框架不可扩展。

在本文中,作者提出了一个新的用于行人搜索的深度学习框架。不同于将行人检测和行人识别分离开的传统方式,作者利用一个卷积神经网络(CNN)来共同解决这俩个问题。我们的CNN由两部分组成。给定一个完整的输入查询图像,行人建议网络被用来产生候选人的边界框,然后输入到一个识别网络中,以提取与目标人物比较的特征。行人建议网和识别网在联合优化中相互适应。例如,行人建议网络可以更多的关注召回率而不是准确率,因为假正例可以在后续的特征匹配阶段被消除。同时提议框的错位也是可以接受的,因为它可以在识别网络中做进一步的调正。受最近物体探测技术的启发,为了提升整个系统的扩展性,我们鼓励两部分共享底层卷积特征图,这显著加快了推理过程。

传统的行人重识别特征学习主要采用二元组、三元组损失函数。但是,由于每一次只能对比几个数据,所以效率不高,并且它含有O(N^2)的潜在数据组合,N是照片的数量。不同的采样策略对收敛速度和收敛质量有显著影响,但随着N的增加,寻找有效的采样策略变得更加困难。另一个学习分类标识的是Softmax损失函数,可以高效的同时对比所有的样本。但是随着样本类别的增多,训练一个大的Softmax分类矩阵变得越来越慢,并且甚至无法收敛。在本文中,作者提出了一个全新的在线实例匹配损失函数(IOM)去解决这个问题。我们维护了一个从所有标记标识中查找特性的表,并比较了小批量样本和所有查找表中样本之间的距离。另一方面,很多出现在场景中没有标记的标识可以看作标记标识的负样本。因此,为了比较我们利用循环队列来存储它们的特征。这也是全景行人搜索背景带来的优势。实验结果表明,本文提出的无参数OIM损失比Softmax损失收敛得更快、更好。

作者工作的包含三个贡献。一,作者提出了新的深度学习框架去搜寻一个目标行人从一个全景图片的查询集中。而不是简单连接行人预测器和行人识别器的方法。我们在一个CNN中共同优化这两个目标,使它们更好地相互适应。二,我们提出可以高效的OIM损失函数去学习行人特征,这也使得我们的框架扩展到有大量行人ID的大的数据集。随着推测速度的加快,我们的框架更接近于实际应用程序的需求。三,我们为行人搜索收集和标注了一个大规模基准数据集,从街道和电影快照中覆盖数百个场景。这个数据集包含18184张图片,8432位行人,96143个行人标注框。在这个数据集上,我们和其他的方法进行了有效性的对比。为了进一步的研究,公开了数据集(?)和代码。

相关工作:行人重识别。早期的行人重识别采用人工设计特征来解决这个问题,跨摄像头视图的学习功能转换,以及学习距离指标。近些年,很多研究者提出了基于深度学习的各种共同解决这些方面的方法.[1]和[19]设计了一个特定的行人重识别CNN模型。两个网络都使用一对裁剪的行人图像作为输入,并使用二进制验证损失函数来训练参数。[5][3]利用三元组对CNN进行训练,使同一个人之间的特征距离最小化,使不同人之间的距离最大化。[35]除了采用二元组和三元组损失函数,提出了通过分类标识去学习特征。将多个数据集组合在一起,提出了一种基于域引导的失活技术,以改进特征学习。最近的几项工作涉及解决人对异常图像的重新识别,如低分辨率图像、部分遮挡的图片。

与我们同时发表[35]也贡献了一个行人搜索的基准数据集。他们开发了单独的检测和重新识别方法,并对分数进行重新加权,以解决这个问题。而在这项工作中,我们提出了基于深度学习的框架去共同的解决了这个问题。

行人检测。DPM,ACF,Checkerboards是最普通的用于检测的行人检测器。它们基于手工制作特征和线性分类器去预测行人。基于CNN的行人预测器已经开发出了。对CNN模型结构、训练数据、不同训练策略等因素进行了实证研究在[15]。[31]利用行人和场景属性标签以多任务方式训练CNN行人探测器。[2]提出了一种学习CNN检测器级联的复杂感知增强算法。

3 .Method

我们提出了一个新的深度学习框架去共同的解决行人检测和行人识别在一个CNN。输入一个给定的全景图片,首先利用stem CNN把原始image像素变换为特征图,pedestrian proposal net就建立在这些feature maps之上,从而预测候选行人的bounding boxes。将上述的bounding boxes送入具有RoI-Pooling的identification net来提取经过L2正则化后的每个box特征(256维)。在推测阶段,利用gallery person和目标行人之间的features distances来进行排序。在训练阶段,根据feature vectors,使用OIM loss function以及其他的loss functions来监控identification net,以多任务方式来训练网络。

3.1 Model Structure

作者采用ResNet-50作为基础CNN网络。利用其中的conv1和 conv4_3作为stem CNN部分。给定一张输入图片,stem会产生1024个通道的 features maps,它们的分辨率只有原图像的十六分之一。

在顶部的这些特征图中,我们建立行人推荐网络去检测潜在行人。根据features maps,利用512 × 3 × 3的卷积层来对行人特征进行转换,接着在feature map的每个位置利用9个anchors(源于Faster RCNN)和Softmax分类器进行行人与否的预测,同时还包括了线性回归来调整anchors的位置。在NMS过后保留128个调整后的bounding boxes作为最终的proposals。

为了在这些proposals里找到目标行人,我们建立了identification net来提取特征,并与目标行人作对比。首先利用RoI Pooling层去池化从stem feature map中得到1024 × 14 × 14的区域(对应于每个proposal),接着将它们送入ResNet-50的conv4_4至conv5_3层,再利用global average pooling层将其整合为2048维的特征向量。一方面来说, pedestrian proposals不可避免的会包含一些false alarms(也就是proposal里包含的不是行人)和misalignments,再次利用Softmax分类器和线性回归来拒绝非行人区域并完善proposal的位置。另一方面,我们将特征投影到经过L2正则化后的256维向量子空间中,在测试阶段计算它们和目标行人的余弦相似度。在训练阶段,用OIM监督identification net。和检测阶段的其他损失函数一起,整个网络以多任务学习的方式进行联合训练,而不是使用其他优化方法。

3.2 OnlineInstance Matching Loss

       包含三种不同类型的proposals,labeled identities、unlabeled identities和background clutter。假设训练集中有L个不同身份的人,当一个 proposal 匹配上了目标行人,就称这个 proposal 为 labeled identity,如下图蓝色框框的 proposals ,即与目标行人相吻合的proposal ,然后相应的给这个 proposal 分配一个1到L之间的类别id(L个类的其中一个);同样,也有很多  proposals 成功检测到了行人,但不是目标行人的proposals,称这些proposals 为unlabeled identities ,如下图橙色框框的 proposals ;最后,有一些 proposals 错误地包含了非行人物体或者背景区域,这些 proposals 称为background clutter。在OIM损失函数中只考虑前两者,即 labeled identities 和 unlabeled identities。

我们的目标是使相同标签的实例特征值相似度尽可能高,不同标签的实例之间的相似度尽可能小。为了实现这个目的,我们需要存储所有人的特征。对所有训练集图像同时进行网络的前向传递就可以实现,但这对于SGD优化器来说是不实际的,因为随机梯度下降每次只取一个mini-batch,不可能把所有训练集图像一次包含进去训练,所以本文并未选择SGD进行优化,而是采用了 online approximation。mini-batch中一个labeled identity的特征被记为记为x(x是D维特征向量),保留一个LUT记录所有labeled identity的特征(D×L 维矩阵,L是不同目标行人的个数)。在前向传播中,计算mini-batch中样本与所有labeled identities之间的的余弦相似度(V转置后乘上x)。在后向传播过程中,如果目标行人的分类标签是t,那么就可以利用如下公式来更新LUT中的第t列:

(其中,,并需要对进行L2正则化)。

除了labeled identities,那些 unlabeled identities .也就是全景图中出现的许多 unlabeled identities 对于学习特征的表达也是很有价值的,可以被视为是天然的negatives(负样本)。使用 circular queue 来保存那些出现在当前 mini-batch 中的那些 unlabeled identities 的特征,用U来表示(,D×Q维矩阵,Q是queue队列的大小,在实验中设置为5000),同样也可以计算U与mini-batch样本之间的余弦相似度。每一轮迭代过后,将新的特征向量压入队列中,并剔除那些过时的,从而保持queue大小不变,这也是circular queue和LUT的区别。

基于这两种数据结构,特征向量x被视为第i类的行人的概率(通过Softmax计算)为:

其中T控制了概率分布的平缓程度。同样的,在 circular queue中,x被视为第i类 unlabeled identity 的概率为:

OIM最终目标是使得期望似然函数最大化:

L对x的梯度可以表示为:

所以,从公式(1)、(2)可以看出,OIM损失函数有效地将mini-batch里的样本和 labeled identity 和 unlabeled identity 进行了对比,即实现了缩小相同id人的特征距离,同时增大不同id的人的特征距离的目的。

没有使用Softmax损失函数的原因:一个自然而然的问题就是为什么没有利用简单的Softmax损失函数学习一个分类矩阵去直接预测类别ID。主要是有两个缺点。首先,大规模行人搜索数据集里的行人类别太多(通常大于5000个id),并且每个id对应的实例较少,每张图片包含的id数目也很少,同时需要学习超过5000个的判别函数,而在那么多类中,每次SGD只有很少量的positive samples,因此分类矩阵的梯度变化很大,不能被很好地学习;其次,Softmax无法利用unlabeled identities,因为在Softmax中它们没有明确的类别标识。OIM与Softmax loss其实很像,主要的区别在于OIM损失是非参数化的,LUT和circular queue被认为是外部记忆单元,而非网络的参数,梯度不需要转换为分类矩阵直接在特征上操作。但这种无参数的损失函数有一个潜在的缺点就是容易过拟合,所以文中将特征映射到经过L2正则化之后的低维子空间中可以帮助解决过拟合的问题。

当行人种类id逐渐增加时,前面的公式(1)和(2)计算起来会比较费时,为了克服这个问题,采用了对labeled和unlabeled identities进行二次采样的方法来近似分母:

4 数据集

        本文收集和标注了一个大规模的行人搜索数据集来评估上面提出的方法,收集了两类不同的数据集,一类是在城市里用照相机拍下来的照片,另一类是电影中包含有行人的截图,目的是为了增加视角、光照和背景的多样性。

该数据集一共包含18184张图片,总共标注了 96143 个行人的bounding boxes以及8432个 labeled identity,具体数据的数量和内容在下面的Table 1中可以看到:

那些只有半个身子的人以及不正常的姿势(不是站立直行,而是坐下或蹲着的)的人没有被标注,跟传统的ReID一样,那些换了衣服和装饰的同id的人也不会被标注,因为仅靠人脸是很难识别出这个人的身份的,所以换了衣服和装饰对ReID的识别准确率影响很大。同时忽略那些高度低于50个像素点的背景行人,因为即使是人的肉眼去识别,也很难看出他们的身份,更别说机器了。

数据集被分为训练和测试集,其中测试集中的行人又被分为queries和galleries,总共大约有2900个test identities,并随机抽取其中之一做为query,而对应的gallery数据集由两部分组成:所有包含其他实例的图片和随机抽取的不包含query的图片。不同的queery包含不同gallery,但它们会覆盖所有的6978张测试图片。

为了更好地探究gallery(候选行人库)的size(数目)如何影响行人搜索的效果,将gallery size设置成从50到4000,拿gallery size=100为例,每一张图片大约包含了6个行人,那么一共就有100*6=600个行人,我们的任务就是从这600个人中找到目标行人。这样的设置和已有的ReID数据集(如CUHK-03和VIPeR)的gallery数量差不多,甚至更具有挑战性,因为这里包含了很多无关的背景bounding boxes混淆注意力。

采用了两种评价机制:CMC top-K和mAP

CMC是行人重识别中常用的评价机制,需要满足:top-K个预测bounding boxes中至少有一个box与ground truths有重合,且IoU要大于等于0.5,则说明产生了匹配。mAP则是目标检测任务中常用的评价机制,沿用了ILSVRC目标检测标准。

5 实验

为了验证我们方法的有效性,为了研究各种因素在行人搜索上的现象,我们在新的数据集上做了几组实验。

5.1 实验参数设置

文章是基于caffe框架和faster rcnn算法为基础的,用了基于ImageNet 的ResNet50的预训练模型。将第一个7×7卷积层和批量归一化层固定为stem-CNN部分的常量仿射变换,其余的BN层在识别部分保持正常。循环队列设为5000,temperature scalar设置为0.1,所有用到的loss都有一样的损失权重,每一个mini-batch有2张全景图,学习率初始化为0.001,在4万次迭代后下降到0.0001,然后保持不变直到模型在大约5万次迭代的时候达到收敛。

比较我们的“整合新框架”和“将行人检测与再识别分开的方法”。后者,其中有3中行人检测和5种行人再识别方法,自由组合后共15中组合方式。其中CCF detector(Hand-crafted features)直接用,没有finetune,其他两个ACF和Faster-RCNN (CNN) with ResNet-50在该数据集下做了finetune。recall-precision curve的结果如下图Figure 5所示:

对于行人重识别部分,使用了主流的 DSIFT、BoW 和 LOMO,并将它们与 Euclidean、 Cosine similarity、KISSME 以及 XQDA这些特殊的距离度量方法进行结合。

文中为了进行对比实验,把不使用 pedestrian proposal net 网络,并使用softmax loss作为损失函数,使用裁切后的图像,且只训练剩余部分,得到的基础模型称为IDNet。实验发现,训练IDNet时,加入 background clutter 作为其中的一个类,可以有效提高识别结果,而加入 unlabeled identity 就不行了。后面gallery size都默认是100。

这些地方作者做了很多实验,去测试超参数的设定,各位宝宝来看原文吧!!

六. Conclusion

本文提出了解决行人搜索的一种新框架,将检测和识别问题结合起来,利用单个CNN来解决。在网络的训练过程中使用了OIM损失函数,优点在于可以应用到更大规模的数据集中。

代码的阅读放到下个博客里吧!!

引用:https://blog.csdn.net/qq_38451119/article/details/83047849

https://www.twblogs.net/a/5b8102ab2b71772165aa8efd/zh-cn

猜你喜欢

转载自blog.csdn.net/qq_36167072/article/details/88798657