基于视频图像分析的公路路面裂缝检测及识别系统总结报告

摘 要
近年来,随着经济的飞速发展和科学技术水平的进步,一方面,人们出行更加便利,另一方面,公路的健康也因车载的加重、恶劣的天气、自然老化等因素的影响而越来越差。路面裂缝作为路面病害的初期表现形式,同时也是路面最常见的病害,在路面病害检测中占据着主要位置。传统的人工检测方法不仅耗时、费力、准确率低而且安全性低。因此,自动裂缝检测识别系统的研究对于确保交通的安全具有重要意义。
本文以实时检测路面裂缝为目标,同时为了避免人工现场拍摄检测可能存在的风险,在研究了国内外路面裂缝检测现状的基础上,开展了基于深度学习的路面裂缝检测研究。

首先,本文研究常用的深度学习算法及模型的原理,以提高检测速度和准确率为目的,研究基于One-stage和Two-stage的算法的原理及优缺点。通过对比分析并针对传统裂缝检测方法的缺点,提出使用基于One-stage的YOLO v3算法进行裂缝的识别分类。本文对该网络模型进行了训练与检验,检测结果表明模型的检测效果符合预期,其识别的准确率能达到99.8%以上。
其次,在研究路面裂缝检测结果的基础上,本文利用层次分析法确立与裂缝检测结果相关、符合公路路面实际场景的3个评价指标(裂缝密度、检测框面积和检测框的特殊形态),建立路面损害状况评价模型。该评价模型对目标检测的结果进行重新表达,将这一检测结果不只是停留在目标的标记,还具有量化的评价结果,使得裂缝检测的结果更易为使用者理解,并指导道路路面的维护与修复。
最后,由于基于深度学习的算法对处理器要求较高,一般只能运行在服务器上,很难在车载或移动端处理器上进行实时运行。考虑到算法应用的实际环境,本文研究了使用轻量化的EfficientNet-lite为backbone的YOLO-Fastest-xl轻量化网络和高性能神经网络前向计算框架ncnn,这两方面的优化大大提高系统推理时的计算效率,进一步减少了模型的参数量和计算量。最终在arm安卓移动端荣耀50进行速度测试,结果显示算法可以达到23.81FPS的处理速度,满足实时性要求。

综上所述,研究以高应用价值为导向,考虑移动端计算资源有限的特性。本文对目标检测及识别算法的精度与运行速度进行了优化,使得每张图片的处理时间满足实时性要求。同时,对目标检测的结果进行了量化评价,形成了一套从检测到评估的完整解决方案,具有较强的应用价值。

关键词:路面裂缝;YOLO v3网络;目标检测;层次分析法;Android系统

目录

第1章 绪论 5
1.1课题来源 5
1.2研究背景 5
1.2.1裂缝种类 5
1.2.2裂缝的检测及识别 5
1.3文献综述 6
1.3.1裂缝检测技术研究现状 6
1.3.2裂缝检测系统研究现状 8
1.4本文的主要研究内容 9
1.5本文的组织结构 9
第2章 基于YOLO v3的路面裂缝检测及识别算法 11
2.1目标检测算法 11
2.1.1 Two-stage目标检测算法 11
2.1.2 One-stage目标检测算法 13
2.1.3两种目标检测算法的比较 14
2.2 YOLO v3原理 15
2.2.1 YOLO v3检测过程 15
2.2.2 YOLO v3网络结构 16
2.2.3 YOLO v3候选框 19
2.2.4 YOLO v3损失函数 21
2.3裂缝检测及识别 21
2.3.1数据集处理 21
2.3.2模型的训练 23
2.3.3训练的结果与分析 24
2.4本章小结 27
第3章 基于层次分析法的路面损害状况评价模型 28
3.1模型的建立 28
3.1.1层次分析法原理 28
3.1.2评价模型的建立 30
3.2模型的求解与分析 31
3.3模型的评价 32
3.4本章小结 33
第4章 移动端的裂缝检测识别系统 34
4.1基于 EfficientNet 的轻量化 YOLO 网络 34
4.1.1 EfficientNet系列网络 34
4.1.2 EfficientNet架构的YOLO-Fastest-xl网络 36
4.1.3 YOLO-Fastest-xl网络残差结构 37
4.2基于NCNN的移动端部署 39
4.2.1 ncnn平台介绍 39
4.2.1 ncnn模型配置 40
4.2.3 ncnn模型转换 40
4.3技术路线设计 43
4.4移动端系统测试 43
4.5本章小结 44
第5章 结论与展望 45
5.1主要成果及结论 45
5.2创新点 46
5.3未来工作展望 46
参考文献 48

第1章 绪论

1.1课题来源

部、省级及以上科研课题。

1.2研究背景
1.2.1裂缝种类

道路路面可以根据路面材料分为三类,分别为沥青路面、水泥路面、砂石路面。不同材料的路面呈现出不同的裂缝类型。考虑到国内道路路面材料大多采用沥青,所以在此以沥青道路裂缝作为本课题组研究对象。

1.2.2裂缝的检测及识别

近年来,随着我国大规模基础设施建设,公路里程在不断增加。然而,随之而来的问题是公路路面情况监控、路面养护都变得十分困难,由于路况原因而造成的车祸次数也不断攀升。对于路面养护,其中一个重要的方面就是对路面因环境变化、超重车辆通过造成的路面裂缝进行修复,从而防止路面损坏进一步扩大。
路面裂缝检测在高速公路的维护中非常重要,我国现在仍以人工检测为主要检测方式。人工检测的方法存在着检测效率低下、劳动强度较大、处理速度相对较慢的问题。同时,这种检测方法在车辆密集的交通路段危险系数大,易造成交通拥堵,不利于作业施工,因而基本上不能够适应高速公路快速发展的要求。因此,研究与开发沥青路面裂缝检测系统和设备,提高沥青路面的裂缝检测效率刻不容缓。

鉴于此,我们决定开发一套公路路面的裂缝检测及识别系统,该系统利用视觉分析的人工智能方法,通过机器学习来实现对公路路面图像实时处理,检测并识别其中的路面裂缝,并按裂缝大小、范围等发送警告。并要求该系统可以部署在机动车行车记录仪、路面监控摄像头、高分辨率卫星图像处理系统等上。

主要待解决问题是如何实现对路面裂缝图像进行图像增强、图像分割、图像去噪、图像裂缝特征提取与识别、路面裂缝定位等关键技术。如何在保证一定检测识别的延时情况下尽可能地提高路面裂缝检测识别的正确率,以及要求用对不同路面(柏油路面,水泥路面等)检测识别的通用性。
本项目的重点是沥青路面裂缝的检测及识别,基于图像的技术是路面裂缝检测的基础,目前国内外主要有基于传统图像处理、基于机器学习与深度学习两种裂缝检测方法。
基于传统图像处理的检测及识别算法主要有图像增强与图像分割。
图像增强能够降低裂缝图像中噪声对目标的干扰与识别,在对沥青路面的检测过程中发现经过图像处理后的路面裂缝图像有利于图像的分割与裂缝图像的识别,能够较好的抑制裂缝图像中噪音。
图像分割的目的是方便提取路面裂缝图像的特征,消除其无关的特征与干扰。然而,路面裂缝的内容十分复杂,图像分割后的二值图像仍然存在着一部分的噪声,同时保证裂缝类型识别的准确度,必须消除这部分噪声的干扰。此外,沥青路面裂缝与路面背景间的灰度存在一定的差异,不含路面裂缝的背景图像差异很小,由此可以判断出路面裂缝的存在,并对路面裂缝图像进行特征提取进行分类。

基于机器学习与深度学习的检测及识别算法将图像特征提取和图像分类两阶段的任务进行整合,通过机器让训练阶段自主执行。这种算法为构建路面裂缝检测的自动化模型提供了一种新的高效的解决方案,因此,本课题组将采用深度学习算法对裂缝图像进行研究。

1.3文献综述
1.3.1裂缝检测技术研究现状

