在前一篇文章中,我们讨论了用于人体检测的早期方法,例如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
这个模型的准确率最高,也有人会说这个模型有点过于灵敏,因为它甚至检测出测试视频 中左下角的塑料人体模型了。基本没有出现误报、重报、漏报等问题。但是这个模型也是 最慢的,在启用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加速的话,现代的机器学习开发库可以提供 合理的帧速率。
原文链接:Real-time Human Detection in Computer Vision — Part 2
汇智网翻译整理,转载请标明出处