s3代表属于第3个时间序列(GRID和DukeMTMC中没有这个序列的信息,在Market1501中,不同序列的属于不同起始时间的视频,同一系列不同摄像头的视频起始时间相近),
077419为帧号,也就是时间信息。
我想吐槽的是,其实时空信息是非常容易保存的,只要知道图片是在什么时候,哪台摄像机上拍摄,就能够将时空信息记录并有效利用起来,希望多模态数据融合得到更多重视之后,做数据集的人能够更加重视可保存的信息吧。
我们首先通过Market1501中的真实行人标签,计算训练集中所有图片对对应的时空点对对应的迁移时间,这里可视化了从摄像头1出发的行人,到达其他摄像头需要的时间的分布。
可以看到,到达不同目标摄像头的峰值位置不同,其中从摄像头1到摄像头1,意味着被单个摄像头拍到连续多帧,所以峰值集中在0附近,从摄像头1到摄像头2,峰值集中在-600附近,意味着大部分人是单向从摄像头2运动到摄像头1,等等,并且,说明这个数据集中存在显著可利用的时空规律。
无监督的时空模型构造我们将迁移时间差命名为delta,这样说起来方便(装逼)一点。
如果我们能够统计一个数据集中的所有delta,给定一个新的delta(两个新的图片对应的两个时空点算出来的),我们能够用极大似然估计,用在这个delta前后一定范围(比如100帧)的delta的出现频率(=目标范围delta数量/总的delta数量),作为新时间差出现的概率,也就是两个时空点是同一人产生的概率。
但是!问题是我们在目标场景上往往是没有行人标记数据的!
于是我们就思考,
我们能不能根据两个时空点对应的两张图是否属于同一个人,来决定两个时空点是否属于同一个人?
而两张图是否属于同一个人,其实是一个图像匹配的二分类问题,我们可以用一些视觉模型来做,
但是这种视觉模型往往是需要有标签训练的,无标签的视觉模型往往比较弱
视觉模型弱没关系!我们相信跟时空模型结合就能变成一个强大的分类器!要有信仰!
只要我们能无监督地把时空模型构造出来,结合弱的图像分类器,因为加了时空信息,一定能吊打其他无监督模型!
思路有了,实现就很自然了,
我们先在其他数据集上(于是我们就可以说这是一个跨数据集的任务了)预训练一个卷积神经网络,
然后用这个卷积神经网络去目标数据集上提特征,
用余弦距离算特征相似度
将相似度排在前十的当做同一个人
用这种“同一个人”的信息+极大似然估计构造时空模型
图像分类器上,我们这里用的是LiangZheng的Siamese网络,他们的源码是用MATLAB实现的,我用Keras了一把:
时空模型的极大似然估计可以看
聪明的读者应该会注意到,这个图像分类器是在其他数据及上预训练的,由于特征空间中数据分布不同,这个图像分类器太弱了,对于目标数据集来说,前十里会有许多错的样本,导致构造出来的时空模型和真实的时空模型有偏差
可以看到,构造的模型跟真实的模型还是有些差别的,但是峰值位置还是差不多,一定程度上应该还能用,但我们还是希望构造的模型尽量接近真实模型的。
于是我们开始思考
导致模型出现偏差的因素是什么?是错误的样本对
如何去掉错误样本对的影响?我们能不能把错误的样本对分离出来?没有标签咋办?
(灵光一闪)错误的样本不就跟我瞎选的差不多?那我是不是可以随机地选样本对,算一个随机的delta分布出来
将估算的delta分布去掉随机的delta分布,剩下的多出来的部分,就是由于正确的行人迁移产生的,不就得到真实的delta分布了?
于是我们可视化了一下随机的delta分布
可以发现,
确实与估计模型和真实模型不同
存在较多抖动