王博,李齐,刘皎
(商洛学院电子信息与电气工程学院/商洛市人工智能研究中心,陕西商洛 726000)
路面裂缝可能衍生出其他更为严重的次生病害,严重的可能会导致安全事故。因此,需要对路面裂缝进行及时地发现和修复,从而防止危害进一步扩大。对路面裂缝进行快速、准确的检测是路面养护工作中最为重要的任务之一。
在过去的几十年里,许多研究人员一直致力于研究基于传统非深度学习的传统裂缝检测方法[1-2]。这些方法主要分为五类:小波变换[3]、图像阈值[4-5]、人工提取特征和分类[6-7]、基于边缘检测的方法[8]、基于最小路径的方法[9]。这些方法在一定程度上实现了路面图像中裂缝病害的识别,但仍然存在一些问题:多数算法仍然采用基于主动特征提取的方式对裂缝信息进行提取,提取的过程相对繁琐;现有大部分基于图像处理的算法,对于不同数据源得到的图像,普适性较低,环境因素影响裂缝识别算法的稳定性能。
近年来,国内外一些学者尝试将深度学习方法应用到裂缝检测任务中。目前基于深度学习的主流目标检测方法主要以Rcnn[10]、Faster-rcnn[11]和fasterRcnn[12]为代表的two-stage目标检测模型和以YOLO[13]和SSD[14]系列为代表的one-stage目标检测模型。Zhang等[15]提出了一种相对较浅的神经网络,由四个卷积层和两个全连通层组成,对裂缝图像进行分类。将深度学习的方法与基于手工特征的方法进行比较,证明了深度学习中特征提取的优势。Pauly[16]将深度神经网络应用于裂缝和非裂缝图像的分类,同时证明了深度神经网络的优越性。同时,提出了动态的学习方法,解决了标签资源有限的问题。Eisenbach等[17]提出了一种用于训练深度学习网络的道路病害数据集,评估和分析了目前较为先进的路面病害检测方法。深度学习方法对于具体的裂缝检测识别任务,效果明显优于传统方法。主要存在的问题:道路裂缝数据集方面,目前已知公开的数据集数据规模较小,同时环境、背景较为简单[18-19];网络实时性问题,由于网络较深,部分识别网络在满足精度的条件下,实时性指标达不到[20];大规模的网络模型需要大量的运算,在移动或者嵌入式设备难以被应用[21]。因此亟需提出一种轻量级、快速、准确的裂缝识别方法。
为了解决上述问题,选择one-stage目标检测算法中SSD目标检测模型为基本网络,以此为基础做了三方面工作。第一,采集并建立包含5 000张原始图片的道路裂缝检测数据集。第二,为了解决网络模型臃肿难以部署在嵌入式移动设备的弊端,将SSD网络主干特征提取网络改进为轻量级MobileNet网络,能够大幅度降低模型的参数量和模型大小、同时提高了对象的检测速度。第三,利用特征金字塔融合提取到的6个维度信息,能够将不同维度信息进行融合,如底层高分辨率和顶层高语义信息进行融合,解决了轻量级网络检测精度低的问题。
SSD300采用VGG作为主干特征提取网络,是一个基于回归方法的目标检测算法。SSD网络输入图像归一化为300×300彩色裂缝图像,以VGG为基本特征抽取网络,选择conv4-3、fc7、conv6-2、conv7-2、conv8-2、conv9-2 这六种有效特征层作为SSD回归和分类的输入,通过选择六种尺度 38×38,19×19,10×10,5×5,3×3,1×1来获取预测结果,对于每个有效特征层,分别进行一次先验框数量Num*4的卷积操作和一次Num*分类数目的卷积,其中4代表预测框的四个调整参数。其基本架构如图1所示。
图1 SSD算法模型
针对SSD算法的改进:改进特征提取网络,降低模型大小,提高速度;将特征融合思想引入到算法中,再将高层次特征和低层次特征进一步融合,提高特征层的检测效果;在算法训练过程中,使用数据增广策略,提高训练过程中的训练数据,提高鲁棒性。整体算法模型如图2所示。
图2 改进的SSD算法
1.2.1 主干特征提取网络改进
SSD目标提取网络的主干特征VGG网络模型较大,在检测速度上没有优势,参考MobileNet思想引入深度可分离式卷积构建主干特征提取网络,不仅可以提升SSD的检测效果,同时也使检测速度有了质的提升,而且模型大小也比原本SSD小了几倍。相比VGG算法,特征抽取网络的权重仅仅只有15 M左右,加上改进的SSD高速识别模型,在保证整体精度的同时,尽量提高算法的速度。
图1中,将原始的SSD模型中的VGG去掉,替换为MobileNet网络,去掉MobileNet后面的softmax层及全连接层,随后添加改进的深度可分离卷积层*4。可分离卷积,其中深度卷积与1×1卷积结合替代传统的卷积方式,可以大量减少模型参数。另外为解决SSD对小目标及遮挡等复杂环境,引入多尺度特性,将不同层的特征进行融合,避免池化层带来的信息丢失,从而提高网络检测精度。
主干特征提取网络类似VGG包含6个有效特征层,这些特征层的shape分别利用38×38,19×19,10×10,5×5,3×3,1×1的有效特征层进行分类预测与回归预测。涉及到的6个有效特征层,用来构建特征金字塔,对获取到的每一个有效特征层,分别对其进行一次num_priors*4的卷积、一次num_priors×num_classes的卷积、并需要计算每一个有效特征层对应的先验框。而num_priors指的是该特征层所拥有的先验框数量。
主干特征提取网络减少参数的关键在引入深度可分离卷积,是将一个标准的卷积核分成深度卷积核和1×1的点卷积核,从而达到降低参数的目的。假设输入为M个通道的feature map,卷积核大小为Dk×Dk,输出通道为N,那么标准卷积核即为Dk×Dk×M×N。 与标准卷积核相比计算量比率为:
以 N=512,Dk×Dk=3×3 为例,深度可分离卷积可以节省参数约为原来的1/9。
1.2.2 图像金字塔进行多层特征融合
传统SSD方法使用图3(a)方法,直接利用VGG提取到的六个特征层进行预测。本文方法利用FPN特征金字塔的思路,将MobileNet提取到的6个特征层进行特征融合。低层高分辨率和高层高语义信息层,通过融合达到不同层信息融合,从而提高检测效果。这样可以在各种不同特征分辨率下识别目标,而且提取的特征构成来源于各个层级的相互融合。
图3 特征金子塔特征融合
融合方法如图3(b)所示,SSD所使用的6个有效特征层每一层和下一层都是2倍的关系。其中自上向下的路径直接采用2倍的采样完成,横向连接在通过1×1卷积调整通道数的基础上,通过叠加操作完成特征的融合。
1.2.3 数据增强策略
数据增强增加了样本的个数,使得模型训练过程中可以接收更多样本的学习内容,能够增强样本的多样性,使结果更加接近真实目标,让训练模型更加具有鲁棒性。
评价道路裂缝检测算法的精度主要用F1值(F1_Score)、MAP指标表征。算法的速度使用FPS指标表征。
准确率(Precision):表征预测正例(真正例+假正例)中,真正例所占的比例。计算公式为:
其中真正例(TP),真负例(TN),假正例(FP)和假负例(FN)。
召回率(Recall):表征所有实际的正例中,真正例所占的比例。计算公式为:
F1值(F1_Score):单一的用准确率或者召回率,并不能完整地表征算法的准确性,F1值用准确率和召回率的调和平均来表征,是准确率和召回率的综合体现。计算公式为:
F1值的结果在 [0,1],F1值越高表示算法具有越好的表现。
AP(Average precision)指标:
式中,P代表准确率,r代表recall值,实际意义表示为某种类的目标P-R曲线的面积。AP的结果在[0,1],AP越大表征算法效果越好。
由于实际过程中P(r)函数难以准确确定,在计算过程中,将积分过程等效为求和过程。计算公式为:
式中,APEQ表示AP值的等效表达,M表示测试集中图像数据的个数;K表示通过IOU的改变,能够识别出的目标的个数;P(K)表示通过IOU的改变能够识别K个目标时的Precision值。△r(k)表示能识别K个目标时Recall值与能识别出K-1个目标时Recall值的变化量。
MAP(均值平均精度),得到数据集中所有类精度的平均值,通常情况下MAP的计算公式:
式中,classes为识别目标的总类别,在本文中算法中classes=3。
FPS指标:算法的主要速度指标。表示1 s内识别的裂缝图像数(帧数),FPS指标越大表示单位时间内处理速度越快,实时性更好。
路面裂缝检测的整体流程如图4所示,主要包括路面裂缝数据集、裂缝识别网络训练调参等。
图4 路面裂缝检测的整体流程图
试验中使用的数据集为2020年采集于西安市的城市道路图片,建立适用于道路裂缝目标识别的VOC数据集,包括5 226张道路裂缝图像并对其进行标注,同时采集过程中应注意采集多尺度、复杂场景下的道路图片。路面图像数据集主要为道路检测车拍摄的路面视频和智能手机拍摄的路面图像,预期通过视频采集车图像和人工采集集合的方式采集路面裂缝图像。主要分成横向裂缝、纵向裂缝、网状裂缝,三种裂缝总体以1:1:1的比例出现。
图5中采集完后将图像使用labelme工具进行标注,输出格式为VOC2007。以8:1:1的比例将样本数据划分为训练集、验证集和测试集,用于路面裂缝识别模型训练测试。
图5 路面裂缝数据集的建立
不同光照、天气、标志标线、油污、路面修补等背景下,均会对裂缝的识别带来不利的影响。传统的图像处理方法会面临各种困难,中值滤波可能滤除微弱目标,阈值分割的实效,不能区分目标和干扰等。面对这个问题,在建立数据集阶段,应尽量多地囊括多种复杂背景,从而让识别网络学习到更多的特征。
模型训练流程如图6所示,图中左边部分主要对网络模型超参数的设定,图中右边部分为模型训练过程,首先通过预测值与真实值比较得到loss,判断训练次数,当次数小于设定的次数,再根据loss反向传播更新模型参数。其中i表示当前训练次数,Imax表示设置的最大训练次数。
图6 模型训练流程
训练的裂缝图像统一重设大小为300×300的像素,训练平台采用windows10操作系统,搭载12 G内存,E5CPU,搭配4G显卡。训练过程采用迁移学习策略,在MobileNet预训练权重的基础上,冰冻其MobileNet部分,对SSD和特征金字塔部分进行训练50轮,50轮后解冻MobileNet部分,降低 lr(学习率)=1×10-5对整体进行微调。训练过程中解冻前lr=1×10-3,解冻后lr=5×10-5,动量系数α设置为0.9。整个训练过程持续100轮,其中lr通过回调函数,当3轮loss不出现下降的时候动态调整学习率为当前的一半。
试验过程中抽取10%作为测试集,图片总数为522张。测试集的相关情况如表1所示。从表1可见,本文算法中针对三种裂缝的TP数目均高于YOLOV3和SSD方法。
表1 检测目标数目对比
表1中对道路裂缝数据集,分别使用YOLO V3、SSD和本文算法进行分析,三种裂缝不同类型的真正例统计结果,从表1可见,横向裂缝检测出184个真正例,比YOLO V3和SSD分别多出7个真正例和8个真正例。在纵向裂缝和网状裂缝及检测真正例总数上均高于YOLO V3和SSD方法,可以初步判断本文算法优于YOLO V3和SSD算法。
表2和图7表示了三种裂缝中准确率和召回率的比较,从表2中可以看出,本文算法的准确率略低于YOLO V3算法,与SSD算法基本类似。本文算法的纵向裂缝和网状裂缝的召回率表现均高于YOLO V3算法和SSD算法。图7中展示了三种不同算法对应的P-R曲线,纵坐标P(准确率),坐标R(召回率)。通过面积可以得出不同算法的F1值。
表2 三种裂缝准确率/召回率比较
图7 F1—score图
表3表示三种裂缝的AP和各个类别的AP值,结果反映本文算法的MAP为91.29,比SSD算法提高2.05%,比YOLO V3算法提高8.16%。各个分项类别中本文算法在纵向裂缝和网状裂缝AP值均高于其它两种算法,在横向裂缝中略低于YOLO V3算法。本文算法的FPS为38.1比YOLO V3算法和SSD算法分别提高1.1倍和1.88倍。
表3 三种裂缝AP、FPS比较
由图8可以看出,图中黑色区域为先验框、虚线部分为预测框。从结果上看,检测准确率较高,同时与标签的IOU也较大,能够有检测不同类型的裂缝。
图8 道路裂缝检测效果
本文提出一种改进的轻量级SSD道路裂缝目标检测算法。通过将SSD中骨干特征网络,改进为轻量级的mobileNet网络,可以降低网络参数量和模型大小,从而更快地对图像裂缝进行识别,试验结果表明,改进算法FPS为38.1,比YOLO V3算法和SSD算法分别提高1.1倍和1.88倍,检测单张图片时间为0.026 s,大幅度提高了检测速度。在SSD算法中使用金字塔结构进行特征融合,将底层高语义信息和高层高分辨率信息进行融合,能够保证在模型减小的情况下检测精度不会下降,甚至略有提高。试验表明,本文算法的MAP为91.29,比SSD算法提高2.05%,比YOLO V3算法提高8.16%。
在此基础上还需要进一步扩充数据集,在已经建立好了数据集基础上进一步加大数据集样本数量;对道路裂缝分割方法进行进一步研究,同时可以建立道路裂缝分割数据集;尝试将VIT应用到道路裂缝检测领域,以便更能获得更优的参数指标。