近些年,在路面裂缝检测领域,国内外研究者主要围绕“在高效,准确地测量计算出路面上各类裂缝信息,特别是初期较为细小的裂缝”开展全面而深入的研究,并取得了显著的成果。现阶段裂缝检测以及识别的主要方法可以归纳为两个方面:传统的图像处理方法、基于深度学习的裂缝检测[1]。
Sanchez-Cuevas等[2-3]设计了无人机桥梁检测系统;Amhaz等[4]针对路面裂缝的对比度低、连续性差等特点,提出了一种基于最小代价路径搜索的路面裂缝检测算法;王耀东等[5]等针对全局图像检测精度低的问题,采用分块的思想处理图像。以上这些方法大多数是基于传统的图像处理方法,需要动手设计特征及设定参数,存在“准确率低、鲁棒性差且周期长”等问题。
由于稀疏表示分类方法在人脸识别中获得了成功应用,已被证实对图像遮挡和像素污染具有一定的鲁棒性且为了有效地提升路面裂缝检测的精度,张玉雪等[6]提出了一种基于稀疏表示和多特征融合的路面裂缝检测改进算法:首先在多个特征矩阵下通过求解样本的最优稀疏系数实现对裂缝子块的识别;再通过求解各个特征的分类权重来融合识别结果;最后在子块识别结果上通过融合全局和局部显著性的检测方法提取裂缝细节。
由于传统的检测方法存在众多问题且深度学习领域的大力发展,因此许多国内外学者尝试对经典的深度学习模型进行改进,研究出适合裂缝检测的方法。
梁雪慧等[7]提出了一种基于卷积神经网络的桥梁裂缝识别和测量方法。该方法中提供了从数据处理到裂缝识别定位以及计算裂缝长度和宽度的一系列方法。
由于原始数据集包含低质量的图片如雾天、阴天等特殊天气,建筑物遮挡导致光线不足等,因此事先对原始数据集进行双边滤波和Retinex图像增强解决图像光线不足问题,拉普拉斯锐化提高裂缝边缘细节,直方图均衡化提升裂缝和背景的对比度。主体思想采用一种基于改进GoogLeNet网络的裂缝检测方法,其中在传统的GoogLeNet网络中采用更小的卷积核及及删去不必要的层;用滑动窗口在大图片中裁剪识别裂缝,从而实现裂缝定位;用骨架提取算法计算裂缝的长度和宽度。
图像分割是从图像处理到图像分析的关键步骤,而近年来,用于语义分割的深度学习神经网络在图像分割中比传统方法获得了极大的欢迎、取得了巨大的成功。因此孙梦园等[8]提出了一种基于多尺度卷积网络的路面图像裂缝分割方法。本文中采用编码-解码器网络,跳跃连接不同层级特征,充分利用网络中图像的信息特征;同时设计了多尺度卷积核模块,在检测不同尺寸的裂缝与抑制噪声的表现上取得不错性能。
在传统的编码器-解码器深度网络U-Net,前者逐渐减小空间尺寸而后者逐渐恢复空间尺寸和详细信息[9]。编码器具有四个子模块,其中每个子模块包含两个卷积层与一个最大池化层。解码器由四个子模块组成,特征分辨率通过上采样操作连续提高。在孙梦园等人提出的方法中,引入了编码器-解码器层的概念,对面裂缝图像进行了三次降采样(编码)和三次升采样(解码)。每次降采样经过一次最大池化层以及多尺度卷积模块,而在解码部分中,依次级联来链接生成的特征图,并紧接着内核大小为 33 的卷积层、 Relu 激活层与上采样层,如此轮流。在编码器和解码器之间,模型使用跳级连接,使得在上采样形成的特征图尽可能集成了更多的低层特征和不同尺度的特征。
在图像分割中,不同尺寸的物体总是导致分割困难:一些小规模的对象容易被遗漏,而大型对象可能会超出感知域并导致不连续的预测,分割效果往往不尽如人意。由于裂缝的长度和宽度不定,因此裂缝分割过程中需要提高不同尺寸分割的性能,而提高该性能的主要途径就是扩大感知域。孙梦园等人设计一个多尺度卷积块,以结合三个不同感知域的特征。在该模块中,设计的卷积核大小为1
1,33和55,并且通道的数量随特征深度的不同而变化,然后使用BN层在卷积之后进行级联,从而不仅合理地保持全局特征的权重而且从不同级别获取全局特征图信息。
基于深度卷积神经网络在裂缝检测以及识别领域,取得了显著性的应用,但是目前在路面裂缝检测和识别过程中仍然存在一些问题。一方面是深度学习卷积网络自身存在的诟病,另一方面是路面裂缝检测的特殊性导致的问题,具体如下:
1)深度学习对样本要求比较高,需要大量带标签的数据集,才能保证模型的识别率以及过拟合现象的发生。
2)深度神经网络的模型复杂度高,参数数量大,导致模型规模大。
3)路面复杂,路面图像存在严重的噪声,裂缝尺寸形状各异,裂缝样品不平衡等特点。

1.3.2裂缝检测系统研究现状

目前国内外路面检测系统也有一些较严重的缺陷:第一,车载设备造价昂贵,维护成本大。第二,这些系统的图像处理子系统目前还没有大量使用快速处理技术,对图像裂缝进行检测;第三,仅有部分系统有车辆上显示系统,无具有移动终端识别结果展示功能的裂缝检测系统。第四,检查结果主观性较强,不够客观,检查结果无统一标准,且危险性大。

因此,本课题组的研究重点在于智能算法的建立、基于Android的移动平台的搭建以及评价指标的确立。

1.4本文的主要研究内容

本课题组围绕课题从裂缝、深度学习算法、路况评价、软件系统四个方向出发,查阅了国内外相应领域的论文与成功项目,逐渐形成了研究沥青路面裂缝、建立基于YOLO v3的智能算法、建立基于层次分析法的路况评价模型、搭建基于Android的移动平台的研究思路。
研究对象为沥青路面裂缝;研究的方法为利用YOLO v3算法训练、测试数据集,形成并优化网络模型;研究的结果为基于Android的移动平台展示裂缝的检测与评价。该系统支持主流图像与视频格式,可以利用摄像设备,对公路裂缝进行实时识别或离线识别。此外,利用层次分析法建立评价模型,本文对该系统的检测结果进行统计与分析,合理评估路段的裂缝情况,为公路的养护与维修提供指导建议。

研究以高应用价值为导向,本文考虑项目的场景需求限制,因而选择研究沥青路面裂缝;考虑项目成果的应用范围,因而决定研究成果需要部署在移动端;考虑移动端有限的计算资源,因而决定采用快速的检测及识别算法(YOLO v3算法),并针对移动端设备进行部署优化;考虑到目标检测的结果需要与人进行交互,因而采用层次分析法对系统的检测结果进行客观的量化评价。

1.5本文的组织结构

本文共5章,各章内容如下:
第1章绪论部分,总体介绍了本文的课题来源、研究背景以及研究意义,系统分析了国内外的路面裂缝技术和路面裂缝系统的研究现状及其发展方向。
第2章以深度学习为背景,研究了基于YOLOv3的路面裂缝检测识别算法。研究常用的深度学习算法及模型的原理,以提高检测速度和准确率为目的,研究基于One-stage和Two-stage的算法的原理及优缺点。通过对比分析并针对传统裂缝检测方法的缺点,提出使用基于One-stage的YOLOv3算法进行裂缝的识别分类,并对该网络模型进行了训练与检验,得到较高的准确率和检测速度。
第3章利用评价模型对目标检测的结果进行重新表达,将这一检测结果不只是停留在目标的标记,而是具有量化的评价结果。研究利用层次分析法,通过确立与裂缝检测结果相关、符合公路路面实际场景的评价指标,建立路面损害状况评价模型,以便于裂缝检测的结果更易为使用者理解,并指导道路路面的维护与修复。
第4章是路面裂缝检测系统的设计与实现,主要从轻量化YOLO网络和移动端推理加速框架两个方面对系统的移动端部署要求进行了优化设计与实现。由于基于深度学习的算法对处理器要求较高,一般只能运行在服务器上,很难在车载或移动端处理器上进行实时运行。考虑到算法应用的实际环境,本文研究了使用轻量化的EfficientNet-lite为backbone的YOLO-Fastest-xl轻量化网络和高性能神经网络前向计算框架ncnn,大大提高系统推理时的计算效率,进一步减少了模型的参数量和计算量。最终在安卓移动端的测试结果表明系统能够完成对路面裂缝的实时检测。
第5章对全文工作进行了总结,综合分析本文研究工作的优劣,给出了下一步的工作展望。

第2章 基于YOLO v3的路面裂缝检测及识别算法

