本项目使用Yolov7+Reid实现的行人重识别功能,可做跨视频人员检测。
应用场景:
可根据行人的穿着、体貌等特征的Reid算法在视频中进行检索,可以把这个人在各个不同摄像头出现时检测出来。可应用于犯罪嫌疑人检索、寻找走失儿童等。支持GUI界面。
支持功能:
1.reid训练
2.人员标注
3.人员查找(可做跨视频人员检测)
matplotlib>=3.2.2
numpy>=1.18.5
opencv-python>=4.1.2
Pillow>=7.1.2
PyYAML>=5.3.1
requests>=2.23.0
scipy>=1.4.1
torch>=1.7.0
torchvision>=0.8.1
tqdm>=4.41.0pytorch-ignite=0.4.11
Reid训练
ps:Reid理论部分参考:Reid理论视频参考课程
项目支持多网络,如resnet50, resnet50_ibn_a, se_resnext50等主干网络。
准备工作
代码准备
GitHub - YINYIPENG-EN/yolov7_reid: 使用yolov7+reid实现行人重识别,可做陌生人检索
git clone https://github.com/YINYIPENG-EN/yolov7_reid.git
数据集准备
将Markt1501数据集放项目(yolov7_reid)的在data下:
权重准备
权重链接:
链接:百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固,支持教育网加速,支持手机端。注册使用百度网盘即可享受免费存储空间https://pan.baidu.com/s/1QYvFE6rDSmxNl4VBNBar-A
提取码:yypn
将r50_ibn_2.pth放在yolov7_reid/weights下
训练
开发不易,yolov7 reid中的核心训练代码部分为有偿提供。【拒绝讲价】可扫描文末的二维码添加
有偿训练代码有两种:含tensorboard与不含tensorboard(价格不一样)
python tools/train.py --config_file configs/softmax_triplet.yml
即可开启训练:
=> Market1501 loaded
Dataset statistics:
----------------------------------------
subset | # ids | # images | # cameras
----------------------------------------
train | 751 | 12936 | 6
query | 750 | 3368 | 6
gallery | 751 | 15913 | 6
----------------------------------------
Loading pretrained ImageNet model......
2023-02-24 21:08:22.121 | INFO | engine.trainer:log_training_loss:194 - Epoch[1] Iteration[19/1484] Loss: 9.194, Acc: 0.002, Base Lr: 3.82e-05
2023-02-24 21:08:22.315 | INFO | engine.trainer:log_training_loss:194 - Epoch[1] Iteration[20/1484] Loss: 9.156, Acc: 0.002, Base Lr: 3.82e-05
2023-02-24 21:08:22.537 | INFO | engine.trainer:log_training_loss:194 - Epoch[1] Iteration[21/1484] Loss: 9.119, Acc: 0.002, Base Lr: 3.82e-05
训练的权重会保存在logs下(tensorboard也会存在这里)。
测试
该脚本为针对训练后的模型单独获得测试结果,例如mAP、Rank等指标。
python tools/test.py --weights weights/ReID_resnet50_ibn_a.pth
测试结果如下:
Validation Results
mAP: 92.0%
CMC curve, Rank-1 :97.2%
CMC curve, Rank-5 :99.1%
CMC curve, Rank-10 :99.5%
行人重识别
链接:百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固,支持教育网加速,支持手机端。注册使用百度网盘即可享受免费存储空间https://pan.baidu.com/s/1QYvFE6rDSmxNl4VBNBar-A
提取码:yypn
检测:将 ReID_resnet50_ibn_a.pth放在👂person_search/weights文件下,yolov7.pt放person_search下
该项目可用于做reid识别,可用于做跨视频人员识别
reid网络采用resnet50_ibn_a(权重需要和defaults.py中的MODEL.NAME对应),支持se_resnext50网络。
该项目没有将yolov7训练加入,只是将检测功能和reid进行了整理。
person_search下只进行检测,不进行reid的训练,reid的训练在yolov7_reid中。
从视频中获取陌生人(待检测人员)图像
python get_query.py
可从弹出的视频中利用鼠标框选待检测的人员(陌生人员)。
操作方法:
运行程序后用鼠标左键从目标左上角进行框选,按“空格”键继续播放视频(会自动把框选的图像进行保存)
该人员图像会保存在query文件夹中,默认命名格式为markt1501。
ps:也可以直接将图像放在query文件中,但名字也需要按mark1501命名。
人员检测
参数说明:
--weights: yolov7权重路径
--source: video/file/ path
--imgsz: 输入图像大小,默认640
--conf_thres:置信度阈值
--iou_thres:iou阈值
--classes:过滤的类
--dist_thres:reid对比的距离阈值(小于该阈值判断为同一个人)
--save_res:保存视频图像
python search.py --weights yolov7.pt --source demo.mp4 --dist_thres 1.5
检测后的视频会保存在runs/detect/下
检测效果如下:
GUI界面
GUI部分未开源,该部分为有偿提供。