1. 引言
至今我国已拥有超过100万座公路桥梁,随着时间的推移,越来越多的桥梁会进入维修期,其中,裂缝作为桥梁建筑中最常见、最严重的病害之一,是评判桥梁结构是否安全的重要指标。裂缝会破坏桥梁结构的整体性,降低桥梁的整体强度,易产生安全事故,是重大的安全隐患,需要及时发现解决。传统的裂缝检测方法主要采取人工检测,但人工检测效率低、成本高,且由于某些桥梁架设在深山或江河湖泊上,人工检测过程十分不便。随着深度学习技术应用拓展,为其应用于桥梁裂缝检测提供了又一重要选择。
主流的深度学习目标检测算法可以分为两类,一类是双阶段目标检测算法,例如R-CNN [1] 、Fast R-CNN [2] 和Faster R-CNN [3] 等,这类算法通常将目标检测问题分成两个步骤:提出特征候选区域和对其进行分类,洪卫星 [4] 等人利用Faster R-CNN对路桥裂缝图像进行训练检测。另一类是单阶段目标检测算法,例如SSD [5] 和YOLO系列,通过舍弃对候选区域的选择,使得算法整体的检测速度更快,刘永胜 [6] 等人通过替换SSD网络的Backbone和引入SENet (Squeeze-and-Excitation Networks)通道注意力机制,实现了裂缝检测精度的提升;苏卫国 [7] 等人使用YOLOv3网络对道路裂缝进行检测;石颉 [8] 等人在YOLOv4网络的基础上对上采样模块和特征融合模块的进行改进,使算法的整体精度提升了6.4%;何兆益 [9] 等人通过改进YOLOv5的特征融合层,显著提升了算法对公路隧道衬砌裂缝的检测效果;廖祥灿 [10] 等人在YOLOv5网络中加入注意力机制并对YOLOv5网络的损失函数改进,对桥梁裂缝的检测具有较好的效果,算法的精度提升了5%。以上这些算法实现了对桥梁裂缝的检测,但其检测精度仍有提升空间。
本文针对当前桥梁裂缝检测存在的错检、漏检问题,基于YOLOv7框架设计了一种桥梁裂缝检测算法,首先,将CBAM (Convolutional Block Attention Module)注意力机制加入的模型的主干特征提取部分,CBAM注意力机制融合了通道注意力机制和空间注意力机制,使网络模型可以同时关注通道维度和空间维度的信息,提高算法的检测精度;其次,优化空间金字塔池化结构以提升算法的检测性能;最后,更换YOLOv7的损失函数为WIoU (Wise-IoU),WIoU用预测框和真实框的边框中心点计算它们之间的距离,并将这个距离作为两个框之间的最大距离,进而计算两个框之间的区域。根据两个框之间的区域,计算权重系数,该系数衡量了两个框之间的关系,可以用于加权IOU得分,提升网络的收敛速度。
2. YOLOv7算法原理
YOLOv7 [11] 算法结构图如图1所示,该算法模型由四个部分组成,分别是输入端、主干网络、颈部网络和预测头网络。主干网络由CBS卷积、ELAN (Extended Efficient Layer Aggregation Networks)网络和MPConv模块组成。颈部网络主要由SPPCSPC (Spatial Pyramid Pooling, Cross Stage Partial Channel)金字塔结构、ELAN-H网络、上采样网络和MPConv模块组成;在预测头网络,RepConv结构可以对特征通道数进行调整,使算法可以输出三种不同尺度的预测结果。
3. 改进的YOLOv7桥梁裂缝检测算法
3.1. CBAM注意力机制
本文引入了CBAM [12] 注意力模块,如图2所示,CBAM通过融合通道注意力和空间注意力,可以实现对输入特征进行通道级和空间级的注意力调控。CBAM注意力机制首先进行通道注意力机制的计算,通道注意力可以区分每个通道的重要性,使算法能够有效的获得不同通道之间的特征;然后CBAM注意力机制会进行空间注意力模块的计算,帮助算法捕捉裂缝的空间特征信息。
通道注意力模块如图3所示,首先,输入特征图F,并对其进行最大池化和平均池化操作,获得两个空间维度为1的特征图;然后将这两个空间维度为1的特征图送入共享多层感知机,得到两个特征图;最后,将两个特征图进行相加并通过sigmoid激活函数,得到输出特征图Fc。
空间注意力模块如图4所示,首先,在单通道维度上对输入的特征图Fc的做最大池化和平均池化操作,得到两个特征图;然后,将得到的特征图按照通道维度拼接成两个通道,通过卷积层对通道进行降维操作,最后将降维后的特征送入sigmoid激活函数得到最终的输出特征图Fout。
本文将CBAM注意力模块添加在特征提取网络之后,使整个网络模型能够同时关注通道维度和空间维度,使网络模型能够更好的提取桥梁裂缝特征,从而提高桥梁裂缝的检测精度。
3.2. SPPCSPC模块改进
在网络结构中,SPP [13] (Spatial Pyramid Pooling)的作用是能够增大感受野,使算法适应不同的分辨率图像,它通过并联的三个最大池化结构来增大感受野,而CSP模块是由两部分组成,一部分进行SPP结构处理,另一部分则进行常规的处理,最后通过Concat的操作将这两个部分合并在一起,这样能够减少一半的计算量,不仅能提升桥梁裂缝的检测速度,同时还能提高桥梁裂缝检测的精度。YOLOv7中的SPPCSPC是将SPP和CSP结构进行结合。SPPF [14] (Spatial Pyramid Pooling-Fast)则是采用三个串联的池化层来代替SPP的三个串联的池化层,提高了检测速度。SPPFCSPC [15] 模块是将SPPF模块和CSP模块进行组合。SPPFCSPC模块在保证感受野不变的同时获得了检测速度的提升。SPPFCSPC的结构如图5所示。

