第五章 实时路况检测系统的设计与实现
物体识别技术被广泛应用于人们的生产生活中。随着深度学习与云计算的飞速发展,带动了物体识别技术产生质的飞跃。高分辨率图像和检测的实时性要求越来越高。
从本章开始,我们从无到有开发一个小型的物体识别(路况信息识别)系统。整个系统包括两大部分,一个是线下网络的训练和验证,另一个是在线物体识别。第一部分线下网络训练主要用于网络参数的训练,第二部分在线物体识别即为系统的实际应用。这两部分相辅相成,互为补充。
在线物体识别系统一般包括4个组成部分,分别是图像采集,图像预处理,图像特征提取以及图像匹配与识别。
5.1 路况检测系统需求分析
物体识别技术虽然很早就已经开始应用,但是由于检测技术一直无法突破,导致识别领域大多只限于科学研究,并没有在实际生产生活中发挥作用。随着各行业的飞速发展,尤其是农业现代化进程加快,工业4.0时代全面开启,计算机视觉领域也迎来一波迅猛发展。社会化大生产导致了分工明确,也促使了机器代替人工的迫切需求。机器能达到人类无法企及的计算速度,算法能发现人眼捕捉不到的信息。日常生活中我们仍能接触到很多图像检测的应用,比如,手机刷脸解锁,刷脸支付,过安检接受检查等,人们有意或无意间都会碰到这些有趣的事情。物体识别算法已经融入到了人们生活的方方面面。实时路况检测就是一个重要的研究方向。想象一下,每天中国的道路上奔跑着数以千万记的车子,同时每天又在发生着一些本可以避免的交通事故。如果每个车上都安装一套这样的实时检测路况的系统,很大程度上能帮助司机提前做出判断,从而减少事故的发生。
构建一个高效可用的实时路况检测系统需要具备很多优良的性能,主要的需求如下所示:
1、系统的功能性需求就是,当我们的车子行驶在道路上时,该检测系统能实时地检测到道路及两旁的目标物体并标出目标的具体位置和置信度。这些目标物体包括行人,过往车辆,交通标识等。系统先根据数据集训练模型,然后从摄像头视频流采集到的一帧帧的图像经过模型进行预测,最后返回到客户端与用户交互。
2、系统的性能需求。要求模型的检测既能保证准确率,又能保证速度。深度学习模型在训练时耗时长,对硬件要求高,这就要求能够真正适应实时路况的场景需求。
3、系统的可移植性。系统要求预测模块能和系统中其他的模块很好地融合在一起,那么算法就应该具备高可移植性。
4、系统的鲁棒性。考虑到实际中的路况信息的复杂性,以及室外天气多变,这些都是阻碍系统正常检测的因素。这就要求系统有一定的鲁棒性,能够在不同场景和天气条件下正常检测。
5.2 系统概述
系统采用流式开发模型。具体过程是先从视频画面中采集图像,接着进行图像预处理,再进行图像特征提取,最后进行图像识别,这几个模块顺序执行,实现了真正的端到端的处理过程。系统的处理流程如图5-1所示
该系统的具体执行流程为:
1、图像采集:图像采集是指通过采集视频流中的每一帧。
2、图像预处理:裁剪、规范化等处理。
3、图像特征提取:提取图像中的数字化信息,生成特征图。
4、图像特征匹配:将提取的特征与数据集中的标签进行匹配。
该系统中网络训练阶段存在着大量矩阵运算和线性运算。为了保证快速完成任务,系统使用了GPU进行计算加速。系统的开发环境和工具如下:
1、开发平台:Windows10、NVIDIA GTX 1080。
2、开发工具:JavaWeb、CUDA、OpenCV。
5.3 系统架构
在弄清楚了实际的需求后,我们确定使用客户端/服务器模式作为整体系统的架构。服务器端的主要功能就是提供识别服务,识别服务的核心主要是由第四章提出的基于SSD改进的物体识别方法。服务器主要工作流程是接收视频数据流并提取图像后对图像数据做处理,最终将标定好的图像传输到客户端。客户端使用JavaWeb技术来实现,通过发送HTTP请求到服务器,服务器端将结果以JSON格式返回给客户端。系统的整体功能模块图如图5-2所示,从图中我们可以看出,系统首先分为两个比较大的模块,分别是离线的网络训练和在线的物体识别,这两个大模块又包括了一些小模块,接下来会详细介绍。
![图5-2 系统整体框架图](https://i-blog.csdnimg.cn/blog_migrate/7835c874333a33fb74e87b80c7f967e7.png)
5.3.1 视频流解析
这个模块主要是用来对视频流进行取帧操作,将视频截取成一帧一帧的图像,然后送到后续的模块进行处理。工作示意图如图5-3所示。
5.3.2 图像预处理
从视频流中取到的图像是原始图像,并不能直接输入进检测算法进行计算,需要对图像进行预处理。预处理的操作主要包括缩放、裁剪和归一化等。工作示意图为5-4。
![图5-4 图像预处理模块](https://i-blog.csdnimg.cn/blog_migrate/1bf1b3d4aade341d1954ef3f86f66c85.png)
5.3.3 物体识别算法模块
这个模块是整个系统的核心部件。模块本身是个大模块,其中又包括了几个小模块,这些小模块分别执行检测算法中的一个步骤。训练模块根据系统提供的数据集对网络的参数进行学习,验证模块用来测试生成的深度模型是否达到相应的准确度,特征提取模块用来提取图像中的特征图,预测模块根据特征图进行目标分类和边框回归。整个大的模块流程图如图5-5所示:
![图5-5 识别算法模块](https://i-blog.csdnimg.cn/blog_migrate/4495ab3bf985d539c93268047c664ad1.png)
5.3.4 日志模块
这个模块用来记录检测过程中产生的识别信息。比如:每一帧视频中是否包含想要检测到的物体,如果有,则记录物体的边框位置和置信度。流程图如图5-6所示:
5.4 系统流程
5.4.1 物体识别流程
这个模块用来记录检测过程中产生的识别信息。比如:每一帧视频中是否包含要检测的目标。整个系统的流程图如图5-7所示,流程图中包括了前面讲的几个模块。这些模块按顺序组成一个端到端的图像检测系统,具体流程图如图5-7所示:
从图中可以看出,系统从读取视频流开始,逐帧读取视频中的每一帧图像,然后将图像进行预处理(包括图像缩放、裁剪和归一化),处理过的图像再经过特征提取,得到深度特征图,再根据特征图进行物体类别和边框的预测,最后将预测产生的数据写入日志。系统的具体流程图如图5-8所示。
5.4.2 网络训练流程
神经网络算法的流程就是网络训练的过程,也是网络学习参数的过程。如前面所讲的,网络的训练由两个阶段组成,一个是前向传播得到误差,另一个是反向传播修改网络参数。
前向传播就是经过一系列卷积,池化,ReLU非线性转换的过程。反向传播就是向前传递误差,最终修改参数的过程。网络训练的流程图如图5-9所示:
![图5-9 网络训练流程图](https://i-blog.csdnimg.cn/blog_migrate/66d2c888c384b1c52ba28b8e6a6107c5.png)
5.5 系统测试与分析
在整个系统需求分析里,最重要的两个技术指标就是系统的识别能力和识别速度。在本节中将会在实际场景下对系统进行全面的测试。
5.5.1 系统的检测效果
我们的系统客户端和服务器均使用流行的javaweb技术,系统客户端是基于HTML开发的,使用浏览器打开就能访问到业务功能,比如可以点击选择一张图像进入系统,随后就会出现被标定好数据的图像进行对比。服务器端是用来训练模型的,可以选择配置文件和相应的数据集,以及规定好批量大小,点击开始训练就可以实现网络模型的拟合了。训练效果如图5-10所示。训练好模型现在我们选择一张图像对系统进行检验,检验结果如图5-11所示:
图5-10 模型训练功能图
图5-11 系统检测样例
5.5.2 系统的性能测试与分析
本人对系统的性能进行了详细的测试,系统的测试尝试了多个不同的基准数据集。本节使用多样的模型参数进行了测试,分别对比多种情况下系统的准确性和实时性。
论文在训练的过程中使用了两种不同的数据集,一种是常用的PASCAL VOC2007,另一个也是一个公开的数据集CityScapes。VOC数据集包含常见的20类物体,CityScapes数据集是一个致力于城市场景(city sence)语义理解的公开数据集。CityScapes数据集是近几年才问世的,质量较高,主要用来做图像分割任务,将其标注成了为VOC格式,以达到训练的要求。测试集采用手工标定的CityScapes。论文使用的硬件测试环境为:CPU Intel i7-4790和NVIDIA GTX1080。表5-1给出测试结果,测试分别使用 , 和 大小的图像。
通过以上的分析和表中测试数据的验证,本论文实现的检测模型在图像尺寸为 ,且候选框为200,置信度为0.6时速度和准确度均达到最佳,并且速度也达到了实时检测的需求。因此实际使用中常推荐上述组合参数。
5.5.3 系统的优缺点
回顾之前整个检测系统的详细设计与实现,并且结合测试结果来看,论文实现的实时物体识别系统具有如下几个优点:
1、系统满足最基本的功能性需求,即该检测系统能实时地检测到道路及两旁的目标物体并标出目标的具体位置和置信度。这些目标物体包括行人,过往车辆,交通标识等。系统先根据数据集训练模型,然后从摄像头视频流采集到的一帧帧的图像经过模型进行预测,最后返回到客户端与用户交互。
2、系统的性能较高。模型的检测既能保证准确率,又能保证速度。还具有很高的实时性。
3、系统的可移植性。系统可以很好地将预测模块能和系统中其他的模块融合在一起。
4、系统的稳定性。得益于Web技术的先进和成熟等优势,系统可以稳定地运行在服务器上。
但是,虽然系统完成了大部分的需求,但是仍然不可否认的是系统还存在一些缺点:
1、系统的硬件要求高,特别是对GPU的要求很高。这无形中就加大了系统开发的成本,不利于系统升级。
2、当前系统的算法只满足固定需求的检测任务。一旦产生需求变更,就不能很好的扩展程序。
3、当前系统仍存在优化的空间。从第四章可以看出,检测算法一步一步发展起来的过程是艰辛的,但算法中每一个部分都还有很大的优化空间。
4、系统的鲁棒性没有达到高要求。在光线较暗的情况下系统检测效果不佳,系统仍需要增加一些策略来提升暗光检测。
5.6 本章小结
这一章里,我们设计了一个实时的路况信息检测系统。论文详细地介绍了系统的功能和使用流程。随后又从系统性能(重点分析了检测的速度和精度)对系统进行了整体分析。即证明了系统的高可用性,又证明了改进的算法对于提高识别率帮助很大。