一、什么是行人重识别
行人重识别(Person Re-identification也称行人再识别,简称为ReID,是利用计算机视觉技术判断图像或者视频序列中是否存在特定行人的技术;或者说,行人重识别是指在已有的可能来源与非重叠摄像机视域的视频序列中识别出目标行人。广泛被认为是一个图像检索的子问题。给定一个监控行人图像,检索跨设备下的该行人图像。在监控视频中,由于相机分辨率和拍摄角度的缘故,通常无法得到质量非常高的人脸图片。当人脸识别失效的情况下,ReID就成为了一个非常重要的替代品技术。ReID有一个非常重要的特性就是跨摄像头,所以学术论文里评价性能的时候,是要检索出不同摄像头下的相同行人图片。
行人重识别的研究面临着诸如图像分辨率低、视角变化、姿态变化、光线变化以及遮挡等带来的诸多挑战。比如,1)监控视频的画面一般比较模糊,分辨率也比较低,如图4(a)所示,所以利用人脸识别等方式无法进行重识别的工作,只能利用头部之外的人体外观信息进行识别,而不同行人的体型和衣着服饰有可能相同,这为行人重识别的准确度带来了极大的挑战;此外实际视频监控下的场景非常复杂,周边杂物较多,场景复杂,画面很容易出现遮挡等情况,如图4(b), 这种时候靠步态等特征就很难进行重识别。行人重识别的图像往往采自于不同的摄像机,由于拍摄场景、摄像参数不同,行人重识别工作一般存在光照变化及视角变化等问题,如图4(c)、(d)所示,这导致同一个行人在不同摄像机下存在较大的差异,不同行人的外貌特征可能比同一个人的外貌特征更相似;进行重识别的行人图像可能拍摄于不同的时间,行人姿态、衣着会有不同程度的改变。此外在不同的光照条件下,行人的外观特征也会有很大的差异,如图4(e)。以上情况都给行人重识别的研究带来了巨大的挑战,因此目前的研究距离实际应用层面还有很大的距离。
二、环境搭建
参考博文的地址:
行人重识别Deep person reid源码测试(Torchreid)(一)_Ysn0719的博客-CSDN博客_torchreid
代码下载的地址:
GitHub - KaiyangZhou/deep-person-reid: Torchreid: Deep learning person re-identification in PyTorch.
论文的地址:
https://arxiv.org/abs/1910.10093
下载训练好的模型:
Model Zoo — torchreid 1.4.0 documentation
数据集下载:
Market-1501
2.1创建虚拟环境并安装配置软件
git clone GitHub - KaiyangZhou/deep-person-reid: Torchreid: Deep learning person re-identification in PyTorch.
# 然后重新创建一个python版本为3.7的虚拟环境,命名为torchreid
conda create --name torchreid python=3.7
#激活环境
conda activate torchreid
#找到你所下载的源码文件夹
cd deep-person-reid-master/
# 安装环境依赖,这个前提是保证你已经找到正确的源码路径以及各包版本正确
pip install -r requirements.txt
#安装pytorch
conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch
2.2 怎么运行
当将上面的依赖环境都安装完后,接下来使用源码中的py文件进行环境的配置:
# 最后一步安装torchreid的setup.py这个执行文件,环境就配置完成
python setup.py develop
可以参考以下网址的指导方法:
How-to — torchreid 1.4.0 documentation
根据网站上提示的测试方法,进行对应的测试:
2.3 训练
1.准备数据集
数据集在这里直接使用的是Market1501数据,需要先到网址下载这个数据,然后解压后,放置到源码"deep-person-reid-master"——>“reid-data”——>"market1501"文件夹下面。我的文件目录是下面这样的:
2.训练
在一层目录 deep-person-reid文件夹下面新建一个py文件下创建文件:
getstart30.py
文件的内容为:
其中训练后模型保存的路径,需要自己指定并创建文件夹。
# coding=gbk# 模块引入import torchreid# 加载数据管理器datamanager = torchreid.data.ImageDataManager(root='reid-data',sources='market1501',targets='market1501',height=256,width=128,batch_size_train=32,batch_size_test=100,transforms=['random_flip', 'random_crop'])# 构建模型、优化器和lr_schedulermodel = torchreid.models.build_model(name='resnet50',num_classes=datamanager.num_train_pids,loss='softmax',pretrained=True)model = model.cuda()optimizer = torchreid.optim.build_optimizer(model,optim='adam',lr=0.0003)scheduler = torchreid.optim.build_lr_scheduler(optimizer,lr_scheduler='single_step',stepsize=20)# Build engineengine = torchreid.engine.ImageSoftmaxEngine(datamanager,model,optimizer=optimizer,scheduler=scheduler,label_smooth=True)# 进行培训和测试engine.run(save_dir='log/resnet50',max_epoch=60,eval_freq=10,print_freq=10,test_only=False)
3.测试
#测试
engine.run(
save_dir='log/resnet50',
max_epoch=60,
eval_freq=10,
print_freq=10,
test_only=True,
visrank=True
)
检测的结果会保存在:
'.../log/resnet50'的文件夹下面。
结果显示为:绿色表示是同一个人的标注,红色表示不是,0001表示的是第一个人
三、数据集说明
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测试设置下使用。