Figure 5. SPPFCSPC structure diagram
图5. SPPFCSPC结构图
3.3. WIoU损失函数改进
YOLOv7的损失函数由分类损失、置信度损失和边界损失三部分加权相加组成,边界损失对应的边界框预测是目标检测中最重要的任务,CIoU损失函数 [16] 是YOLOv7使用的边界损失函数,它能评判预测检测框与真实检测框的检测效果。其计算公式如下:
(1)
(2)
其中,b和bgt分别表示预测框和真实框的中心点,ρ代表这两者之间的欧式距离。c表示两个框的交集最小方框的对角线距离,wgt、hgt是真实框的宽和高,w、h是预测框的宽和高。
考虑到实际的检测任务中,训练数据中并非全部都由高质量样本组成,如果算法在训练过程没有分辨样本质量高低的能力,会导致模型泛化性能的降低。而WIoU [17] 采用动态非单调聚焦机制,用离群度代替IoU来评价锚盒的质量,可以有效减小了低质量样本带来的危害,从而提高桥梁裂缝检测的整体精度。WIoU计算公式如下所示:
(3)
(4)
(5)
(6)
其中,δ,α为超参数,γ为梯度增益,β为离群度,
是具有动量m的动态平均IoU值。为了网络训练的收敛速度,将β中LIoU和RWIoU中的Wg和Hg从梯度计算中分离出来(上标*表示此操作)。由于LIoU并非静态的,预测框的质量划分标准也不是一成不变的,这使得WIoU可以在整个训练检测过程中都可以做出对当前情况最有利的梯度分配方案。改进后的YOLOv7算法结构图如图6所示。

Figure 6. Improved YOLOv7 structure diagram
图6. 改进YOLOv7结构图
4. 实验环境与结果分析
4.1. 数据集及环境
实验使用的裂缝图像来自于Original_Crack_DataSet_1024_1024 [18] 公开数据集,主要是桥梁裂缝图像。将数据集按照7:2:1的比例分为训练集、验证集和测试集,并使用labelme对训练集和验证集中的所有图片进行人工标注,得到桥梁裂缝的txt格式的标签文件,标注示例图如图7所示,图7(a)为数据集原图,图7(b)为标注后的图片。
4.2. 评价指标
评价网络性能的指标主要有精度(Precision),召回率(Recall),平均精度均值(mAP)三个指标来客观的评价模型的性能。AP是PR曲线下面积的标量表示,线下的面积越大,表示精度越好。mAP则是表示所有类别的平均AP,其值越大表示模型越好。各指标的计算公式如下所示:
(7)
(8)
(9)
(10)
式中FP表示模型预测错误的正样本数,TP表示模型正确预测的正样本数,FN表示模型预测错误的负样本数。
4.3. 实验结果
为了验证本文改进的YOLOv7桥梁裂缝检测算法的提升效果,基于4.1节的实验环境和数据集,分别对YOLOv7桥梁裂缝检测算法和本文改进的桥梁裂缝检测算法进行训练,对比算法性能,对比结果如表1所示。

Table 1. Model performance comparison
表1. 模型性能对比