传统的裂缝识别方法需要人为的选择裂缝特征,再采用训练好的分类器(如SVM、Random Forest等)对提取特征后的图像进行分类识别。这一过程需要耗费大量的时间和精力,并且需要一定的经验知识才能取得比较好的效果。
随着深度学习的快速发展和R-CNN框架的提出,深度学习在目标识别领域取得了巨大的进展。由于这些方法避免了手工提取裂缝特征,并采用区域候选框和CNN进行裂缝识别,因此在大量实际场景中得到了广泛应用。
区域卷积网络模型(R-CNN)通过region proposal方法实现对物体进行定位识别,但由于计算量大且包含许多重复计算、占用磁盘空间大、训练耗时等缺点,许多学者对其进行了改进研究,YOLO(You Only Look Once)算法应运而生。
YOLO算法打破了RCNN的限制,直接将整张图片作为输入,从而极大的加快了网络训练速度,但也同时损失了准确性。YOLOv2通过去掉dropout层而采用batch-normalization从而提高了目标识别的准确率。YOLOv3则在YOLOv2的基础上进行了改进,通过采用残差模型和FPN架构,极大地提升了网络性能,其迅速速度和检测准确率都非常可观。

本章采用YOLOv3算法对裂缝图像进行识别。通过在已有的公共数据集基础上,增加自己采集到的裂缝图像对网络进行训练,得到网络模型。通过实验,采用测试集对模型进行检验,实验结果表明训练的模型达到了理想的效果。

2.1目标检测算法
2.1.1 Two-stage目标检测算法

Two-stage即两阶段,即将目标检测分为两个阶段。以裂缝图像为例,基于CNN的算法由如下三步组成:
① 利用选择性搜索(Selective Search)或其他方法将裂缝图像分割为许多小的区域,通过比较这些区域的相似度对区域进行合并,并且迭代进行,以此产生区域候选框。
② 将候选区域样本作为 CNN 内部网络的输入,得到对应的裂缝特征向量。
③ 交由训练好的分类器进行分类识别。
至此,完成两阶段检测。
基于 Two-stage 的目标检测网络的基本结构如图2-1所示。

图2-1¬基于 Two-stage 的目标检测网络基本结构

检测网络有如下部分组成:
首先输入裂缝图片,通过卷积神经网络的对裂缝的特征进行提取,即示意图的第一部分,也称为主干网络。常用的主干网络有VGGNet、ResNet、Zenet等。
接下来就是候选区域的生成,通常采用RPN网络完成此过程。同时,也会将裂缝图片划分为背景和目标裂缝两部分,并完成裂缝位置的初步定位。
紧接着是示意图的第二部分,通过采用Roi_pooling层得到候选裂缝,并将候选裂缝对应到裂缝特征图上相应的特征区域,经过全连接层得到裂缝的特征向量,最后通过分类或回归这两个分支完成对裂缝的识别以及裂缝位置的确定。

基于Two-stage的神经网络有R-CNN、Fast R-CNN、Faster R-CNN、R-FCN、 Mask R-CNN等,这些都是对R-CNN的改进,并且在目标识别上取得了非常好的效果。
2.1.2 One-stage目标检测算法

目标检测的另一种方式为基于One-stage检测算法的目标识别。其思想核心是不需要候选框生成阶段,即Region proposal,转而直接给出目标所属类别的概率大小以及坐标位置,只需要经过完整的单次训练便可得到最终的结果。
OverFeat算法可以看作One-stage目标检测的先驱。与Two-stage的候选框生成不同,OverFeat主要通过滑动窗口和规则块来完成。接着采用多尺度的滑动窗口来检测尺寸不一等复杂的目标图像。最后,该算法通过运用卷积神经网络和回归模型完成对目标的识别分类。
与OverFeat算法类似,One-stage算法也是基于这种回归的思想一步完成对目标的分类以及候选框的定位,其网络结构示意图如图2-2所示。

图2-2 One-stage算法网络结构示意图

首先将原始的裂缝图片调整至固定像素大小作为整个网络的输入,选取滑动窗口,如大小 5× 5 的滑动窗口,通过卷积神经网络提取出裂缝特征并进行模型训练,并直接给出每个网格内的裂缝的置信度以及其坐标位置。训练时通常会采取激活函数,如ReLu等。

One-stage目标识别算法主要有YOLO、YOLO v2、RetinaNet、YOLO v3等,这些算法继承了OverFeat算法的基于回归的算法思想,从而提高了网络检测速度。

2.1.3两种目标检测算法的比较

对于目标检测网络来说,其网络模型的性能指标主要在于两方面:检测精度和速度。目标识别的算法也主要分为两类:基于One-stage和Two-stage的目标检测方法。虽然两者都是基于卷积神经网络的目标检测算法,但One-stage网络模型的检测速度比Two-stage的网络模型快,Two-stage网络模型的检测准确率比One-stage网络模型的检测准确率要高。

One-stage通过对卷积网络生成的候选框(anchor)直接进行分类与回归,而Two-stage网络生成的anchor通常需要映射到feature map上,然后通过全连接层后对特征进行分类与回归。由于Two-stage中的每个候选框都需要进行这样的操作,因此其检测速度相对较慢。但也正因为Two-stage有RPN网络的存在,而RPN网络会对经卷积网络处理后生成的裂缝候选区域进行筛选,使得最终训练的anchor并不多,不会产生严重的正负样本不均衡的情况,因此其检测准确率通常要相对较高。

常用的目标识别算法在检测准确率和速度上的如图2-3所示:

图2-3 基于One-stage和Two-stage的目标检测网络比较图

从图中可以看出,基于Two-stage算法的FPN、FRCN的Map最高,即其检测准确率最高,但其时间消耗也多。而基于One-stage的YOLO v3、RetinaNet等网络的检测速度相对较快,但准确率相对较低。

因此,综合两个关键性能指标,本文采用基于YOLO v3的目标识别网络对路面裂缝进行检测识别。

2.2 YOLO v3原理
2.2.1 YOLO v3检测过程

YOLO作为典型的基于One-stage的目标检测算法,其运用回归的思想在提取的物体特征的同时从网络中筛选出目标候选框的位置坐标,从而能完成端到端的目标识别和分类。
YOLO v3作为YOLO及YOLO v2的改进,虽然其检测速度和准确率都越来越好,但是其原理和检测过程基本类似。采用YOLO v3算法进行路面裂缝识别及检测,其过程如下:
(1)将原始的整张裂缝图像作为网络的输入,并将裂缝图片划分成S×S大小的网格(grid cell),对于其中的每个网格,如果裂缝的中心出现在这个网格中,那么在这个网格负责检测裂缝。
(2)每个网格都需要预测出B个候选框(bounding box),并且每个候选框都包含5个预测量,即(x,y,w,h,score)。候选框的结构示意图如图2-4所示,图中的红点代表裂缝的中心位置,那么该网格负责预测图像中裂缝。

图2-4 YOLO v3网络候选框结构示意图
其中,物体的中心点坐标为(x,y),候选框的宽和高为(w,h),候选框中含有裂缝的置信度为score,其表达式如式(2-1)所示。

(2-1)

式中,P(object)表示候选框的单元中是否含有裂缝,若其中含有裂缝,则将其值置为1,否则将其置为0。IOU为预测框与实际框的交集区域与并集区域的比值,如图2-5所示。

图2-5 IOU计算方法示意图
其表达式如式(2-2)所示

(2-2)

(3)从3个尺度进行多尺度预测,每种尺度预测3个box,而候选框的宽高使用聚类得到,最后通过logistic分类器对裂缝进行预测分类。

2.2.2 YOLO v3网络结构

YOLO v3在v2版本的基础上,对网络结构进行了调整。从v2开始,YOLO算法就已经放弃使用基于Google-Net的网络架构,转而运用自己设计出来的全新网络模型Darknet。
YOLO v3的网络结构如图2-6所示。

图2-6 YOLO v3网络结构图

如上图所示,DBL对应于左下角的Darkenetv2d_BN_Leaky,它是组成YOLO v3的基本组件,由卷积层、BN(Batch Normalization)以及激活函数Leaky_ReLu组成。
图中的res1、res2、res4、res8,代表着每一个res_block由多少个res_unit组成,也就是每个残差块里的包含的残差单元的数量。YOLO开始采用resNet的残差结构,从而使得其网络模型的结构层次更深,有利于提高检测准确率。这种结构是组成YOLO的大组件,其结构示意图如上图右下角所示,其基本组件也是DBL。
图中梯形代表的concat是张量拼接,其作用将darknet的中间层和后面的某一层的上采样拼接在一起,以此来增加张量的维度。与残差层的add操作不同的是,add操作不会引起张量维度的变化,它只是简单的相加。
YOLO v3的主体网络统计如表2-1所示。
表2-1 YOLO v3的主体网络统计表

