ReID技术概述
什么是ReID
行人重识别是指利用计算机视觉技术,判断在不同时间段、不同监控下出现的行人图像是否属于同一人员的技术。行人重识别是最近几年在视频分析领域下热门的研究领域,可以看做是人脸识别应用的拓展。现在大街上的监控较多,由于设备质量、成像光线、成像角度、以及成像距离的因素,在监控视频中得到的人的特征往往是不清晰的,人脸的分辨率是不足以做人脸识别的,所以提出了根据行人的穿着、体态、发型等信息认知行人的reid。可与行人检测、行人跟踪技术相结合,可以弥补目前监控摄像头的视觉局限性,可以广泛应用于监控、安防等领域。
本质上可以看做是图像匹配任务,比如给你一张要匹配的行人的图,要你从数据库中搜索出此人的其他照片。
一般流程
行人重识别的流程大概可以用下图表示:
获取监控的视频流,通过YOLO或者Fast RCNN等目标检测算法,检测出视频帧中的行人,并框选截图并命名保存。在进行行人重识别时,给定目标行人图片,通过行人重识别算法,在保存的图片数据库以及实时视频流中进行查找。若当前查找到,则下次查找在当前行人出现的位置周边进行查找,减小计算量。最后大致分析出行人轨迹,生成视频片段或图片。
Re-ID特点
-
研究对象:
研究的对象是人的整个特征,不以人脸识别作为手段,包括衣着、体态、发型、姿态等等。 -
跨摄像头:
关注跨摄像头上的行人再识别问题。 -
人脸的关系:
可以作为人脸识别技术的延伸,并相互作用,应用于更多场景。 -
具有时空连续性以及短时性。
研究现状
ReID已经在学术界研究多年,但直到最近几年随着深度学习的发展,才取得了非常巨大的突破。
在行人重识别方向上,2005年到2013年间,传统算法一直都占据主要地位;自2014年起,深度学习开始慢慢出现在人们的视线中,并在行人再识别研究中取得了显著性的突破,性能指标远超传统算法。但是根据最近的发展来看,虽然最新的算法达到甚至超越了人类的水平,但是性能指标又到达了一个平台期,目前的研究方向主要是复杂环境、开放环境以及无监督学习领域。
目前SOTA的方法:
难点
-
姿态各异:人体姿态可以是非常动态可变的,捕捉这类可变的对象本身就是一个挑战;
-
光照变化:日光强度,阴影,彩色表面的反光,室内光线,都会导致同一个目标在摄像头中展现出不同的光影和颜色;
-
分辨率变化:由于目标距离摄像头距离不一致, 拍摄得到的图片分辨率也不一样;
-
遮挡:拍摄的行人经常会被移动物体或者静态物体遮挡, 造成行人图片信息的不完整;
-
拍摄条件:不同相机、不同天气、不同时间、不同城市拍摄的图像风格均可能不同。
数据集
reid数据集的特点:
- 数据集规模小,依赖人工标注,耗时巨大且辛苦
- 图片数量在几万张
- ID数量较少
- 摄像头10个以下
- 大多数是学生
- 必须跨摄像头数据
- 影响因素复杂多样
- 连续视频截图
- 同一个人多张全身照片
reid常用数据集以及下载链接
-
Market-1501:
Market-1501 数据集在清华大学校园中采集,夏天拍摄,在 2015 年构建并公开。它包括由6个摄像头(其中5个高清摄像头和1个低清摄像头)拍摄到的 1501 个行人、32668 个检测到的行人矩形框。每个行人至少由2个摄像头捕获到,并且在一个摄像头中可能具有多张图像。训练集有 751 人,包含 12,936 张图像,平均每个人有 17.2 张训练数据;测试集有 750 人,包含 19,732 张图像,平均每个人有 26.3 张测试数据。3368 张查询图像的行人检测矩形框是人工绘制的,而 gallery 中的行人检测矩形框则是使用DPM检测器检测得到的。该数据集提供的固定数量的训练集和测试集均可以在single-shot或multi-shot测试设置下使用。
链接:https://drive.google.com/drive/folders/0By55MQnF3PHCTmgtV1R2cUpWZjA?usp=sharing -
DukeMTMC-reID:
DukeMTMC-reID 于杜克大学内采集。DukeMTMC 数据集是一个大规模标记的多目标多摄像机行人跟踪数据集。它提供了一个由 8 个同步摄像机记录的新型大型高清视频数据集,从视频中每 120 帧采样一张图像,得到了 36,411 张图像。一共有 1,404 个人出现在大于两个摄像头下,有 408 个人 (distractor ID) 只出现在一个摄像头下。
链接:https://drive.google.com/open?id=1jjE85dRCMOgRtvJ5RQV9-Afs-2_5dY3O -
CUHK03:
CUHK03是第一个足以进行深度学习的大规模行人重识别数据集,该数据集的图像采集于香港中文大学校园。数据以”cuhk-03.mat”的 MAT 文件格式存储,含有 1467 个不同的人物,由 5 对摄像头采集。
链接:https://drive.google.com/drive/folders/0By55MQnF3PHCd3h3cjFoeTM4cnM?usp=sharing -
MSMT17:
数据集采用了安防在校园内的15个摄像头网络,其中包含12个户外摄像头和3个室内摄像头。为了采集原始监控视频,在一个月里选择了具有不同天气条件的4天。每天采集3个小时的视频,涵盖了早上、中午、下午三个时间段。因此,总共的原始视频时长为180小时。
最后,训练集包含1041个行人共32621个包围框,而测试集包括3060个行人共93820个包围框。对于测试集,11659个包围框被随机选出来作为query,而其它82161个包围框作为gallery.
(1)数目更多的行人、包围框、摄像头数;
(2)复杂的场景和背景;
(3)涵盖多时段,因此有复杂的光照变化;
复制这段内容后打开百度网盘App,操作更方便哦。 链接:https://pan.baidu.com/s/1E6V-4JYMeIqIPM4lmnaKbw 提取码:v352
评价指标
评价指标:
Rank1:首位命中率(Rank-1 Accuracy)
mAP:平均精度均值(Mean Average Precision,mAP)
Rank5: 前五位命中率(Rank-1 Accuracy)
Rank10: 前十位命中率(Rank-1 Accuracy)
CMC: 计算rank-k的击中率,形成rank-acc的曲线
实现思路
- 先抽取特征再进行比对
- 检索图经过网络抽取图片特征(Feature)
- 检索库里的所有图片全部抽取图片特征(Feature)
- 将检索图与检索库图的特征计算距离(例如欧式距离)
- 根据计算距离进行排序,排序越靠前表示是相似率越高
Resnet50是很多Reid算法实现的基础骨干网络,在Imagenet上训练完全后基础上进行网络修改得到。
比如节选自AlignedReID中的代码:
class ResNet50(nn.Module):
def __init__(self, num_classes, loss={'softmax'}, aligned=False, **kwargs):
super(ResNet50, self).__init__()
self.loss = loss
resnet50 = torchvision.models.resnet50(pretrained=True)
self.base = nn.Sequential(*list(resnet50.children())[:-2])
self.classifier = nn.Linear(2048, num_classes)
self.feat_dim = 2048 # feature dimension
self.aligned = aligned
self.horizon_pool = HorizontalMaxPool2d()
if self.aligned:
self.bn = nn.BatchNorm2d(2048)
self.relu = nn.ReLU(inplace=True)
self.conv1 = nn.Conv2d(2048, 128, kernel_size=1, stride=1, padding=0, bias=True)
代码大致流程:
研究方式
根据罗浩博士的分类方法,大致可以分成5类:
基于表征学习
基于表征学习的方法是非常常用的行人重识别方法,没有直接去考虑图片之间的相似度,而是当做分类问题或者验证问题来对待。
1)分类问题是指利用行人的ID或者属性等作为训练标签来训练模型;
2)验证问题是指输入一对(两张)行人图片,让网络来学习这两张图片是否属于同一个行人。
基于度量学习
度量学习(Metric learning)是广泛用于图像检索领域的一种方法。不同于特征学习,度量学习旨在通过网络学习出两张图片的相似度(聚类)。在行人重识别问题上,具体为同一行人的不同图片相似度大于不同行人的不同图片。最后网络的损失函数使得相同行人图片(正样本对)的距离尽可能小,不同行人图片(负样本对)的距离尽可能大。常用的度量学习损失方法有 对比损失、 三元组损失、 四元组损失等。
三元组损失示意图:
基于局部特征
早期的ReID研究大家还主要关注点在全局的global feature上,就是用整图得到一个特征向量进行图像检索。但是后来大家逐渐发现全局特征遇到了瓶颈,于是开始渐渐研究起局部的local feature。常用的提取局部特征的思路主要有图像切块、利用骨架关键点定位以及姿态矫正等等。
全局特征
全局特征是指每一张行人图片的全局信息进行一个特征抽取,这个全局特征没有任何的空间信息。
向大家推荐一下OSNet(全尺度网络)
-
轻量级网络
-
性能好
-
用途广
-
不易过拟合
切片
PCB方法
PCB+RPP
网络关注部分对比:
姿态
姿态是一种很有意思、很典型的基于局部特征的方法。
首先要有关键点检测
以Spindle Net为例
FEN网络提取特征,FFN网络层次性地融合特征。
基于视频序列
基于单帧图像 的 ReID 方法可以通过一个简单方法扩展到视频序 列, 即用所有序列图像特征向量的平均池化或者最大池化作为该序列的最终特征。
这类方法除了考虑了图像的内容信息, 还会考虑:
- 帧与帧之间的运动信息;
- 更好的特征融合;
- 对图像帧进行质量判断等
RQEN
通过关键点检测,对每一张图片进行打分,希望让网络多学习完整的没有被遮挡的图片,最后进行合成。
基于GAN
GAN的一个重要应用就是图片生成,深度学习依赖大量的训练数据,而目前的行人重识别数据集总体来说规模还是比较小的,CycleGAN等可以实现图片风格的转换,进一步促进了GAN在行人重识别领域的应用。
例如:由于相机的光线、角度等差异,不同相机拍摄的图片存在风格偏差,可以使用CycleGAN来实现相机风格的迁移,从而减小相机之间的风格差异。
CamStyle
基于CycleGAN的相机风格之间的转换,减小光照等影响。
DG-Net
不需要额外标注(如姿态pose,属性attribute,关键点keypoints等),就能生成高质量行人图像。通过交换提取出的特征,来实现两张行人图像的外表互换。这些外表都是训练集中真实存在的变化,而不是随机噪声。
不需要部件匹配来提升行人重识别的结果。仅仅是让模型看更多训练样本就可以提升模型的效果。给定N张图像,我们首先生成了NxN的训练图像,用这些图像来训练行人重识别模型。
训练中存在一个循环: 生成图像喂给行人重识别模型来学习好的行人特征,而行人重识别模型提取出来的特征也会再喂给生成模型来提升生成图像的质量。
如下图所示,由网络合成得到:
网络结构:
距离得分和结构相似度
性能指标
GAN总结对比
未来方向
目前顶尖的行人重识别算法,在一些常用数据集上的表现已经超过人类。
未来需要着力解决的方向应该有:
- 无监督学习和迁移学习
- 构建更大规模的高质量复杂数据集:(DGNet生成DG-Market)
- 构建更强大的特征:OSNet
- 丰富场景:半身照
- 与行人检测和行人跟踪结合
建议文献
- 罗浩,姜伟,范星,张思朋.基于深度学习的行人重识别研究进展[J].自动化学报,2019,45(11):2032-2049.
- Ye M, Shen J, Lin G, et al. Deep learning for person re-identification: A survey and outlook[J]. arXiv preprint arXiv:2001.04193, 2020.(首推)
- Zhou, K., Yang, Y., Cavallaro, A., & Xiang, T. (2019). Omni-scale feature learning for person re-identification. In Proceedings of the IEEE/CVF International Conference on Computer Vision (pp. 3702-3712).
- Zhang, X., Luo, H., Fan, X., Xiang, W., Sun, Y., Xiao, Q., … & Sun, J. (2017). Alignedreid: Surpassing human-level performance in person re-identification. arXiv preprint arXiv:1711.08184.