最近在做自己课题相关的小项目,行人检测与行人重识别进行结合进行场景图片进行特定行人的检索由于也比较着急,先利用现有的模型搭建了简单的demo,简单效果展示如下,速度大概在20FPS:
先是给定需要检索的行人:
在监控场景图片进行检索该行人:
利用下面一张其他摄像头拍摄的特定行人图片在视频中进行搜人:
https://www.bilibili.com/video/av69353188/
由视频效果可以看到对于遮挡等情况效果还是非常好的,自己也试过单目标跟踪多目标跟踪,直接用效果都是比较差的。
行人检测先是尝试使用之前的RFSong进行尝试,发现在这种监控场景下效果非常不好,可能是VOC数据集太小了,难以实现很好的泛化。因为这种监控场景在VOC数据集很少有类似的,因此使得训练的网络泛化很差,在监控场景以及一些密集行人场景都不太理想。为了实现更好的效果,需要在COCO等包含大量行人的数据集进行训练,这样网络才能“认识”这种场景下的行人。
这种监控场景目标往往也都是中小型的,因此感觉YOLO应该还是蛮合适的,而且YOLO也有提供COCO权重,我就直接先用YOLO来做了。行人检测YOLO代码主要采用下面这个:
https://github.com/ultralytics/yolov3github.com
自己对YOLO416 COCO权重在监控场景和行人密集情况都做了测试,效果也都还是不错的,因此先直接用,后面尝试进行一些改进,例如进行剪枝以及类似RFSong的设计尝试。
行人重识别部分是利用Bag of Tricks and A Strong ReID Baseline的开源代码基础上做的,我也非常喜欢这个工作,感觉还是很有帮助的,并且仅仅利用全局特征,没有那么多花哨的设计:
https://link.zhihu.com/?target=https%3A//github.com/michuanhaohao/reid-strong-baseline
https://zhuanlan.zhihu.com/p/61831669
由于需要在实际监控场景进行一些简单演示,并且自己也实在懒得去标注,所有比较关注的是跨域的性能,也就是泛化要很好才行。
论文中也有关于跨域(cross-domain)的一些实验,发现去掉随机擦除(REA)操作跨域性能会好很多。
因此为了实现更好的泛化性能,使得可以直接演示:
量子位:汤晓鸥为CNN搓了一颗大力丸zhuanlan.zhihu.com
自己在上述联合数据集进行训练,然后在没有训过的Duke数据集进行跨域测试,然后对各个trick进行了消融实验对比:
在DukeMTMC数据集的测试集进行测试的效果rank1达到了71.9,mAP也有56.2,,说明跨域效果应该还是OK的,做个小展示应该问题不大。
代码主要就是去掉了两个代码的训练部分,只保留推理相关的代码。query文件夹是存放待查询图片,命名格式与market1501保持一致,具体介绍可以看看下面这篇文章:
Person Re-identification数据集描述——Market-1501blog.fangchengjin.cn
data/samples文件夹下就是需要进行检索的图片,检索完成后,保存在output文件夹。
需要注意的是,行人检测与行人重识别如何更好的进行结合。reid使得行人检测可以存在多一些的误检,要求recall比较高,因为一些背景可以通过reid进行相似度比较从而排除掉。但是如过置信度阈值设的太低,会有很多的proposal要进入reid模型,降低模型的速度。因此,需要进行合理的设置,这里我就设置了conf-thres=0.1,nms-thres=0.4。
这个还只是个小demo,因此还是需要后面做很多改进工作。
1. 行人检测部分利用RFSong在COCO+VOC联合训练的权重进行检测,参考下面文章:。
https://zhuanlan.zhihu.com/p/47196727
https://zhuanlan.zhihu.com/p/36734511
2. 检测与跟踪的结合
SYUI:工程实践中,目标检测为何要加目标追踪?zhuanlan.zhihu.com
3. 对行人重识别模型进行剪枝、蒸馏,加快推理速度
还是欢迎各位大佬交流指正,代码和权重文件先传到群文件了,后面稍微整理下放到github。
希望大家多多加群,一起交流进步,云深不知处-目标检测 763679865
https://github.com/songwsx/person_search_demo
加群交流: 云深不知处-目标检测 763679865