从表中可以看出,YOLO v3主体网络层数为252层,其中没有池化层和全连接层。相对先前的两个版本而言,其网络层数增加了不少,但也因此提高了其检测准确率。
YOLO v3的主干网络是图2-6中左上方标记的Darknet-53,其主要负责整个网络对路面裂缝特征的提取。Darknet-53引入了残差(redsidual)结构,其由一系列的3×3和1×1卷积核组成。虽然其网络层次加深了,但得益于ResNet的残差结构,使得它的深层网络的训练难度大大减小,从而使其精度提升较为明显。Darknet-53主干网络如图2-7所示。
¬
图2-7 Darknet-53主干网络
从图中可以,Darknet-53中除了最后的全局平局池化外没有其他池化层,在网络的前向传播过程中,通过改变卷积核的步长来实现对张量尺寸的变换。
对于网络的输出部分,YOLO v3通过对裂缝图像处理后输出三个不同尺度的特征图(feature map)。也就是图中的y1,y2,y3。特征图中的每一个单元格都会预测3个边界框(bounding box),每个边界框都会预测出5个值tx,ty,bw,bh,confidence。
这种多尺度的预测结果主要依赖于v3使用了上采样的操作。结合上面两个图,图3-6中的两个concat分别拼接了尺度均为26×26和52×52的两个张量,在此之前,v3没有像SSD一样直接使用backbone中间层的检测结果作为特征图的输出,而是使用后面网络层的上采样的结果进行拼接,再经由卷积网络结构的处理形成特征图。

2.2.3 YOLO v3候选框

网络模型检测的一个重要结果就是候选框(bounding box)的信息,自YOLO 9000之后,YOLO算法开始借鉴FasterR-CNN的思想对候选框进行预测。与v1在卷积层之后直接使用全连接层来预测候选框不同,v3移除了全连接层,在此基础上去掉了一个池化层从而使得输出的分辨率变得更高。YOLO v3和v2一样,利用anchor box来预测坐标和类别,从而实现了预测类别的机制在空间位置中解耦。
深度学习的过程也是一个概率统计的过程,YOLO v3在FasterR-CNN手动选取先验框的基础上做了些许改进,采用k-means聚类方法对训练集候选框进行聚类,从而产生合适的先验框。传统的方法由于使用欧式距离进行选取,使得尺寸较大的bbox比小的bbox产生的误差更大,聚类结果也不理想。因此,为了使anchor boxes获得理想的IOU分值,使用式(2-3)所示的距离公式:

(2-3)
YOLO v3经过实验分析后,发现当k=9时,通过聚类得到的anchor box具有不错的效果。使用聚类的方法进行选择的优点在于达到同样的IOU分值时,所需要的anchor box数量更少,从而使得模型具有更强的表征能力。而传统的手动选取anchor box的方法,往往容易造成中扁长框的数量较少、瘦高框的数量较多。
使用anchor boxes的一个问题是容易造成模型不稳定,主要表现在预测 bbox的坐标(x,y)时不稳定。区域推荐网络(RPN)通过预测坐标中心的偏移量tx,ty来得到候选框中心点坐标(x,y),其计算公式如式(2-4)所示。

(2-4)
由于这个公式没有任何限制,导致anchor boxes不管在什么位置进行预测,最终的预测结果都可能出现在图像中的任何地方。从而使得模型在初始化后往往需要很长的时间才能较为准确的预测到边框的偏移量。因此,YOLO v3与v2一样,没有继续采用RPN的思路,而是预测边框相对于网格单元(grid cell)的坐标位置,并且使用logistic激活函数将每个边界框的预测置信度限制在0到1之间。Logistic激活函数如图2-8所示,图中阀值为0.5。

图2-8 logistic激活函数
最终通过多尺度训练,YOLO v3网络模型将特征图中得到9个anchor priors平均分配到3个输出张量上,每个输出y都会在自己的每个单元格上预测出3个bounding boxes,每一个bounding box都包含5个参数值,即tx,ty,tw,th,confidence。如果预测的网格相对于图像左上角的偏移为cx,cy,并且pw、ph为与ground truth重合度最大的anchor box的宽和高。那么如图2-9所示,预测值可用式(2-5)表示。

(2-5)

图2-9 边界框预测

2.2.4 YOLO v3损失函数

YOLO算法全都采用均方误差作为其损失函数,由坐标误差、IOU误差和分类误差三个部分简单的相加而成。其表达式如式(2-6)所示。

(2-6)
三种误差简单相加的同时还要将每种误差的贡献率考虑在内,即给每种设置一个权重。在YOLO中,coordErr的权重为 =5。当计算lOU误差时,单元格是否包含裂缝,两者的IOU误差对整个网络的误差贡献率不同,因此若赋予相同的权重,由于不包含裂缝的单元格的置信度接近为0,相当于变相地的放大了含有裂缝的网格的置信度误差对整个网络的影响。因此,YOLO使用 =0.5进行lOU误差校正。YOLO算法的损失函数表达式如式(2-7)所示:

(2-7)

2.3裂缝检测及识别
2.3.1数据集处理
(1)数据集的获取
对于深度学习而言,数据在整个的网络学习的过程中扮演着非常重要的角色, 网络模型只有从原始的数据集中学习到目标特征, 才能准确的用于目标的检测。
本课题组收集的数据集由三部分组成:公共数据集、商业公司采集的数据集、人工采集的数据集。数据集涵盖:①CRACK500(美国天普大学主校区,手机拍摄)②GAPs384(德国沥青路面病害数据集)③Cracktree200(手机拍摄)④CFD(手机拍摄) ⑤AEL(法国路面数据集)⑥IMGD(商业公司车载数据集)。数据集共含有5295张图片,图 2-10 所示为三种数据来源的裂缝图片。

(a)公共数据集 (b)商业公司采集 (c)人工采集

(2)数据增强
由于深度学习往往需要大量的训练数据才能获得较为理想的效果,而由于种种原因,本人采集到的裂缝数据难以满足要求,训练样本多样性较差。因此,为了增强裂缝检测模型的泛化能力,提升模型的鲁棒性,需要对本人采集的裂缝数据进行一定程度的增强处理。通过采用了以下方法对裂缝数据进行增强。
①对裂缝图片进行翻转处理,也就是将裂缝图像作镜面对称处理,是一种常用的数据增强方法。
②对裂缝图片进行旋转处理,通过将原始图片顺时针或逆时针旋转一定的角度得到,通常旋转度数在90°到180之间。
③对裂缝图像进行裁剪处理,将裂缝图像中的随机一部分裁剪出来,然后将其调整至和原图一样的大小。
④对裂缝图像进行平移处理,当对裂缝进行平移时,需要假设背景图像为黑色,也就代表着只有裂缝的位置在移动,背景不会变化。平移的增强方法十分有用。
⑤对裂缝图像添加随机噪声,通过加入随机噪声在增加数据集的同时,有效地防止过拟合的发生。

(3)数据标记
YOLO系列的算法都是将整张图片作为网络的输入,然后通过网络训练得到理想的模型。然而在输入裂缝图像之前,需要对裂缝图像进行标记。
对于公共数据集而言,由于数据已经做好了标记,因此不必再次标记,而对于自己采集到的裂缝图片,使用LabelMe工具对裂缝图像进行标记,将标记后的图片保存后,会生成与图片一一对应的json文件,其中记录着标记框的坐标位置以及是否有裂缝,用于之后网络模型的数据读取。
2.3.2模型的训练

在有了一定数量的裂缝数据集并对裂缝图像进行初始标记处理后,就需要将数据集应用到模型训练当中去。本文网络模型的训练步骤如下:
(1)首先将已经在公共数据集上预训练好的模型下载下来并且进行参数初始化处理,修改其中配置,使网络采用GPU进行训练,以加快模型训练速度。
(2)为了数据集统一,将输入的裂缝图像的尺寸大小转换成320×320像素,并将其保存在data文件夹中,将用labelme生成json文件转换成txt文件。
(3)修改数据配置文件custom.data,确定训练读取文件的路径。修改train.txt与valid.txt,保存训练路径下的裂缝数据集的索引,用于网络模型的信息读取。
(4)修改darknet的配置文件 yolo.cfg。在裂缝数据集上训练3000个epochs,训练时的batch size设置为64。
(5)使用logistics激活函数将所有的裂缝预测结果归一化,使置信度在0到1之间。
(6)将训练好的模型用于测试集,用于评价模型的训练好坏。
网络参数对网络训练效果的影响极其重要,本次模型训练的主要参数如下:
训练集输入的裂缝图像均为320×320像素,输入图像的通道数channels=3,训练样本的batch size=64。用于最优化的动量参数为momentum=0.9,权重衰减正则项的大小设为decay=0.0005,为了使权值的更新速度合理,设置初始学习率learning rate=0.001。用于学习率调整的epoch =3000。上述主要参数如表2-2所示。
表2-2 网络初始化参数
输入图片尺寸 batch-size Momentum Intial learning rate Decay Epoch
320×320 64 0.9 0.001 0.0005 3000