Figure 8. Comparison of mAP values before and after algorithm improvement
图8. 算法改进前后mAP值对比图
通过实验对比发现,本文改进的YOLOv7算法在本文数据集上的检测精度达到87.1%,召回率达到86.3%,对比原YOLOv7模型的精度和召回率,获得了显著提升,其中,精度提升了8.8%,召回率提升了9.4%;改进后算法模型的mAP值对比原YOLOv7算法模型也获得显著提升,原模型的mAP值为76.1%,改进后模型的mAP值达到了85.4%,提升了9.3%,两种算法模型的mAP值对比结果如图8所示。实验结果表明,本文改进的YOLOv7算法模型对桥梁裂缝的检测效果要明显优于YOLOv7算法模型。
为了直观展示本文算法的检测效果,从测试集中选取部分裂缝图片的检测结果进行展示,可视化的检测结果如图9所示,由图9可知,原YOLOv7算法的基本能检测出大部分桥梁裂缝,但存在一些漏检的情况,而本文改进的算法在裂缝的漏检方面明显要优于原YOLOv7算法,本文改进算法基本可以全部检测出桥梁裂缝,这体现了本文改进算法具有良好的桥梁裂缝检测能力。

Figure 9. Comparison chart of crack detection algorithms
图9. 裂缝检测算法对比图
4.4. 消融实验
本文算法在YOLOv7网络的基础上,增加了注意力机制,并对特征融合方法和损失函数进行了改进。为了验证各模块的改动和不同模块相互组合对检测算法的性能影响,设计了消融实验,实验的基准模型为YOLOv7模型,为了保证实验的准确性,所有实验均在4.1节所设置的环境使用相同的参数和数据集进行训练。实验验证情况如表2所示。

Table 2. Comparison of ablation experiment results
表2. 消融实验结果对比
消融实验的结果如表2所示,原YOLOv7模型的检测精度、召回率和mAP值最低,分别为78.3%,76.9%和76.1%;本文改进后算法的精度、召回率和mAP值都得到了显著提升,分别达到了87.1%,86.3%和85.4%。在分别加入CBAM注意力机制、改进SPPFCSPC模块和改进WIoU模块中,我们发现改进SPPFCSPC模块后对算法的提升最大,算法的检测精度达到了83.4%,提升了5.1%,召回率达到了82.6%,提升了5.7%,mAP值达到了81.9%,提升了5.8%;加入CBAM注意力机制和改进WIoU的对算法的提升虽然不及改进SPPFCSPC,但对比原YOLOv7在检测精度、召回率和mAP值上都得到了一定的提升,在加入CBAM后,检测精度达到了80.5%,提升了2.2%,召回率达到了79.8%,提升了2.9%,mAP值达到了79.4%,提升了3.3%;在加入WIoU损失函数后,检测精度、召回率和mAP值分别达到了79.3%,78.5%和77.3%。
在加入两种模块的实验中,我们发现,对比检测精度、召回率和mAP值都比单独加入一种模块有所提升,这也验证每个单独的改进之间可以叠加,使用多种改进使模型的整体性能提升呈正向优化。在加入两种改进的模型中,同时加入CBAM注意力机制和改进的SPPFCSPC模块的模型检测精度最好,mAP值最高,检测精度达到了85.8%,对比YOLOv7提升了7.5%,mAP值达到了84.6%,对比YOLOv7模型提升了8.5%。加入CBAM注意力机制和改进WIoU损失函数后,对比YOLOv7模型,检测精度提升了3.3%,召回率提升了4.4%,mAP值提升了4.6%。实验数据表明多种优化策略组合使用可以提升模型性能。消融实验mAP值对比情况如图10所示。

Figure 10. Comparison of mAP value for ablation experiments
图10. 消融实验mAP值对比图
5. 结论
本文针对现有桥梁裂缝检测算法存在的错检、漏检等问题,提出了一种基于改进YOLOv7的桥梁裂缝检测算法。在Original_Crack_DataSet_1024_1024公开数据集进行训练验证,加入CBAM注意力机制并优化颈部网络的特征融合层网络结构,提升模型对桥梁裂缝特征的识别检测能力,引入WIoU损失函数提升模型的泛化能力,增强模型的检测性能。实验结果表明,改进后的YOLOv7算法能够显著提升其对桥梁裂缝的检测能力。后续将从轻量化的角度考虑,对网络结构进行进一步的优化和改进,使算法可以应用于更多的建筑裂缝检测场景。
基金项目
常州市5G + 工业互联网融合应用重点实验室(CM20223015)。
NOTES
*通讯作者。