论文能够在arxiv下载,老板一做,本人二做,也是咱们实验室第一篇CCF A类论文,这个方法咱们称为TFusion。html
代码:https://github.com/ahangchen/TFusiongit
本文为你解读CVPR2018 TFusiongithub
转载请注明做者梦里茶算法
行人重识别(Person Re-identification)是一个图像检索问题,给定一组图片集(probe),对于probe中的每张图片,从候选图片集(gallery)中找到最可能属于同一个行人的图片。网络
行人重识别数据集是由一系列监控摄像头拍摄获得,并用检测算法将行人抠出,作行人的匹配。在这些数据集中,人脸是十分模糊的,没法做为匹配特征,并且因为多个摄像头拍摄视角不一样,同我的可能被拍到正面,侧面,背面,具备不一样的视觉特征,所以是一个比较难的图像匹配问题。经常使用数据集有不少,能够在这个网站查到。架构
行人重识别问题有如下几种常见的解决方案:dom
这类方法一般提取行人图像特征,对特征进行距离度量,从而判断是不是同一我的。分布式
这类方法一般须要提供行人图片和行人id标签(person1,person2等),训练模型,提取图像特征,根据两张图特征的距离大小(能够用余弦距离,欧氏距离之类的计算),为probe中的每张图和gallery中的每张图计算其类似度,根据类似度将gallery中的图片排序,排序越高越可能为同一我的。ide
这方面的论文表明有TOMM2017: A Discriminatively Learned CNN Embedding for Person Re-identification,咱们采用的基础图像分类器就是基于这篇论文用Keras实现的,后面细讲。学习
在CVPR2018以前,Person Reid领域正式发表的无监督工做只有CVPR2016的UMDL:Unsupervised Cross-Dataset Transfer Learning for Person Re-identification,基于字典学习方法,在多个源数据集上学习跨数据集不变性字典,迁移到目标数据集上。然而准确率依然很低。
行人图片是摄像头拍到的,摄像头之间有必定的距离,行人的移动有必定的速度限制,所以行人在摄像头间的移动时间就会呈现出必定规律,好比,AB摄像头间有10米,人行走速度2m/s,若是AB摄像头在1s内捕捉到了两张图片,则这两张图片不多是同一我的的,所以咱们能够利用摄像头拓扑约束来提高行人重识别的准确率。
然而,这类方法每每有如下缺陷:
迁移学习如今是深度学习领域很经常使用的一个套路了,在源数据集上预训练,在目标数据集上微调,从而使得源数据集上的模型可以适应目标场景。这方面的论文表明有前面讲的UMDL,和Deep transfer learning person re-identification,然而,目前的迁移学习大多须要标签,而无监督迁移学习效果又不好,仍然有很大提高空间。
更多关于Person Reid的内容能够看一下我在博客写的几篇调研
对应有三个创新点
接下来详细解析咱们的方法。
所谓时空模型,即一个摄像头网络中,行人在给定两个摄像头间迁移时间的分布。
咱们看遍全部Reid数据集,发现有三个数据集有时空信息,Market1501, GRID, DukeMTMC-ReID,其中,DukeMTMC-ReID是2017年后半年才出来的,时间比较仓促在论文中就没有包含跟它相关的实验。Market1501是一个比较大的Person Reid数据集,GRID是一个比较小的Person Reid数据集,而且都有六个摄像头(GRID中虽然介绍了8个摄像头,实际上只有6个摄像头的数据)。
例如,Marke1501中一张图片的时空信息是写在图片名字中的:
0007_c3s3_077419_03.jpg:
我想吐槽的是,其实时空信息是很是容易保存的,只要知道图片是在何时,哪台摄像机上拍摄,就可以将时空信息记录并有效利用起来,但愿多模态数据融合获得更多重视以后,作数据集的人可以更加剧视可保存的信息吧。
咱们首先经过Market1501中的真实行人标签,计算训练集中全部图片对
对应的时空点对
对应的迁移时间,这里可视化了从摄像头1出发的行人,到达其余摄像头须要的时间的分布。
能够看到,到达不一样目标摄像头的峰值位置不一样,其中从摄像头1到摄像头1,意味着被单个摄像头拍到连续多帧,因此峰值集中在0附近,从摄像头1到摄像头2,峰值集中在-600附近,意味着大部分人是单向从摄像头2运动到摄像头1,等等,而且,说明这个数据集中存在显著可利用的时空规律。
咱们将迁移时间差命名为delta,这样提及来方便(装逼)一点。
若是咱们可以统计一个数据集中的全部delta,给定一个新的delta(两个新的图片对应的两个时空点算出来的),咱们可以用极大似然估计,用在这个delta先后必定范围(好比100帧)的delta的出现频率(=目标范围delta数量/总的delta数量),做为新时间差出现的几率,也就是两个时空点是同一人产生的几率。
可是!问题是咱们在目标场景上每每是没有行人标记数据的!
因而咱们就思考,
思路有了,实现就很天然了,
图像分类器上,咱们这里用的是LiangZheng的Siamese网络,他们的源码是用MATLAB实现的,我用Keras复现了一把:
时空模型的极大似然估计能够看这里
聪明的读者应该会注意到,这个图像分类器是在其余数据及上预训练的,因为特征空间中数据分布不一样,这个图像分类器太弱了,对于目标数据集来讲,前十里会有许多错的样本,致使构造出来的时空模型和真实的时空模型有误差
能够看到,构造的模型跟真实的模型仍是有些差异的,可是峰值位置仍是差很少,必定程度上应该还能用,但咱们仍是但愿构造的模型尽可能接近真实模型的。
因而咱们开始思考
因而咱们可视化了一下随机的delta分布
能够发现,
这种随机的时间差分布也呈现出必定的集中趋势,其实体现的是采样的时间差分布,如,在1号摄像头采的图片大多在某个时间段,2号摄像头也大多在这个时间段采,但3号摄像头的图片大可能是在其余时间段采到的。
考虑到时间差的频率图有这么多的抖动,咱们在计算某个区域的时间差时,加上了均值滤波,而且作了必定区域的截断,包括几率极小值重置为一个最小几率值,时间差极大值重置为一个最大时间差。
接下来,应该怎么把错误的模型从估计的模型滤掉呢?又怎么将时空模型和图像模型结合呢?
首先看时空模型和图像模型的融合, 咱们有一个视觉类似度Pv,一个时空几率Pst,一个直观的想法是,联合评分能够是Pv * Pst,若是要再抑制随机的评分Prandom,能够作个除法,就是Pv * Pst / Prandom
这样一看,像不像条件几率公式?因而咱们开始推导(大量公式预警):
先看看咱们手上的资源:如今咱们有一个弱的图像分类器,能够为两张图片提取两个视觉特征vi, vj, 有两个时空点,空间特征为两个摄像头编号ci, cj,时间特征为两张图片拍摄的时间差∆ij,假定两张图对应的person id分别为Pi, Pj,那么咱们的目标就是求,在给定这些特征的条件下,两张图属于同一我的的几率
Pr(Pi=Pj|vi,vj,ci,cj,∆ij)(论文公式6)
由条件几率公式P(A|B) = P(B|A)*P(A)/P(B),可得
Pr(Pi=Pj|vi,vj,ci,cj,∆ij)
= Pr(vi,vj,ci,cj,∆ij|Pi=Pj) *Pr(Pi=Pj)/ Pr(vi,vj,ci,cj,∆ij)
由时空分布和图像分布的独立性假设(长得像的人运动规律不必定像),咱们能够拆解第一项,获得
= Pr(vi,vj|Pi=Pj) * Pr(ci,cj,∆ij|Pi=Pj) * Pr(Pi=Pj)/ Pr(vi,vj,ci,cj,∆ij)
其中Pr(Pi=Pj)是一个很差求的项,咱们试着把它换掉,
先交换顺序(乘法交换律)
= Pr(vi,vj|Pi=Pj) * Pr(Pi=Pj) * Pr(ci,cj,∆ij|Pi=Pj) / Pr(vi,vj,ci,cj,∆ij)
由条件几率公式P(A|B)* P(B) = P(B|A) * P(A)可得
= Pr(Pi=Pj|vi,vj) * Pr(vi=vj)*Pr(ci,cj,∆ij|Pi=Pj) / Pr(vi,vj,ci,cj,∆ij)
能够看到
再次利用时空分布和图像分布的独立性假设,拆解分母
= Pr(Pi=Pj|vi,vj) * Pr(vi=vj)* Pr(ci,cj,∆ij|Pi=Pj) / Pr(vi,vj) * P(ci,cj,∆ij)
约掉Pr(vi=vj),
= Pr(Pi=Pj|vi,vj) * Pr(ci,cj,∆ij|Pi=Pj) /P(ci,cj,∆ij)
也就是
= 视觉类似度*同一人产生这种移动的几率/任意两个时空点组成这种移动的几率
这也就是论文公式(7),也就是咱们一开始的猜测:Pv * Pst / Prandom
看着好像很接近咱们手头掌握的资源了,可是,
因而咱们想用Pr(ci,cj,∆ij|Si=Sj) ,P(ci,cj,∆ij)去近似,获得
= Pr(Si=Sj|vi,vj) * Pr(ci,cj,∆ij|Si=Sj) /P(ci,cj,∆ij)
看到这里其实就大体理解咱们的融合原理了,实际上咱们大部分实验也是用的这个近似公式算的。
实现上,先模拟两个时空模型,计算图像类似度,而后代入公式求融合评分,具体能够实现看我GitHub
但这个近似能不能作呢?咱们来作一下偏差分析(大量推导,不感兴趣能够跳到接下来出现的第二张图,不影响后面的理解,只是分析一波会更加严谨)。
实际上,偏差是由图像分类器引入的,假设图像分类器断定两张图是同一我的的错判率为Ep,图像分类器断定两张图不是同一人的错判率为En,
则有,
Ep = Pr(Pi≠Pj|Si=Sj)(论文公式1)
En = Pr(Pi=Pj|Si≠Sj)(论文公式2)
则Pr(Pi=Pj|vi,vj) 与 Pr(Si=Sj|vi,vj) 的关系能够表示为:
Pr(Pi=Pj|vi,vj)
= Pr(Pi=Pj|Si=Sj) * Pr(Si=Sj|vi,vj) + Pr(Pi=Pj|Si≠Sj) * Pr(Si≠Sj|vi,vj)
= (1-Ep) * Pr(Si=Sj|vi,vj) + En * (1-Pr(Si=Sj|vi,vj) )
= (1-Ep-En) * Pr(Si=Sj|vi,vj) + En (论文公式8)
推导,Pr(ci,cj,∆ij|Pi=Pj) 和Pr(ci,cj,∆ij|Si=Sj) 的关系(这个无法像视觉类似度那样直接推导,由于因果关系不一样)
Pr(ci,cj,∆ij|Si=Sj)
= Pr(ci,cj,∆ij|Pi=Pj) * (Pr(Pi=Pj)|Si=Sj) + Pr(ci,cj,∆ij|Pi≠Pj) * (Pr(Pi=Pj)|Si≠Sj)
= Pr(ci,cj,∆ij|Pi=Pj) * (1- Ep) + Pr(ci,cj,∆ij|Pi≠Pj) * Ep
一样能够获得
Pr(ci,cj,∆ij|Si≠Sj)
= Pr(ci,cj,∆ij|Pi=Pj) * En + Pr(ci,cj,∆ij|Pi≠Pj) * (1 - Ep)
联立上面两个式子解方程,消掉Pr(ci,cj,∆ij|Si≠Sj) 能够获得
Pr(ci,cj,∆ij|Pi=Pj)
= (1 - Ep - En)-1(1-En) * Pr(ci,cj,∆ij|Si=Sj) - Ep * Pr(ci,cj,∆ij|Si≠Sj) (论文公式5)
其中有个新概念Pr(ci,cj,∆ij|Si≠Sj) ,意味着图像分类器认为不是同一我的的时候,这种时空点出现的几率,实现上也不难,统计视觉类似度top10之后的点对应的时间差,做为反时空几率模型便可。
咱们把两个近似(公式5和公式8)代进公式7,
能够获得
Pr(Pi=Pj | vi, vj, ∆ij, ci, cj)
= (M1 + En/(1 - En - Ep))((1-En)M2 - EpM3)/Pr(∆ij, ci, cj))(论文公式9)
其中,
M1 = Pr(Si=Sj|vi,vj),视觉类似度
M2 = Pr(∆ij,ci,cj|Si=Sj),正时空几率模型
M3 = Pr(∆ij,ci,cj|Si≠Sj),反时空几率模型
分母Pr(∆ij, ci, cj))为随机几率模型
以上四项都是能够从无标签目标数据集中结合图像分类器求解到的,而且,当En=Ep=0时(意味着图像分类器彻底准确),这个公式能够退化为近似解:
Pr(Si=Sj|vi,vj) * Pr(ci,cj,∆ij|Si=Sj) /P(ci,cj,∆ij)
到这里,你是否是觉得咱们就能够用公式9算融合评分了?非也,公式9中,还有个问题:Ep,En是未知的!
若是想要正儿八经地算Ep,En,要求目标数据集有标签,而后咱们用图像分类器先算一遍,数数哪些算错了,才能把Ep,En算出来。所以咱们用两个常数α和β分别替代Ep,En,整个模型的近似就都集中在了这两个常数上。
在论文Table1,2,3,4,Fig6相关的实验中,α=β=0,而且,在Fig5中,咱们设置了其余常数来检查模型对于这种近似的敏感性
能够看到,虽然α和β较大时,准确率会有所降低,可是仍然能保持必定的水准,当你看到纯图像分类器的准确率以后,还会发现融合模型的准确率一直高于纯图像分类器。
你可能注意到了,图中α+β都是小于1的,这是由于,只有当Ep+En<1且α+β<1时,融合模型的Ep+En才会小于图像模型的Ep+En,说人话就是,只有图像模型不是特别糟糕,且近似的参数也比较正常的时候,融合模型才会比单个的图像模型要准,融合才有意义。这个定理的具体的证实放到论文附录里了,有兴趣的能够邮件私信我拿附录去看,这里摆出来就太多了。
因而咱们获得了一个由条件几率推断支撑的多模态数据融合方法,称为贝叶斯融合
看一眼融合获得的时空分布图:
再从数据上看一眼融合的模型有多强:
源数据集 | 目标数据集 | 纯 | 图像 | 结果 | 融合 | 时空 | 结果 | |
---|---|---|---|---|---|---|---|---|
rank-1 | rank-5 | rank-10 | rank-1 | rank-5 | rank-10 | |||
CUHK01 | GRID | 10.70 | 20.20 | 23.80 | 30.90 | 63.70 | 79.10 | |
VIPeR | GRID | 9.70 | 17.40 | 21.50 | 28.40 | 65.60 | 80.40 | |
Market1501 | GRID | 17.80 | 31.20 | 36.80 | 49.60 | 81.40 | 88.70 | |
GRID | Market1501 | 20.72 | 35.39 | 42.99 | 51.16 | 65.08 | 70.04 | |
VIPeR | Market1501 | 24.70 | 40.91 | 49.52 | 56.18 | 71.50 | 76.48 | |
CUHK01 | Market1501 | 29.39 | 45.46 | 52.55 | 56.53 | 70.22 | 74.64 |
能够看到,
说明这种融合方式是确实行之有效的。
前面讲到图像分类器太弱了,虽然融合后效果挺好的(这个时候咱们其实想着要不就这样投个NIPS算了),可是若是能提高图像分类器,融合的效果理论上会更好。而如今咱们有了一个强大的融合分类器,咱们能不能用这个融合分类器为目标数据集的图片打标签,反过来训练图像分类器呢?
一个经常使用的无监督学习套路就是,根据融合评分的高低,将图片对分为正样本对和负样本对(打伪标签),而后喂给图像分类器学习。
咱们也尝试了这种作法,可是发现,数据集中负样本远远多于正样本,融合分类器分对的负样本是挺多的,可是分对的正样本超级少,分错的正样本不少,错样本太多,训练出来效果极差,用上一些hard ming的技巧也不行。
因而咱们思考,
因而天然而然地想到了Learning to Rank
综合得分每每须要许多复杂的条件来计算,不必定适用于咱们的场景,因此排除List-wise,Point-wise和Pair-wise均可以采用,得分能够直接用融合评分表示,Pair-wise能够用一组正序样本,一组逆序样本,计算两个得分,算相对得分来学习,有点Triplet loss的意味,因而在实验中采用了Pair-wise方法。
RankNet是Pair-wise Learning to Rank的一种方法,用一个神经网络去学习输入的两个样本(还有一个query样本)与其排序几率(上面定义的)的映射关系。
具体到咱们这个问题里
具体的神经网络用Keras实现并可视化出来长这样:
- 输入是三张图片,分别用Resnet52提取特征并flatten
- flatten以后写一个Lambda层+全链接层算特征向量带权重的几何距离,获得score1和score2
- 用score1和score2和真实分数算交叉熵Loss(下面讲)
Pbc= eobc/(1+ eobc) = eSab- Sac / (1 + eSab- Sac)
C(obc) = -P'bcln Pbc - (1-P'bc)ln (1 - Pbc)
网络实现超级简单,主要麻烦在样本三元组构造
整个Learning to rank过程如图
咱们用融合分类器为目标数据集中的图片对评分,构造三元组输入RankNet,其中Si是查询图,Sj是在与Si融合类似度top1 - top25中抽取的图片,Sk是在与Si融合类似度top25 - top50中抽取的图片,喂给RankNet学习,使得resnet52部分卷积层能充分学习到目标场景上的视觉特征。
源数据集 | 目标数据集 | 纯 | 图像 | 结果 | 融合 | 时空 | 结果 | |
---|---|---|---|---|---|---|---|---|
rank-1 | rank-5 | rank-10 | rank-1 | rank-5 | rank-10 | |||
CUHK01 | GRID | 17.40 | 33.90 | 41.10 | 50.90 | 78.60 | 88.30 | |
VIPeR | GRID | 18.50 | 31.40 | 40.50 | 52.70 | 81.70 | 89.20 | |
Market1501 | GRID | 22.30 | 38.10 | 47.20 | 60.40 | 87.30 | 93.40 | |
GRID | Market1501 | 22.38 | 39.25 | 48.07 | 58.22 | 72.33 | 76.84 | |
VIPeR | Market1501 | 25.23 | 41.98 | 50.33 | 59.17 | 73.49 | 78.62 | |
CUHK01 | Market1501 | 30.58 | 47.09 | 54.60 | 60.75 | 74.44 | 79.25 |
对比Learning to Rank前的效果,准确率都提高了,GRID数据集上提高尤其明显。
一方面,咱们将上面的跨数据集无监督算法应用在GRID和Market1501两个数据集上,与当前最好的方法进行对比,另外一方面,咱们还测试了有监督版本的效果,有监督即源数据集与目标数据集一致,如GRID预训练->GRID融合时空,效果以下:
Method | Rank 1 |
---|---|
JLML | 37.5 |
TFusion无监督 | 60.4 |
TFusion有监督 | 64.1 |
因为在这个数据集上时空规律十分明显(正确时间差都集中在一个很小的范围内),能够过滤掉大量错误分类结果,因此准确率甚至碾压了所有有监督方法。
Method | Rank 1 |
---|---|
S-CNN | 65.88 |
DLCE | 79.5 |
SVDNet | 82.3 |
JLML | 88.8 |
TFusion无监督 | 60.75 |
TFusion有监督 | 73.13 |
在Market1501这个数据集上,无监督的方法逼近2016年的有监督方法(咱们的图像分类器只是一个ResNet52),有监督的方法超越2016年的有监督方法,虽然比不上2017年的有监督方法,可是若是结合其余更好的图像分类器,应该能有更好的效果。
咱们向UMDL的做者要到了代码,并复现了以下几组跨数据集迁移实验
Method | Source | Target | Rank1 |
---|---|---|---|
UMDL | Market1501 | GRID | 3.77 |
UMDL | CUHK01 | GRID | 3.58 |
UMDL | VIPeR | GRID | 3.97 |
UMDL | GRID | Market1501 | 30.46 |
UMDL | CUHK01 | Market1501 | 29.69 |
UMDL | VIPeR | Market1501 | 30.34 |
TFusion | Market1501 | GRID | 60.4 |
TFusion | CUHK01 | GRID | 50.9 |
TFusion | VIPeR | GRID | 52.7 |
TFusion | GRID | Market1501 | 58.22 |
TFusion | CUHK01 | Market1501 | 59.17 |
TFusion | VIPeR | Market1501 | 60.75 |
其中,UMDL迁移到Market1501的结果与悉尼科技大学hehefan与LiangZheng复现出来的效果差很少,因此咱们的复现是靠谱的。
能够看到,无监督的TFusion全面碾压UMDL。
更多详细实验结果能够到论文中细看。
回顾一下整个架构,咱们用图像分类器估算时空模型,获得融合模型,用融合模型反过来提高图像分类器模型,图像分类器又能继续加强融合模型,造成一个闭环
,理论上这个闭环循环屡次,能让图像分类器无限逼近融合分类器,从而获得一个目标场景中也很强大的图像分类器,所以咱们作了屡次迭代的尝试:
在从目前的实验效果看,第一次迁移学习提高比较大,后面提高就比较小了,这个现象往好了说能够是收敛快,但往坏了说,虽然图像分类器获得了提高,可是没有出现图像分类器提高大于融合分类器的现象,因此这里边应该还有东西可挖。
调研,可视化,找思路,找数据集,作实验,Debug,调参,写论文,九个月写一篇CVPR,这也是咱们实验室第一篇CCF A类论文,算是来之不易的开山之做了。如今咱们在Person Reid领域继续探索,正在搭建一个基于树莓派的摄像头网络,构造本身的数据集,并在这个基础上开展行人检测,多模态数据融合,轻量级深度模型,分布式协同终端,视频哈希,图像索引等一系列研究,欢迎follow个人Github,也欢迎持续关注咱们实验室的博客
看了这么久,还不给我Github点star!