为了防止网络训练过程的过拟合,使用BN(batch normalization)来避免此现象的发生。BN的思想是通过采取某些规范化的手段,使得每层深度学习网络的神经元输入值能够满足标准的正态分布,即使其满足均值为0方差为1。从而使得经过激活函数后的输入落在对输入比较敏感的区域,同时使得训练时梯度变大,加快了网络模型的训练速度,提高了网络模型的泛化能力。一个BN层的公式如式(2-8)所示。

(2-8)
式中,xi,yi分别表示激活前每个隐藏层的输入特征和输出值, 和 是沿输入xi的每个维度(通道)计算的最小批量均值和方差。 是一个小的实数用于与方差相加,以避免除数为零。
为了增加网络模型各层之间的非线性关系,避免梯度消失,YOLO v3使用Leaky ReLu作为其激活函数。与ReLu相比,Leaky ReLu给所有的负值赋予一个非零的斜率,而ReLu直接将所有的负值全部置为0。如图2-12所示。

图2-12 ReLu 和 Leaky ReLu 激活函数

2.3.3训练的结果与分析
(1)算法性能评价

在进行目标识别分类的实验时,除了用显而易见的检测框来展示检测效果以外,常用的用于评价目标识别算法性能的指标有精确率-召回率曲线(Precision-Recall Curve)、F度量(F-Measure)以及平均精度(Average-Precision)。其中包含常用的模型评价术语。假设目前目标识别的分类为两类,分别记作正例(positive)和负例(negative),那么有:
1)True positives(TP):实际为正例且被正确地划分为正例的样本数。
2)False positives(FP):实际为负例但被错误地划分为正例的样本数。
3)False negatives(FN):实际为正例但被错误地划分为负例的样本数。
4)True negatives(TN):实际为负例且被正确地划分为负例的样本数。
那么,精确率(precision)是精确性的度量,等价于被划分为正例的样本中实际为正例的比例。即precision=TP/(TP+FP)。在本研究中,也就代表着被模型识别为裂缝的图片数目中实际确实为裂缝的数目。召回率(recall)用来度量正例中被划分为正例的比例,即recall=TP/(TP+FN)。Precision和Recall也成为查准率和查全率。
F-measure则是查准率和查全率的调和平均,计算公式如式(2-9)下。

(2-9)
平均精度为AP是衡量模型对每个类别的预测性能的好坏,其大小为PR曲线下的面积,即单个类别的总样本个数当中对precision进行平均,而mAP则是衡量模型对所有类别的预测性能的好坏,其大小为将每个类别的AP值相加后取均值。本次裂缝检测模型的主要评价指标采用mAP和准确率。

(2)实验结果
由于深度学习的模型训练通常需要较高的电脑配置,而笔记本的配置十分有限,因此,本章节的实验主要在云服务器上进行,其环境配置如图2-13所示:操作系统为Ubuntu16.04,GPU显卡为Nvidia Tesla P100,显存16GB。使用的深度学习框架是Pytorch。

图2-13 训练的环境配置

本章实验将原始的裂缝数据按照一定的比例划分训练集和测试集,训练集中包括裂缝图片3800张和其他类别的图片895张,测试集中主要包括600张裂缝图片。最终,在模型训练好之后,使用测试集来检验模型的好坏。
使用训练好的YOLO v3模型对测试集进行直接检测,测试集中包含了公共裂缝数据和自己采集的裂缝数据。模型在测试集上的检测效果如图2-14所示,主要展示了部分检测后的图片。

图2-14 YOLO v3 裂缝检测效果图

本文的模型训练迭代次数为3000次,在进行模型训练时,为了能够清楚的了解其训练详情,将训练日志保存在log文件中,通过读取文件里的内容对训练过程中的平均损失(avg loss)、准确率(Recision)、召回率(Recall)、平均精度为AP(mAP 0.5)和F度量(F1)进行了统计,分别记录了在模型开始训练时,以及迭代次数为500、1000、1500、2000、2500、3000次时的值,其结果如表2-4所示,小数点后保留3位。
表 2-4 平均损失记录表
迭代次数 平均损失(avg loss) Recision Recall mAP 0.5 F1
1 51.402 0 0 0.002 0
500 3.615 0.832 0.647 0.747 0.728
1000 3.181 0.888 0.698 0.771 0.782
1500 2.634 0.949 0.735 0.801 0.829
2000 2.476 0.958 0.678 0.781 0.794
2500 2.283 0.993 0.735 0.810 0.845
3000 2.201 0.998 0.744 0.803 0.853

从表2-4中可以看出,随着迭代次数的增加,平均损失逐渐减小。当训练刚开始时,其平均损失巨大,意味着此时还没有检测到裂缝目标。当模型训练迭代到2000次时,平均损失变化趋缓,表明此时效果已经比较理想。为了更直观的观测到训练过程中的变换趋势,分别将它们用图形绘制出来,其结果如图2-15所示。

图2-15 训练过程曲线图

2.4本章小结

本章主要研究了基于YOLOv3的路面裂缝检测识别方法。首先介绍了目前两类主流的目标检测方法,介绍了基于Two-stage和One-stage的网络结构以及它们的具有代表性的目标识别算法,并进行了对比分析。通过对比分析并针对传统裂缝检测方法的缺点,提出使用基于One-stage的YOLOv3算法进行裂缝的识别分类,并介绍了YOLO v3的检测原理及模型结构。
在对裂缝图像数据进行处理后,本文开始网络模型的训练,最后将得到的网络模型在测试集上进行检验,模型对裂缝图像的检测准确率达到了99.8%以上。

第3章 基于层次分析法的路面损害状况评价模型

第2章采用的目标检测算法使得裂缝的高效检测及识别成为了可能,但对于使用者来说,对于检测结果好坏的理解仍处于一种未知状态。结合路面裂缝的应用场景,使用者不仅仅关心裂缝的存在与否,更关心路面的损害状况,这就需要建立一种新的评价范式,对目标检测的结果进行重新表达。为了将这一检测结果不只是停留在目标的标记,本文将寻求一个评价模型来表达目标检测的结果。
本章将以综合评价类模型中定量化、应用范围广的层次分析法为内核,通过确立与裂缝检测结果相关、符合公路路面实际场景的评价指标,建立路面损害状况评价模型,以便于裂缝检测的结果更易为使用者理解,并指导道路路面的维护与修复。

3.1模型的建立
3.1.1层次分析法原理

层次分析法(AHP)是一种定性与定量相结合的方法,通过分析各指标之间的关系、建立对比矩阵,将复杂问题分解为若干层次和若干指标,在各指标之间进行比较和计算,从而可较为合理地确定指标权重。
层次分析法(AHP)是20世纪70年代由美国运筹学家 Santy 提出的,经过半个世纪的发展已经发展成一种较为比较成熟的解决多目标的复杂问题的有效方法。它的基本原理是对评价体系的各种要素分解成目标层、中间层和决策层,逐层分析形成一个从上到下的递阶的层次关系,但必须注意遵循个因素之间的相对独立性和可操作原则。应用层次分析法一般经过以下4个步骤:

(1)建立层次结构模型。将决策的目标、考虑的因素和决策对象按它们的相互关系分为目标层、中间层和决策层,同一层的因素从属于上一层因素的同时又支配下一层因素。
(2)构建判断矩阵。在确定各层次各因素之间的权重时,如果只是定性的结果,则很难被别人接受;因此采用一致矩阵法,将因素两两相互比较而不是放在一起比较,采用相对尺度,以尽可能减少性质不同的因素相互比较的困难,提高准确度。判断标准如表3-1所示。
表3-1判断矩阵的标度定义表
标度 含义
1 表示两个因素相比,具有相同重要性
3 表示两个因素相比,前者比后者稍重要
5 表示两个因素相比,前者比后者明显重要
7 表示两个因素相比,前者比后者强烈重要
9 表示两个因素相比,前者比后者极端重要
2,4,6,8 表示上述相邻判断的中间值
倒数 若因素i与因素j的重要性之比为 ,那么因素j与因素i重要性之比为 =

