周 童 周志达 吴怡宁,3 文旭光 蒲黔辉*
(1.西南交通大学 土木工程学院,四川 成都 610031;2.广西中国-东盟综合交通国际联合重点实验室南宁学院,广西 南宁 530000;3.浙江大学建筑设计研究院有限公司,浙江 杭州 310028)
在各种桥梁病害中,裂缝是桥梁多病害的早期表现形式之一,危害程度极大。采用传统人工裂缝检测存在桥下空间小、耗时长、主观性强、效率低等缺点,难以满足量大面广的桥梁养护和维修需求。而无损检测路面裂缝的方法,例如激光全息技术[1],具有灵敏度高且响应速度快的特点,但该技术适用于平整路面,对于桥梁这类较为复杂的结构可用性不佳,且系统结构复杂,成本高,在现阶段难以推广应用。因此,传统的桥梁裂缝检测方法已不能满足需求越来越大的桥梁维保检测任务。
近些年来,机器学习技术发展迅速,其中深度学习技术在大数据[2]的加持下更是在医疗[3]、网络安全[4]等领域取得了显著进展,为桥梁裂缝检测研究提供了新方法。在2016 年,Zhang 等人[5]首次将卷积神经网络应用于道路裂缝检测,相比于传统的人工特征提取方法,CNN提取特征的效率更高,并且排除了主观性等不利因素,使得检测的准确性和可靠性显著提升,从而带来显著的经济收益。随后,研究人员[6-7]构建了多个基于CNN的病害识别和特征提取模型,实现了对路面病害的高效、精准识别和测量。此外,全卷积神经网络(FCN)的使用实现了对图像中裂缝等多种病害的像素级分割[8]。目前基于深度学习的裂缝检测方法可以大致分为图像分类、图像检测和图像分割三类[9]。
本文基于图像语义分割对桥梁的裂缝进行识别。图像语义分割技术可分为两大类:基于区域的图像语义分割技术和基于像素的图像语义分割技术,后者的分割精度和分割速度更好。本研究使用基于编码器-解码器框架的U-net模型,并对其做出改进,以解决当前针对较细微裂缝图像检测结果精度不高的问题,实现了自动、准确的裂缝图像像素级分割。
U-net 模型结构如图1 所示,包含编码器、解码器、跳跃连接等主要组成部分。编码器部分由连续的卷积和池化层组成,用于逐步降低特征图的空间分辨率,同时增加特征图的通道数,可以捕获图像的全局特征,提取语义信息。解码器部分由连续的卷积和上采样层组成,用于逐步恢复特征图的空间分辨率,同时减少特征图的通道数,通过跳跃连接将编码器中的低级特征与高级特征融合,从而保留图像细节和局部信息。
图1 原始U-net模型示意图
在编码部分,主要对输入图像进行卷积和池化操作,得到五个大小不同的特征图,且每次卷积、池化操作后获得的特征图尺寸减少为原来的一半;在解码部分,首先对第五次卷积之后所得到的特征图进行上采样,将其结果与第四次池化所得到的特征图进行特征融合和卷积操作,之后依次对其余特征图进行同样的操作,直到得到最终的分割结果。
该网络的输入图像将原始图像边缘像素进行对称复制,增大了图片尺寸。对于本文选取的Crack 500数据集,其像素大小为640×360,若将其作为网络的输出反推各阶段特征图大小,会在第二次下采样中出现奇数。为避免这个问题,将输出图像周围进行填充使其变为644×372的大小,同时将原始图像的边缘像素进行复制扩充使输入特征图变为828×556的大小。
1.2.1 全零填充
在图像处理中,卷积是一种对图像进行特征提取的操作,通过在输入图像上滑动卷积核来提取不同位置的特征。为了保持输出特征图的大小与输入图像相同,可以在输入图像的周围加上合适数量的零像素,从而进行卷积操作而不改变特征图的尺寸。全零填充操作有助于对各阶段特征图信息进行充分利用并传递。
1.2.2 空洞卷积
与传统的卷积操作不同,空洞卷积在卷积核内部引入了固定间隔(膨胀率)的空洞,使得卷积核在输入数据上的感受野增大,从而能够捕捉更大范围的特征。相比于增大卷积核的尺寸来捕获更大感受野,空洞卷积能够在保持卷积核尺寸不变的情况下增加感受野,从而减少了模型所需学习的参数量[10]。
如图2 所示,在卷积核大小不变的情况下,感受野会随着间隔的增加而提高。本文将膨胀率设置为2。
图2 空洞卷积示意图
改进U-net模型结构如图3 所示,该网络最后一个池化层的输入行数是45,在进行2×2最大池化时会导致最后一行像素点被抛弃,因此在后续的反卷积过程中将其添加到对应位置。输出端采用一个卷积核大小为1×1的卷积组,将图像变为1×640×360的大小,并且采用Sigmoid激活函数将每个像素是否为裂缝的概率映射到0-1之间,若该点的值大于0.5,则认定其为裂缝,反之为背景。同时,本文对网络层进行了增添,在各池化层之后增加一次上采样作为特征图,将每个阶段的特征图进行通道融合,提升了网络的全局表达能力。
图3 改进U-net模型示意图
由于网络输入特征图没有经过扩充操作,因此在经过卷积操作时大大减少了训练参数,有效提高了网络计算效率。
本文以Crack 500公共数据集作为实验数据进行实验,其中包含3368张路面裂缝图片,随机选取3000张作为训练集,剩余的作为测试集进行验证。对于图像标签,在GitHub上找到了其他学者标记的标签文件并用于本文模型的训练,并利用训练好的模型参数对桥梁混凝土裂缝进行再训练,最终得到分割检测的结果。对于Crack 500数据集,其图像大小为640×360,而用于迁移训练的桥梁混凝土裂缝图像大小为1024×1024,为使得模型输入尺寸一致,将桥梁裂缝进行剪裁使其变为640×640的大小。
由于裂缝图像主要以灰度值的变化为主,因此只需要通过单通道图像,对灰度信息进行图像处理,判断该像素点是否为裂缝像素。并且相较于彩色图像,灰度图像占的内存更小,处理速度更快,同时将原裂缝图像转换为灰度图像后,在神经网络中训练所需的时间复杂度也更小。
常用的获取图像灰度图像算法包括:均值法;最大值法;加权平均法。本文采用的灰度处理方法是计算各个像素点三通道像素值的平均值,使其作为该点的灰度值,如公式(1)所示。
式中:Gray(x,y)——灰度值;
R(x,y)——红色像素值;
G(x,y)——绿色像素值;
B(x,y)——蓝色像素值。
本文实验运行环境是基于Keras 框架进行的,Keras的主要优点是模块化程度高,支持当前提出以卷积神经网络为框架的模型,使用Keras框架编辑的代码可以使程序可读性强、通俗易懂、更加简练、灵活性更强。Keras框架与其他Python基础框架相比是相对较为高级别的基础框架,它以构造块形式去封装常用的深度学习训练模块及计算操作,使用者不需考虑其内部模块结构的复杂性。其中,本研究的代码是基于GitHub 已有程序“Road Crack Segmentation Keras”结合其他部分网络代码改进而来。该代码的适配环境为Python 3.7,Tensorflow-gpu 2.2.0,Keras 2.3.1等一系列适配版本的相关插件。
2.3.1 学习率(Learning Rate)
学习率是深度学习中几个最为重要的参数之一,它决定着模型能否快速收敛以及精确度等问题[16]。在一个神经网络模型中,学习率过大或过小都会对网络产生较大影响。在训练网络模型的时候,在开始训练的前期,网络需要一个较大的学习率以此快速地收敛到最优点附近,但随着训练的深入,学习率则需要不断变小,以此来靠近最优点,此时过大的学习率会让模型在最优点附近来回震荡且幅度较大。因此随着模型训练次数的增加,学习率应该先大后小,才可以保证网络模型在训练结束时达到或最大限度地靠近最优点。本次试验中采用余弦退火的方法自动调整学习率,如式(2)所示。
式中:lr——灰度值;
base_lr——初始学习率,本文设置为10-3;
epoch——当前的训练轮次;
T_max——学习率退火的最大epoch 数,设置为300。
2.3.2 迭代周期(epoch)
迭代周期决定了训练过程中数据集在神经网络上迭代的次数,直接影响到模型的训练效果和性能。在训练过少的epoch后,模型可能没有充分学习数据集,导致欠拟合;而训练过多的epoch,模型可能会过度拟合训练数据,而泛化能力较差。本文选取迭代次数为300轮。
2.3.3 批大小(Batch-Size)
在训练神经网络时,通常将数据集分成若干个小批次,每个小批次包含一定数量的样本。Batch-Size 决定了每个小批次中包含的样本数量。较大的Batch-Size通常可以加快训练速度,因为每个小批次中的样本数增加,从而减少了参数更新的次数,这样可以利用矩阵运算和并行计算的优势,提高训练的效率;并且可以使训练过程更加稳定,有助于避免训练过程中的震荡或发散问题。
然而,较大的Batch-Size需要更多的内存来存储参数和梯度,特别是在GPU 上进行训练时。如果内存不足,可能需要减小Batch-Size 或使用更大的显存设备。根据电脑的显存,本文将批大小设置为6。
精确率从预测结果角度出发,描述了二分类器预测出来的正例结果中有多少是真实正例,即该二分类器预测的正例有多少是准确的;召回率从真实结果角度出发,描述了测试集中的真实正例有多少被二分类器挑选了出来,即真实的正例有多少被该二分类器召回。Precision和Recall仅适用于二分类问题,如式(3)、(4)所示。
式中:TP——预测为正类别且真实为正类别的样本数量;
FP——预测为正类别但实际为负类别的样本数量;
FN——预测为负类别但实际为正类别的样本数量。
F1-Score 是精确率和召回率的调和平均值。由于精确率和召回率通常是相互牵制的,优化其中一个指标可能会导致另一个指标下降,F1-Score可以帮助综合考虑这两者,从而更全面地评估分类器的性能。计算公式如式(5)所示。
式中:P——精确率;
R——召回率。
交并比可以用于评估模型预测的边界框或分割结果与真实标注之间的重叠程度,取值范围在0到1之间。当IOU等于1时,表示预测结果完全和真实标注一致;当IOU等于0时,表示预测结果和真实标注没有任何重叠。计算公式如式(6)所示。
式中:Area of Intersection——预测区域和真实标注区域的交集面积;
Area of Union——预测区域和真实标注区域的并集面积。
本文首先利用Crack 500[10]公共数据集作为算例。该数据集经过处理后包含3368张裂缝图像,其中训练数据集3000张图像,验证数据集368张图像。所有图像均配备有像素级人工标注的裂缝真值图像。如图4所示,为部分Crack 500图像的分割效果对比,将原始图像和标记以及改进前后模型的分割二值化图像直观展示了出来。从图4 中可以观察到,采用原始U-net 网络对测试集识别的结果会使得原本连续的裂缝出现断裂;而本文算法对于较浅裂缝的识别较原U-net网络更加精确,同时对裂缝形态的提取更加完整。
图4 Crack 500效果对比图
由于路面裂缝与桥梁混凝土裂缝的特征表现形式相同,因此使用迁移学习对较少的桥梁裂缝图像进行快速训练,本文设置迭代轮数为30轮。将原始图像进行剪裁,每张图像划分为6个640×360大小的图片。自数据集总共拍摄了30张图片,经过预处理之后将180张图片随机抽取150张用于训练,其余30张用于验证,并对其手动添加标签文件。
图5中选取了三张剪裁后的裂缝图像,对其原始标记和输入模型得到的标记进行对比。从图5中可以观察到,由于桥梁混凝土裂缝相对与路面裂缝所含噪声较小,最终模型预测出的裂缝形态与自制标签裂缝形态吻合情况出色。
图5 桥梁裂缝效果对比图
针对不同模型在不同数据集上的精确率、召回率、F1分数以及交并比进行计算,如表1所示。
表1 模型评价
改进的U-Net在Crack 500数据集上取得了良好的分割效果,精确率为96.53%,召回率为97.29%,F1分数为96.91%,IOU 为93.42%。与原U-Net 相比,改进UNet的Precision 提升了4.42%,Recall 提升了3.75%,F1-Score 提升了4.09%,Intersection-over-Union 提升了4.85%,并在桥梁裂缝自数据集上展现出优于Crack 500数据集的各项指标,充分体现了本文所提出的改进U-Net模型在桥梁混凝土裂缝自检测中的实用性。
本文基于U-Net 提出了性能更优的桥梁裂缝检测模型,实验结果证明其能较好地检测混凝土桥梁裂缝。主要结论如下:
(1)通过在原始U-Net的结构中增加一次上采样过程,使得模型能够获得更多的裂缝细节信息。上采样过程则能够恢复图像的细节信息,这样可以使得模型更加准确地检测到混凝土桥梁裂缝。
(2)在卷积过程中,通过使用全零填充的方式,保护图像边缘不受卷积操作的影响,同时使图像每次卷积后的规格不变,保证输入输出尺寸一致,这样可以避免在卷积过程中损失图像的边缘信息,从而提高了模型的检测性能。
(3)与原U-Net 相比,改进U-Net 在Crack 500 数据集中Precision提升了4.42%,Recall提升了3.75%,F1-Score 提升了4.09%,Intersection-over-Union 提升了4.85%,并在桥梁裂缝自数据上表现更佳,取得了良好的分割效果。