在前一篇文章中,我们讨论了用于人体检测的早期方法,例如Vila Jones的目标检测框架(Haar级联)和方向梯度直方图(HOG)检测器。我们也看到了这些早期方法存在的问题,例如漏检、误检等。在本文中,我们将了解最新的深度学习技术是如何解决上述这些问题的,并使用代码来实现它。
要快速掌握机器学习应用的开发,推荐汇智网的机器学习系列教程。
1、现代行人检测技术概述
用于人体检测的现代方法,我们认为具有如下特征:
- 深度卷积神经网络
用于行人检测的现代方法大量使用深度神经网络。这一趋势起源于AlexNet在2012年ILSVRC
(Imagenet大规模视觉识别竞赛)中的获胜。AlexNet是一个用于图像分类的深度卷积神经网络(CNN)。从那以后,CNN就被广泛地应用于各种各样的计算机视觉问题,例如图像分类、目标检测和目标定位。正如我们之前所提到的,人体识别是目标检测和目标定位的一种特定应用。
- 多类别目标检测器
现代的基于CNN的目标检测系统的另一个特征就是,它们可以识别多类目标。因此,现代的最先进的人体检测器不仅仅是行人检测器,而是可以检测包含行人在内的多种类型目标的检测器。基于此认识,让我介绍Tensowflow目标检测API和Tensorflow检测模型ZOO。
2、使用tensorflow目标检测API进行人体检测
Tensorflow是来自google的开源API,被广泛地用于使用深度神经网络的机器学习任务。tensorflow
的目标检测API是基于Tensorflow的一个开源库,用来支持目标检测模型的训练和评估。今天我们将了解以下Tensorflow检测模型ZOO,其中包含了一组与tensorflow目标检测API兼容的预训练模型。
在本文创作的时候,Tensorflow检测模型ZOO包含了16个在COCO数据集上预训练的目标检测模型。其中前12个模型提供盒子输出,因此与本文代码兼容。这些模型可以检测包括人体在内的80类目标。现在让我们看看这些模型是如何用于人体检测的。
2.1 搭建一个基本的人体检测器
1、首先并且最重要的,确保Open CV 3.0+ 和Tensorflow 1.5+已经安装。如果你有nVidia的GPU,那么建议使用Tensorflow的GPU版本。
2、为本项目创建一个文件夹
3、从Tensorflow检测模型ZOO下载faster_rcnn_inception_v2_coco.tar.gz 然后解压到项目文件夹。
4、下载tensorflow-human-detection.py 到项目文件夹。然后打开下载的文件,将 /path/to/faster_rcnn_inception_v2_coco
修改为模型的实际路径,然后修改‘/path/to/input/video’指向要处理的视频。我是用的视频是从这里下载的。
5、运行python文件,观察屏幕的输出,按Q即可退出。你可以调节阈值参数来改进检测效果。希望你可以达到如下的效果:
你可以尝试其他11种兼容的模型。当然,这些预训练模型可以识别COCO数据集中的80类目标,只需要简单修改上面的代码就可以检测其他类型的目标。
2.2 测试基准
本文中的结论由运行在笔记本上的上述代码得出,笔记本参数如下:
- Intel Core i7 7700 HQ (up-to 3.8 GHz)
- 16 GB Memory
- nVidia Geforce GTX 1060 6GB VGA
- Ubuntu 16.04, Open CV 3.4 and Tensorflow 1.5.
全部测试都是在TownCenter视频上完成。
3、Tensorflow检测模型ZOO中的不同模型的对比
上面我们演示的是Tensorflow检测模型ZOO中的faster_rcnn_inception_v2_coco模型。当然还有11个兼容的模型可用于行人检测。Google为这些模型提供了量化的分析。
COCO mAP 指的是“mean average precision”。mAP的值越高,就表示检测结果越准确。
我对Tensorflow检测模型Zoo中的下面3个模型更感兴趣:
- ssd_mobilenet_v1_coco,可运行在android手机上
- faster_rcnn_inception_v2_coco ,速度和准确率的平衡较好
- faster_rcnn_nas,准确率最高的模型
下面的内容包含了这3个模型的量化分析。
3.1 SSD Mobilenet V1 COCO Model
这是准确率最低但是检测速度最快的模型。它可以在如今的安卓手机上实时
检测行人。
这个模型在检测近景目标时的效果不错,但是在我们的测试视频上的检测效果比较差,因为其中的行人占画面整体的比例很小。我不得不剧烈地降低检测阈值才能在测试视频上获得合理的检测结果。
在启用GPU的测试当中,帧时长在30~50ms之间变化,大概25FPS。当禁用GPU加速时,每帧处理
时长为60~80ms,大约15FPS。
3.2 Faster RCN Inception V2 COCO Model
我们也尝试了这个模型。就我的经验而言,如果GPU加速可用的话,这是最好的模型,兼顾
处理速度和检测准确率。
在启用GPU的测试中,每帧处理时长大约是200~300ms,大约4FPS。禁用GPU加速后,每帧
处理时长大约1.5~1.6s。
3.3 Faster RCN NAS COCO Model
[外链图片转存失败(img-C4THd7Ir-1565355249310)(human-detection-2/rnc-nas.gif)]
这个模型的准确率最高,也有人会说这个模型有点过于灵敏,因为它甚至检测出测试视频
中左下角的塑料人体模型了。基本没有出现误报、重报、漏报等问题。但是这个模型也是
最慢的,在启用GPU加速的情况下,也需要2.6秒才能处理一帧。
4、与早期方法相比的改进之处
就我的观察而言,所有这些模型都比早期的模型准确。Faster RCN Inception V2 COCO Model
币HOG和HAAR检测器要好的多。这些模型可以提供一个紧贴人体边界的包围框。另外,这些模型
也极少产生误报。重报的情况在有些模型中也有发生,例如当多个人挨的太近的时候。漏检和闪烁在一些模型中偶有发生,但是在更准确的模型中都解决了(通过牺牲计算时间)。
ssd_mobilenet_v1_coco和sd_inception_v2_coco与早期方法相比有小幅改进,但是依然有漏报、误报、包围框不一致等问题存在。
5、与早期方法相比的不足之处
总的来说,基于深度神经网络的方法可以达到更高的检测精度,但需要更多的计算消耗。如果
没有GPU的话,最轻量的模型(ssd_mobilenet_v1_coco)可以比早期方法跑的更快些,但是
准确率的提高非常有限。
要获得准确率方面的明显提升,就需要考虑Faster RCN Inception V2 COCO或更好的模型。这些
模型需要GPU加速才能获得相对合理的处理帧速。
6、结论
在早期人体检测方法中的大多数问题,在新的基于深度学习的方法中都解决掉了。这些
问题的解决需要消耗更多的计算力。但是,有GPU加速的话,现代的机器学习开发库可以提供
合理的帧速率。
原文链接:深度学习行人检测原理及实现 - 汇智网
来源:https://blog.csdn.net/shebao3333/article/details/98990878