(3)层次单排序及一致性检验。所谓层次单排序是指,对于上一层某因素而言,本层次各因素的重要性排序。即对于矩阵 计算满足 的特征根与特征向量,式中 为矩阵 的最大特征根, 为对应于 的正规化的特征向量, 的分量 即是相应元素的权值。判断矩阵通常是不一致的,但是为了能用它的对应于特征根的特征向量作为被比较因素的权重量,其不一致程度应在容许的范围内,对矩阵进行一致性检验。
首先,计算一致性指标 CI(Consistency Index):
(3-1)
式3-1中,CI为一致性特征数,n为成对比较的因子个数。

接着,用一致性比率CR来衡量不一致程度的容许范围,由式3-2计算得到:
(3-2)
当 CR<0.1时认为不一致程度在允许的范围内。式中RI为随机一致性指标,取值参考表3-2,是一个定值。因此易知CI 接近于零时,有满意的一致性,CI 越大,不一致性越严重。
表3-2 平均随机一致性指标RI
n 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
RI 0 0 0.52 0.89 1.12 1.26 1.36 1.41 1.46 1.49 1.52 1.54 1.56 1.58 1.59

(4)层次总排序及一致性检验。原理与层次单排序及一致性检验一样,用式3-3进行总排序一致性检验:

(3-3)
CR <0.1则可按照总排序权向量表示的结果进行决策,否则需要重新考虑模型或重新构造那些一致性比率 CR 较大的成对比较矩阵。
(5)确定 n 个指标的权重 ( ) ,则:
(3-4)
其中 为第i个事件的第 n 个指标对应的值, 记为 AHP 方法计算出的综合评价分。

3.1.2评价模型的建立

本文利用层次分析法针对裂缝检测及识别的结果进行了评价,主要分为目标层、准则层和方案层三个方面。
模型的方案层为每张路面图片,这是目标检测算法的输出结果。
模型的准则层涉及指标的选取,指标的选取是为了评价路面损害状况,兼顾目标检测输出结果与公路路面实际场景。因此,本文引入了三个评价指标:裂缝密度、检测框面积和检测框的特殊形态。
(1)裂缝密度。对于单张图片的裂缝检测输出结果,裂缝密度计算该张图片中裂缝的条数。大量的裂缝意味着路面的基础损害状况加深,值越大,路况越差,因此,这是一个负向化指标。
(2)检测框面积。对于单张图片的裂缝检测输出结果,检测框面积可以衡量裂缝分布的均匀程度。值越大,一定程度上反映裂缝出现的集中程度越高,路况越差,因此,这是一个负向化指标。
(3)检测框的特殊形态。对于单张图片的裂缝检测输出结果,检测框的特殊形态可以由检测框的宽高比来计算得到。通过将宽高比超过一定范围的裂缝计入统计,可以很好地将裂缝延伸的特性进行识别。其值越大,裂缝的延伸程度越大,路况越差,因此,这也是一个负向化指标。

模型的目标层是单张目标检测结果的路面状况得分,由于准则层的指标均为负向化指标,因此得分越高,路况越差。此外,单个路面状况得分可以显示实时路面情况,如果是路面图片流,连续路面状况得分的均值可以显示路段路面情况。由于客观评价路段裂缝情况,因此检测结果有量化的应用价值。

综上,本文完成了基于层次分析法的路面损害状况评价模型的建立,如下图所示:

图3-1 基于层次分析法的路面损害状况评价模型图

3.2模型的求解与分析

本文构建判断矩阵,得到结果如表3-3所示。
表3-3 判断矩阵表
裂缝密度 检测框面积 检测框的特殊形态
裂缝密度 1 2 4
检测框面积 1/2 1 5
检测框的特殊形态 1/5 1/7 1

在根据判断矩阵确定权重之前,需要对判断矩阵是否可信进行一致性检验。一致性检验的步骤如下:
首先,计算一致性指数CI,它是判断矩阵的最大特征值,n是判断矩阵的阶数。计算得出 。
其次,根据矩阵顺序n查找表,找到相应的平均随机一致性指数RI。我们可以得到 。
最后,计算一致性比率 ,该值通过了一致性检验。

然后,我们使用算术平均法、几何平均法和特征值法计算权重,并将三种计算方法的平均值作为最终结果。结果如下:
表3-4 三种计算方法计算权重的平均值
权重 算术平均法 几何平均法 特征值法 三种计算方法平均值
裂缝密度 0.4485 0.4592 0.4532 0.4536
检测框面积 0.3231 0.3310 0.3312 0.3284
检测框的特殊形态 0.2284 0.2097 0.2156 0.2197

得到权重后,目标层得分(单张目标检测结果的路面状况得分)可以由公式3-4进行求解,即 。此时,单个路面状况得分可以显示实时路面情况,连续路面状况得分的均值可以显示路段路面情况。由此,本文完成对目标检测结果的量化评价。

3.3模型的评价

层次分析法广泛应用于各行各业的决策问题,其优点主要表现在:
(1)层次分析法是系统性的分析方法。将处理问题的对象视为系统,按照分解、比较、判断、综合的思维方式进行决策,层次分析法中每一层的权重设置最后都会直接或间接影响到结果,而且在每个层次中的每个因素对结果的影响程度都是量化的,清晰明确,不割断各个因素对结果的影响。
(2)层次分析法将定性与定量分析相结合。通常的最优化技术只能用于定量分析,层次分析法能够处理许多最优化技术无法解决的实际问题。
(3)层次分析法作为决策方法简洁实用。层次分析法将决策者的思维过程系统化、数学化和模型化,便于计算,容易被人们所接受。

层次分析法也存在着以下不足:
(1)不能为决策提供新方案,层次分析法的作用是从备选方案中选择较优者,没有办法得出更好的新方案。
(2)受主观因素影响大。从建立层次结构模型到给出成对比较矩阵,都依赖决策者的主观判断,人的主观因素对分析决策过程影响大,如果判断失误,可能造成决策失误。
(3)指标过多时计算量大,权重难以确定。构造成对比较矩阵时通常用1至9来说明其相对重要性,如果指标繁多,对每两个指标之间的重要程度的判断存在困难,甚至会使一致性检验不能通过。

为了克服层次分析法的不足,通常从以下几方面进行改进:
第一,尽量采取对问题比较了解的专家或行业专门人士的群体判断的办法来克服因人的主观判断造成的缺点;
第二,在进行判断之前,广泛收集信息,弄清楚决策的目标、所涉及范围、所要采取的方案、实现目标的准则等;
第三,分解简化问题时把握主要因素,做到不漏也不多;
第四,注意相比较元素之间的强度关系,相差太大的要素不能在同一层次比较。

3.4本章小结

本章利用层次分析法,通过确立与裂缝检测结果相关、符合公路路面实际场景的3个评价指标(裂缝密度、检测框面积和检测框的特殊形态),建立路面损害状况评价模型,以便于裂缝检测的结果更易为使用者理解,并指导道路路面的维护与修复。本模型通过了一致性检验,最大程度的利用了第2章目标检测的结果,具有一定的应用价值。
第4章 移动端的裂缝检测识别系统

第2章的YOLO v3作为经典的目标检测网络,在保证检测精度的同时拥有很快的检测效率。然而,即使是规模较小的YOLO v3-tiny网络,采用结构化剪枝的方式缩减网络卷积层的宽度,一定程度上提高了网络前向推理速度,但是在资源有限的移动端上检测速度的提升仍然存在瓶颈。
本章将从轻量化YOLO网络和移动端推理加速框架两方面入手,提高移动端的检测速度,并将这一优化进行实现与部署。
对于轻量化YOLO网络,本文希望通过可自动缩放的EfficientNet架构中的YOLO-Fastest-xl网络,提高推理时的计算效率,进一步减少了参数量和计算量。
对于移动端推理加速框架,本文采用腾讯优图于2017年开源的高性能神经网络前向计算框架ncnn,其利用手工汇编优化算子、针对不同卷积采用不同的加速计算方式、优化内存结构、支持多核并行计算加速,有利于移动端的部署。

4.1基于 EfficientNet 的轻量化 YOLO 网络
4.1.1 EfficientNet系列网络

EfficientNet在2019年发布之时惊艳了整个计算机视觉学术界,它以朴实的思路超越当前在分类任务上各种SOTA,做到了又快又好,究其原因是其自动缩放的核心思想。

在网络结构搜索(NAS)问世之前,对不同的网络结构的探索还处于人工设计的阶段,依靠研究者对各种结构的使用经验与实验效果相结合,将不同结构堆积组成新的网络。NAS在任务所需的搜索空间内制定搜索策略和性能评估策略,通过搜索策略不断的尝试堆积不同的组成结构形成各种各样的网络结构,经过性能评估策略(速度、性能等方面)对结构评价后,反馈给搜索策略以优化网络结构,重复此过程直至找到最优的结构。

