爱收集资源网

行人检测与行人重识别进行结合进行场景图片进行特定行人

网络整理 2022-05-14 08:02

0 前言

最近,我正在做一个与我自己的主题相关的小项目。行人检测与行人重识别相结合,用于搜索场景图片中的特定行人。因为我也赶时间,所以先用已有的模型搭建一个简单的demo。简单效果如下图,速度大致为20FPS:

首先,给定要检索的行人:

检索监控场景图片中的行人:

还有一个视频演示:

使用另一个摄像头拍摄的特定行人的以下图像来搜索视频中的人:

从视频效果可以看出,对于遮挡等情况的效果还是很不错的。我也尝试过单目标跟踪和多目标跟踪,但是直接使用的效果比较差。

1 行人检测部分

行人检测首先尝试使用之前的RFSong,发现在这种监控场景下效果很差。可能是 VOC 数据集太小而无法实现良好的泛化。因为这个监控场景在VOC数据集中很少有相似度,训练出来的网络泛化能力较差,对于监控场景和一些密集的行人场景不太理想。为了达到更好的效果行人检测输入图片,需要在 COCO 等包含大量行人的数据集上进行训练,以便网络能够在这种场景下“识别”行人。

这种监控场景的目标往往是中小型的,所以我觉得YOLO应该还是挺适合的,而且YOLO也提供了COCO权重,所以我就先用YOLO来做。行人检测YOLO代码主要使用如下:

​github.com

我在监控场景和行人密集的情况下测试了YOLO416 COCO权重,结果还是不错的,所以直接使用,然后尝试做一些改进,比如剪枝和类似RFSong的设计尝试。

2 行人重识别

人员重识别部分基于 Bag of Tricks 和 A Strong ReID Baseline 的开源代码。我也很喜欢这个作品,感觉很有帮助,只用了全局特性,没有那么多花哨的设计:

%3A//github.com/michuanhaohao/reid-strong-baseline

由于需要在实际监控场景中进行一些简单的演示,懒得标注,所以比较关心跨域性能,也就是泛化性好。

论文中也有一些跨域的实验,发现如果去掉随机擦除(REA)操作,跨域性能会好很多。

因此,为了获得更好的泛化性能,可以直接证明:

行人检测输入图片

训练过程中去掉了随机擦除操作,因为随机擦除可以引导网络学习更多与背景相关的信息。多个数据集是联合训练的。这里我将联合训练 Market1501 数据集、CUHK03 数据集和 MSMT17 数据集,然后在没有训练的 DukeMTMC 数据集上进行测试,看看它的跨域表现如何。使用 IBN-Net,跨域效果更好。详细介绍可以看下面。跨域效果确实有一些改进:

量子比特:唐晓鸥为CNN擦了一颗强效药丸​​​​​​​​​​​

我在上面的联合数据集上训练了自己,然后在未经训练的 Duke 数据集上进行了跨域测试,然后将每个技巧与消融实验进行了比较:

在DukeMTMC数据集的测试集中,效果rank1达到了71.9,mAP也有56.2行人检测输入图片,说明跨域效果应该还可以,小显示应该不行是个问题。

3 行人检测+重识别

代码主要是去掉两个代码的训练部分,只保留与推理相关的代码。查询文件夹是存放要查询的图片。命名格式与market1501一致。详情请参考以下文章:

行人重识别数据集描述 - Market-1501​blog.fangchengjin.cn

data/samples 文件夹包含需要检索的图像。检索完成后,它们将保存在输出文件夹中。

需要注意的是,行人检测和行人重新识别结合得更好。Reid使行人检测有更多的错误检测并且需要更高的召回率,因为通过reid可以通过相似度比较来消除一些背景。但是如果overconfidence阈值设置过低,很多proposal会进入reid模型,降低模型的速度。所以需要合理设置,这里我设置了conf-thres=0.1,nms-thres=0.4。

4 下一个方向

这只是一个小demo,所以后面还有很多改进工作需要做。

1. 行人检测部分使用RFSong在COCO+VOC联合训练中的权重进行检测,参考以下文章:.

2. 检测与跟踪的结合

SYUI:在工程实践中,为什么要在目标检测中加入目标跟踪?​专兰.知乎.com

3. 行人重识别模型的剪枝和蒸馏加速推理

总结

还是欢迎各位大佬交流指正。代码和权重文件会先发到组文件中,然后再整理后分发到github上。

希望大家能加入更多的群,一起交流,一起进步。云深不知何去何从——目标检测 763679865

代码链接:

加群交流:云神不知何处——目标检测763679865

行人检测 机器学习