图4-1 NAS 的过程示意图

EfficientNet采用了NAS的思想,作者首先使用NAS的方法找到一个优秀的backbone网络,在此基础上,对网络进行不同程度的缩放可以得到性能与模型大小呈正相关的高效网络结构。模型大小主要与网络宽度、深度以及输入网络的图片分辨率有关,如果三者同时以匹配的倍率增大或者减小,模型的性能能够达到同等参数量模型下的较优性能。

图4-2 网络缩放方式

在经过大量参数调整后得到backbone网络EfficientNet-B0,对网络的上述三种参数调整后得到EfficientNet-B1到EfficientNet-B7等多个优秀的分类网络,这为其余任务提供了轻量化的backbone网络架构。

4.1.2 EfficientNet架构的YOLO-Fastest-xl网络

图4-3 YOLO-Fastest-xl 网络结构

YOLOv3网络成为经典的原因是其特别设计的darknet53的backbone的网络架构,为后续执行检测功能的yolo层提供了充分的特征信息,并且darknet53本身的运算效率很高,所以网络的检测效果又快又好。
EfficientNet-lite是EfficientNet的针对算力有限设备的改进版本,同等运算量下能够达到极高的精度,所以把它作为backbone的YOLO网络同样比其它的backbone具有一定的优势。YOLO-Fastest-xl在模型大小只有3.5M的情况下,可以对VOC2017达到69.43%的平均检测精度,计算量只有0.7BFlops,比YOLOv3-tiny剪枝后的计算量还要少,对于模型落地部署十分有利,也是本章卷积层剪枝的研究对象。
YOLO v3的残差结构中只包含两个卷积层,而基于EfficientNet架构的YOLO-Fastest-xl网络兼具速度与精度的优势。如图4-3所示,YOLO-Fastest-x1采用6种残差结构,共计11个残差结构,每种残差结构都是由3个卷积层连接一个Dropout层组成,层之间的feature map的尺寸一致,网络中共两个检测模块,分别对应13×13和26×26的输入特征图。
输入图像的尺寸变化除了第一次是靠第一个步长为2的卷积层实现,其余的是靠残差结构间的卷积层和上采样层完成的。
相比较EfficientNet,该结构去除了常用的SEblock(SqueezeNet中的先压缩后展开的网络结构),目的是为了提高推理时的计算效率。此外,每个残差结构中都采用分组卷积的计算方式,进一步减少了参数量和计算量。
YOLO-Fastest-x1还有更轻量化的YOLO-Fastest版本,是将每层的卷积核个数压缩后得到的,速度更快,但精度损失较多。

4.1.3 YOLO-Fastest-xl网络残差结构

YOLO-Fastest-x1网络中有19个残差块,残差块的输入输出的尺寸一致。残差结构中使用了分组卷积,都是在第二个卷积层中使用,将残差结构中的卷积层按图4-4定义为layer1、layer2与layer3。

图4-4 YOLO-Fastest-xl中的一个残差结构

按照分组卷积的计算方式,分组卷积是把输入的feature map按照当前层的卷积核个数等分,分组后的每组feature map的通道数与单个卷积核的通道数一致,所以groups参数必须是当前层卷积核个数的约数,分组卷积使得参数量和计算量减少。

图4-5 普通卷积与分组卷积

假设输入特征图的尺寸为W×H×D(分别为宽、高、通道数),常规卷积核的尺寸为k×k×D,输出特征图的尺寸为W’×H’×D’,那么常规卷积的参数量为k×k×D×D’,乘法计算量为k×k×D×D’×W’×H’,考虑分组卷积的groups参数为g,那么分组卷积的参数量为k×k×D,分组卷积核的参数量为k×k×D/g,乘法计算量为k×k×D×W’×H’,所以总的参数量和乘法计算量都是原来的1/D’倍。

4.2基于NCNN的移动端部署

本节的研究目的在于将多目标检测及跟踪算法部署到arm移动端上,在这个过程中需要能在移动端实现推理加速的深度学习框架,由于arm支持CUDA,可供部署的选择有TensorRT和ncnn等,但考虑到平台的普遍适用性,很多嵌入式平台无法使用TensorRT,同时ncnn框架使用C++实现,且在部署时不需要任何依赖并针对ARMCPU做了SIMD优化和OpenMP多核并行加速,其极强的可用性和移植的简洁性成为了本文选择的高性能神经网络前向计算框架。

4.2.1 ncnn平台介绍

由于ncnn平台只能进行推理,所以需要对已经训练好的深度神经网络进行模型转换,目前ncnn平台支持多种训练框架的模型转换,包括Caffe、MxNet、Pytorch和TensorFlow。同时ncnn支持的层种类较多,自定义层添加方式也比较方便,满足了大多数工程的应用和落地。ncnn平台还有一个非常友好的特点是在部署时不需任何依赖,且提供了非常详细的使用指南和案例,在进行实际开发时,节约了很大部分的时间。
ncnn平台不仅针对ARM平台的CPU做了加速优化,同时也支持GPU加速,ncnn提供了使用vulkan的接口,在实际使用时只需编译GPU版ncnn库,然后通过vulkan来使用GPU对模型推理进行加速,在开启GPU加速时,也只需一行代码命令,使用非常方便。
ncnn框架构建网络以及推理过程如图4-6所示,首先构建ncnn网络接口,然后对模型进行初始化加载模型参数文件和模型权重文件,其次读取处理好的网络输入,接下来创建网络提取器,并利用网络提取器执行前向推理过程从而获得网络输出,其中注意网络输入和输出的名字要和模型参数文件中保持一致。

图4-6 ncnn 框架构建网络以及推理过程

4.2.1 ncnn模型配置

Pytorch框架的模型和权重转换成ncnn后,会得到两个文件,分别是ncnn格式的网络参数文件和网络权重文件。其中网络参数文件的格式如图4-7所示,其中第一行的数字代表的是此网络参数文件的版本,第二行的两个数字分别表示层数量和数据交换结构数量,之后的每行代表一个网络层,每行分别是层的类型,层的名字和参数字典等东西,其中不同类型的网络层所对应的参数字典的内容会有所不同。

图4-7 ncnn 框架的网络参数文件

4.2.3 ncnn模型转换

本文算法在Pytorch框架下进行设计和训练后会得到模型文件和权重文件,但ncnn并未提供Pytorch模型直接转成ncnn模型的接口。模型转换流程如图4-8所示,其中ncnn提供了caffe框架和onnx模型格式的转换接口,但caffe框架也未提供Pytorch转为caffe的模型转换接口,于是本文选择先从Pytorch模型转成onnx中间格式,再从onnx格式转到ncnn模型的方式,并在每次转换格式时进行结果验证,最终得到ncnn格式的模型参数文件和模型权重文件。在这里还要注意本文在进行模型转换时尽量将后处理过程中不需要学习参数的部分放入模型文件当中,从而加快算法的运行速度,最终得到的ncnn模型参数文件的头部网络部分可视化如图4-9所示。

图4-8 模型转换顺序

图4-9 ncnn 模型参数可视化

基于ncnn框架部署运行裂缝检测及识别算法来跟踪视频中目标的流程如图4-10所示,首先在读入视频之前构建ncnn模型的网络接口并加载模型参数文件和模型权重文件,如果每读一张图都构建一次模型的话,会很大程度增加时间消耗,因此只在最前面构建一次模型,从而加快算法运行速度。
其次对读入的视频进行是否为空的判断,读入为空的话直接结束,接下来对每一帧图片进行格式转换和数据预处理等操作,其中数据预处理操作包括图片尺寸裁剪和图片归一化等,且这些操作的参数要和模型训练时保持一致,从而才能保证算法转换前后输出结果保持一致。
接下来将处理好的数据传入到网络中执行前向推理计算,提取网络输出的结果,并对输出的结果进行后处理,后处理包括非极大值抑制和边界框解码等,从而得到当前帧中所有目标的边界框和对应的特征向量。
最后将上一步得到的每个目标的特征向量和边界框传给YOLO算法模块进行级联匹配和IOU匹配,从而确定当前帧中每个目标的轨迹标签,并在图中绘制目标边界框并标出相应的轨迹标签,接下来继续对下一帧图像进行处理,直至处理完视频的最后一帧。

图4-10 ncnn框架推理流程

4.3技术路线设计
图4-11 移动端裂缝检测及识别系统技术路线图

移动端的裂缝检测识别系统部署流程如上图所示,主要分为数据处理、模型训练与模型部署三部分,从理论到实际,为裂缝的检测的高效实现提供了解决方案。

4.4移动端系统测试

本文在校内的一段路上对算法进行了测试,测试系统如图4-12所示,结果显示本文算法能够对图中的裂缝目标进行很好的检测以及识别,进一步说明了本文算法具有较强的泛化能力。

算法在arm安卓移动端荣耀50上进行运行,算法处理一张图片的运行总时间为42ms,其中测试视频的帧率为23.81FPS,可以达到实时处理。

图4-12 移动端系统测试结果

4.5本章小结

本章首先介绍了YOLO-Fastest-xl轻量化YOLO网络和ncnn前向推理框架,接下来讲解了算法改造的过程,将Pytorch多目标跟踪模型转换为ncnn格式,进一步将整个python程序转换为c++程序,在服务器端测试算法转换结果无问题后开始部署到arm安卓移动端荣耀50上并测试算法运行速度,最终结果显示在该移动端上可以达到42ms每张图片的处理速度,满足实时性要求。

第5章 结论与展望

5.1主要成果及结论

路面裂缝作为路面病害的初期表现形式,同时也是路面最常见的病害,在路面病害检测中占据着主要位置。对路面裂缝的检测直接关系到以后路面的养护策略以及养护投入。为了减少养护成本,需要及早地检测出路面裂缝。本文以实时检测路面裂缝为目标,同时为了避免人工现场拍摄检测可能存在的风险,在研究了国内外路面裂缝检测现状的基础上,开展了基于深度学习的路面裂缝检测研究,本文的主要工作如下:
(1)在研究了常用目标识别算法的基础上,采用了基于YOLO v3的目标检测算法对路面裂缝进行检测,在对裂缝数据集进行处理后,通过改进相应的网络参数对网络模型进行重训练,并对得到的模型进行测试验证,检测结果表明模型的检测效果符合预期,其识别的准确率能达到99.8%以上。
(2)在研究路面裂缝检测结果的基础上,利用层次分析法确立与裂缝检测结果相关、符合公路路面实际场景的3个评价指标(裂缝密度、检测框面积和检测框的特殊形态),建立路面损害状况评价模型,以便于裂缝检测的结果更易为使用者理解,并指导道路路面的维护与修复。
(3)本文分析了基于 EfficientNet-lite 的 YOLO-Fastest-xl 网络相比较其它检测网络的速度优势,并借助该网络来提高路面裂缝检测系统推理时的计算效率,进一步减少了参数量和计算量。
(4)本文基于ncnn将YOLO-Fastest-xl网络模型训练出的权重部署到arm安卓移动端荣耀50。首先将卷积神经网络部分由Pytorch模型先转成onnx格式,再由onnx格式转成ncnn格式,其次将算法的后处理部分和跟踪算法由python程序转成C++程序,最终在嵌入式平台进行速度测试,结果显示算法可以达到23.81FPS的处理速度,满足实时性要求。

5.2创新点

(1)将最新提出的目标识别算法YOLO v3运用于路面裂缝的检测,YOLO v3算法在识别行人、车、船、动物等目标上取得了非常好的效果,但在路面裂缝检测上应用较少,本文将其用于路面裂缝检测,结果表明,检测效果良好。
(2)深度学习网络的复杂度较高时,容易出现过拟合,本智能算法完善了训练过拟合的处理方案,一方面通过丢弃法来控制全连接层的模型复杂度;另一方面利用翻转、裁剪减轻模型对物体出现位置的依赖性,调整亮度、色彩等因素降低模型对色彩的敏感度,从而进一步扩大数据集来缓解过拟合。
(3)目标检测算法使得裂缝的高效检测及识别成为了可能,但对于使用者来说,对于检测结果好坏的理解仍处于一种未知状态。本文利用基于层次分析法的路面损害状况评价模型对目标检测的结果进行重新表达,将这一检测结果不只是停留在目标的标记,而是具有量化的评价结果,使得裂缝检测的结果更易为使用者理解,并指导道路路面的维护与修复。
(4)在目标检测算法的基础上,结合实际应用需求,开发了一套公路路面裂缝检测及识别演示系统,该系统支持主流图像与视频格式,可以实时识别或离线识别,为问题的高效解决与处理提供了解决方案。
(5)研究以高应用价值为导向,考虑移动端有限的计算资源,本文研究了使用轻量化的EfficientNet-lite为backbone的YOLO-Fastest-xl轻量化网络和高性能神经网络前向计算框架ncnn,大大提高系统推理时的计算效率,进一步减少了模型的参数量和计算量。最终在安卓移动端的测试结果表明系统能够完成对路面裂缝的实时检测。

5.3未来工作展望

本文在基于深度学习的实时目标检测及识别模型取得了较好的效果但仍存在以下不足:
(1)数据集方面,本文目前研究的数据集为公共数据集、商业数据集和本人采集的数据集之和,但是其数据集量还不算大,而且数据差异较大,如部分数据集裂缝很少、横向裂缝与纵向裂缝的比例失衡,这可能导致某一方向的裂缝检测效果相对较差。因此,应该综合无人机、车载平台的各种裂缝类型图片,以达到较好的检测效果。
(2)数据预处理方面,本文暂时采取图片翻转、旋转、裁剪、平移、添加随机噪声的方法对数据进行增强,针对路面裂缝图像因存在较多的噪声而导致网络模型难以识别这一问题,未来可以考虑采取其他方法来进行裂缝图像增强,来优化检测精度。例如,当裂缝图像噪声严重时,通过去噪算法对对比度低的路面裂缝图像进行去噪再识别,能有效提高检测准确率。
(3)在基于深度学习的目标检测方法研究中发现,尽管本文设计的网络模型取得了不错的表现,但算法精度和运行速度之间仍可做到进一步的平衡。且网络结构中并未集成注意力机制,如果能将注意力机制融合到网络当中的话,模型应该会有更好的性能表现。
(4)在目标检测实验中发现,对道路旁的目标和较远处目标检测效果不佳,但理论上这些目标并不会对路况造成很大的影响,所以可以结合基于图像的核心区域划分方法,首先划分出核心关注的区域,接下来在该区域上进行目标检测及识别,这样目标检测及识别任务更加具有针对性。
(5)本文的模型虽然能在移动端上实时运行,但模型并未进行模型剪枝和量化等操作,可以结合模型剪枝和量化等进一步提高算法在移动端嵌入式平台的运行速度。
(6)除了采用YOLO算法模型进行路面裂缝的检测识别外,基于One-stage和基于Two-stage的目标识别算法还存在几种常用的算法模型。后续可以选取最新的以及常用的几种算法模型在相同数据集上进行路面裂缝检测对比研究,综合mAP和fps,验证YOLO的检测效果。

参考文献

[1] 王世兵. 路面裂缝检测系统关键技术的研究与开发[D]. 济南大学, 2019
[2]SANCHEZ-CUEVAS P J,HEREDIA G,OLLERO A. Multirotor UAS for bridge inspection by contact using the ceiling effect[C]// Proceedings of the 2017 International Conference on Unmanned Aircraft Systems. Piscataway,NJ:IEEE,2017:767-774.
[3]JIMENEZ-CANO A E, HEREDIA G, OLLERO A. Aerial manipulator with a compliant arm for bridge inspection [C]// Proceedings of the 2017 International Conference on Unmanned Aircraft Systems. Piscataway,NJ:IEEE,2017:1217-1222.
[4]AMHAZ R,CHAMBON S,IDIER J,BALTAZART V. Automatic crack detection on two-dimensional pavement images:an algorithm based on minimal path selection [J]. IEEE Transactions on Intelligent Transportation Systems,2016,17(10):2718−2729.
[5]王耀东,朱力强,史红梅,等. 基于局部图像纹理计算的隧道裂缝视觉检测技术[J]. 铁道学报,2018,40(2):82-90
[6]张玉雪,唐振民,钱彬,徐威.基于稀疏表示和多特征融合的路面裂缝检测[A].计算机科学,2018,45(7):272-277
[7]梁雪慧, 程云泽, 张瑞杰等.基于卷积神经网络的桥梁裂缝识别和测量方法.计算机应用,2020,4期:1057-1061
[8]孙梦园,刘义,范文慧. 基于多尺度卷积网络的路面图像裂缝分割方法[J]. 软件,2020,41(05):95-99
[9] Ronneberger O, Fischer P, Brox T. U-Net: Convolutional Networks for Biomedical Image Segmentation[J]. 2015.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值