1. 引言
裂纹作为桥梁常见的危害,对桥梁的安全运营而言是重大的安全隐患 [1] 。为确保桥梁始终处于正常运行状态,需要定期对桥梁进行检查和养护工作,但是我国的桥梁技术并没有完全因为技术高速发展而出现飞跃式进步,科学有效的检测评估还有待完善 [2] 。原先的桥梁裂纹检测,大部分是依靠人工费时费力。科研工作者们开始考虑用机器代替人工,逐渐将机器视觉应用于桥梁检测领域,以此来降低对人工的依赖性,同时也减少了人工的主观或经验知识导致的错误评估 [3] [4] 。图像处理技术和传统的机器学习技术慢慢渗透裂纹检测的研究中来 [5] 。近几年来,神经网络层数不断增加,深度神经网络被应用到各种领域,其中也包含桥梁的裂纹检测 [6] [7] 。
从深度学习的角度来说,学者们对桥梁裂纹检测的研究主要有两个方向,一是多阶段检测,二是单阶段检测。常见的双阶段检测有,Faster R-CNN [8] 、Mask R-CNN [9] 等,单阶段检测模型有,YOLO [10] [11] 系列、SSD [12] 等。单阶段的检测是一种密集预测,而多阶段的检测是一种稀疏预测。相比于双阶段的检测算法,单阶段只需要进行一次回归,虽然精度会下降,但是其速度会大大提升,更加适合于实时的目标检测。Kemal等人 [13] 使用基于深度学习的Faster R-CNN方法进行混凝土路面裂缝检测,将双阶段的目标检测算法应用于裂纹的检测中。张等人 [14] 基于改进的YOLOv3算法,结合了MobileNets和卷积块注意模块(CBAM)。使得模型大小减小了223.9 M。于等人 [15] 基于YOLOv4算法,使用Focal loss损失函数并通过剪枝提高检测精度,满足实时性的要求。改进后的算法平均精度(mAP)提高了0.064。张等人 [16] 尝试将目标检测和图像分割结合起来,对PSPNet算法进行了改进,将桥梁裂缝与非裂缝区域分割开来,避免了检测算法的视觉干扰,最终得到的分割结果mAP达到0.87,精度高于主流的分割模型。马等人 [17] 基于YOLO框架和图像分割设计出两阶段混凝土结构裂缝检测方法,使得mAP达到0.9502,该文还强调YOLOv5模型是快速准确且易于实现的。
上述学者都使用目标检测方法在裂纹研究中取得了良好的结果,但是研究的数据集都是数量庞大的大数据集,且这些数据集的尺寸较小,如256 × 256或500 × 350。此外不少的研究只考虑提升检测的精度,忽略了模型的大小与实时检测问题。为合理解决上述两个问题,本文提供了两种类型的数据集,分别为只有400张且的背景较为复杂Crack400数据集,和经过筛选和扩增之后有2000张的Crack2000数据集,这两个数据集分辨率均为640 × 640。为桥梁裂纹检测、桥梁养护工作的开展,本文设计出了一个对小数据集也拥有较好检测效果,并且模型大小更为轻量化的网络模型结YOLOv5-W。以平衡速度、精度、模型大小三个方面的需求,既满足了精度与速度的提升,又减小了计算量。
2. YOLO介绍
自2015年单阶段的目标检测算法YOLO v1发布以来,YOLO系列算法不断迭代更新,但是整体的设计思路仍然使用的是单独的卷积神经网络模型实现端到端的检测。输入图像经过卷积神经网络网络即可得到结果,相比于R-CNN算法,其速度更快,更适合做实时监测任务。算法的思路是将图片分割为7 × 7的网格,每个网格负责区检测中心点落在格子里的目标。每个单元格会预测两个边界框,每一个边界框包含五个参数(x, y, w, h, c)即宽度高度横纵坐标和置信度。由于V1版本划分的单元格有限,可以识别的类别也有限,并且每一个单元格只预测一个类别,如果出现重叠就无法解决并且对于小物体检测的效果较为一般。
应运而生的YOLOv2就增加了更多的技巧来解决上述问题,引入了批量归一化(Batch Normalization, BN),舍弃原有的dropout操作,卷积后加入批量归一化,每一层的输入都做了归一化,收敛也更加容易,如今BN操作已成为网络的必备处理。使用分辨率更大的图像,图片可以划分成13 × 13的网格。摈弃全连接层,参照VGG网络使用更小的卷积核减小计算开销。引入Anchor Box增加更多的box数。使用K-means聚类 [18] 的方法,得到5种不同但更适合于目标检测的预选框尺寸。直接的位置预测,限制了位置预测,参数化更容易学习,使网络更稳定。
2018年YOLO的作者提出了YOLOv3,它是前作的改进,最大的改进特点包括使用了残差模型Darknet-53,以及为了实现多尺度检测采用了特征金字塔网络(Feature Pyramid Networks, FPN) [19] 。YOLOv4最显著的改变是引入了跨阶段局部模块(Cross Stage Partial, CSP) [20] ,使用CSPDarknet53作为骨干网络增强了网络的学习能力,移除计算瓶颈,降低现存的使用。颈部网络部分使用了空间金字塔池化模块(Space Pyramid Pooling, SPP) [21] ,使用不同尺度的最大池化方式链接不同尺寸的特征图,显著分离上下文特征,一定程度上解决了多尺度的问题。在V3的基础上增加了路径聚合网络(Path Aggregation Network, PAN) [22] ,既有高层语义信息向底层融合,又有低层的语义信息向高层融合,起到了特征聚合的作用。YOLOv5实际上也是在YOLOv4的基础上进行了一定程度的优化。本文所使用的基础网络是YOLOv5-6.0版本,骨干网络部分使用尺寸大小为6 × 6,步长为2的卷积核代替了YOLOv5的Focus模块;使用C3模块代替CSPDarknet53,使用SPPF模块来代替SPP模块,通过多个小池化核级联代替SPP模块中单个大尺寸池化核,保证原始性能的同时融合不同感受野的特征图,不仅丰富了特征图的表达能力还进一步提高了运行速度。颈部网络使用PANet,在FPN的基础上又引入了一个自底向上的路径,主要用于特征融合和尺度变换,可以提高检测效果。本文所使用的YOLOv5-6.0版本的网络结构更加精简和高效,可以在保持高精度的同时,提高检测速度和计算性能。
3. YOLOv5模型优化改进
3.1. 采用动态损失函数Wise IoU
在目标检测领域种,边界框回归的损失函数对检测结果起至关重要的结果,合适的损失函数将给模型的性能带来显著的提升。YOLO系列算法中,使用交并比来衡量真实框和预测框的重叠程度。如图1所示,绿色部分为真实框,橙色部分为预测框,重叠的部分越多,说明预测的越准确。
其中预测框表示为:
(1)
真实框表示为:
(2)
损失函数可以表示为:
(3)
使用IoU作为损失函数能够更好反应重合程度,且具有尺度不变性,无论矩形框的大小如何,重叠程度都不会受到尺度的影响。但是对损失函数求梯度,不难看出,当边界框之间没有重叠时,反向传播的梯度会消失,导致梯度无法更新。于是在原有的损失函数中添加了惩罚项来解决梯度消失的问题,此时的惩罚项是与边界框相关的几何因素。紧接着出现的D IoU,将惩罚项定义为中心点连线的归一化长度。不仅考虑到IoU的值还考虑到了框中心点的距离,直接最小化两个boxes之间的欧式距离,因此收敛速度更快。而后又出现了C IoU,在D IoU的基础上增加了纵横比。优秀的回归定位损失函数考虑到了三种几何参数,包括重叠面积、中心距离、长宽比。
但是在数据的训练过程中,难免会存在质量比较低的数据,上述所使用的几何度量会不断加剧对低质量数据的学习,从而降低模型的泛化性能。现有的数据集中不乏高中质量的数据,同时也存在低质量的数据,如果一味强调边界框对低质量数据的回归,必然会影响模型的检测性能。Focal E IoU v1被提出以解决这个问题,但由于其聚焦机制是静态的,并未充分挖掘非单调聚焦机制的潜能 [23] 。而后有学者基于这个观点提出Wise IoU [24] ,通过动态非单调聚焦机制使用“离群度”替代IoU对锚框进行质量评估,并提供了更为明智的梯度增益分配策略。该策略在降低高质量锚框的竞争力的同时,也减小了低质量数据产生的有害梯度。这使得Wise IoU可以聚焦于普通质量的锚框,并提高检测器的整体性能。本文在对YOLOv5的优化中,正是替换掉了原始的C IoU,使用Wise IoU以专注于普通质量的数据,提高整体的检测性能。
Wise IoU v1使用两层注意力机制,用
来放大质量好的检测框的
。
(4)
其中
,
,并且
(5)
Wise IoU v2是仿照focalloss针对于交叉熵的单调聚集机制,降低简单数据对损失的影响,聚焦于困难的数据上这一目标,而构造的单调聚集函数
:
(6)
为了防止训练后期收敛速度减小,引入了均值
作为归一化因子:
(7)
Wise IoU v3中引入了离群度
来衡量检测框的质量:
(8)
离群度小意味着检测框质量高,为离群度较小的框分配较大的梯度增益,为离群度较大的检测框分配较小的梯度增益,减小质量较差的数据对模型的影响。并构造非单调聚焦系数r:
(9)
其中,当
时,使得
。当锚框的离群程度满足
(C为定值)时,检测框将获得最高的梯度增益。
是动态的,这也使得检测框的质量划分标准也是动态的,保证了每时每刻都能做出最适合的梯度增益分配。
3.2. 引入轻量化颈部设计Slim-Neck
3.2.1. GSConv
轻量化网络设计中常常使用深度可分离卷积(Depth-Wise Separable Convolution, DSConv) [25] ,使用DSConv分别对每一个通道进行操作,以此来减少参数量和计算量。但是,DSConv存在着输入图像的通道在计算过程中是分离的缺点,不可避免会丢失有用的信息,该缺点会在主干网络中被放大。为了使DSConv更接近于标准卷积(Standard Convolution, SConv),引入了一种新的方法混合卷积。混合卷积由SConv、DSConv和shuffle构成,称为GSConv。如图2所示,Conv表示标准卷积,DW Conv表示深度可分离卷积。GSConv使用shuffle操作,将标准卷积生成的信息渗透到深度可分离卷积生成的信息的每一个部分,允许来自标准卷积的信息完全融合进深度可分离卷积的输出中,GSConv以较低的时间复杂度保留了通道间隐藏的连接。
3.2.2. Slim-Neck
GSConv能够尽量保留通道之间的连接,但是如果将其应用于整个网络中,必然加深网络模型的层数,增加推理时间。因此仅将GSConv用于颈部结构中,更能发挥其优势。原始网络颈部中标准卷积替换为GSConv,保证计算结果尽可能接近标准卷积的同时,降低计算成本。而后又在GSConv的基础上,设计GS bottleneck,图3显示了该模块的网络结构。

Figure 3. GSbottleneck network structure
图3. GSbottleneck网络结构

Figure 4. GSVoVGSCSP network structure
图4. GSVoVGSCSP网络结构
在卷积神经骨干网络中会经历空间信息逐步向通道传输,特征图压缩和通道拓展都会使得语义信息的部分丢失。密集卷积计算会保留通道间的链接,稀疏的卷积则会完全切断这些连接。DenseNet [26] 使用密集的连接,聚合了不同尺寸感受野的特征,每一层的输出都会聚合之前层的信息。虽然表现出了良好的检测性能,但是过于密集的连接,造成了特征冗余并且增大了计算的开销。有学者提出了一次性聚合操作(One-Shot Aggregation, OSA) [27] ,就是减少密集卷积在中间层的聚合,只在最后一层进行一次聚合,既保留了通道间的隐秘连接又减少了冗余的计算开销。因为OSA模块的多样化特征表示和效率,所以可以通过单次聚合机制来构建精度高、速度快的VoVNet网络 [28] 。如图4,VoV-GSCSP的设计便是参考了VoVnet的机制,替换了标准卷积所设计出来的。
3.3. YOLOv5-W网络结构
本文的优化算法是对YOLOv5算法的损失函数替换为Wise IoU,原始的Wise IoU中,有两个超参数α,δ分别设为2.1和3。
将原始网络模型的颈部更换为了一个更轻量化的颈部设计,通过GSConv引入了Slim-Neck,在减少模型复杂度的同时保持精度,提高速度。使用了轻量化的颈部设计得到的一个性能更优越、更轻量化的网络模型,并将其命名为YOLOv5-W,如图5所示。

Figure 5. YOLOv5-W network architecture
图5. YOLOv5-W网络结构图
4. 数据集
本文的数据集为自制数据集,对有裂纹的箱梁进行实地拍摄两次,共计400张。两次设备分别是iqooZ1和iPhone13。
根据现有的桥梁表面伤损规范提出相应的标注范式进行人工标注。通过labellmg标注后得到每一张图片所需检测的目标矩形框位置的标注文件。人工采集并标注后背景较为复杂的数据集命名为Crack400。如图6所示,在Crack400数据集中,裂纹背景斑驳明显,伴有黑点和白色纹路等天然噪声,在复杂的背景下,对裂纹特征的提取必然会带来一定的干扰。
简单且重复的背景,更易于提取所需的裂纹特征。为对比模型对不同背景和数量的数据的检测效果,检测模型的可泛化性。本研究对Crack400数据集进行了一定的筛选。选取背景较为单一,没有天然干扰的数据,并对这些数据进行几何尺度的数据增强。具体的增强手段包括模糊,亮度,裁剪,旋转,平移,镜像等。对于数据集中出现的对比度比较低,肉眼不容易标注的图像。使用图像增强技术,使得图像对比度得到提升,桥梁裂纹细节得到增强。筛选与扩增后,背景较为单调的数据集命名为Crack2000。如图7所示,人工扩增的数据裂纹形状更为单一,噪声多由黑色的小方块构成。
5. 实验结果
5.1. 实验环境
本文算法在window10系统下Pytorch1.11.0框架上实现,编程语言是Python3.9,并使用GPU进行加速。实验平台中CPU配置为Intel (R) xeon (R) Gold 6258R 2.7 GHz,GPU配置为:NVIDIA Tesla V100 s,显存大小为32 GB。
5.2. 评价指标
本文采用的评价指标包括精度(Precision)、召回率(Recall)、均值平均精度(mean Average Precision, mAP)、帧率(Frames Per Second, FPS)、计算量(GFLOPSs)。
对于二分类问题,可以根据样例的真实类别和网络模型预测出的组合划分为真正例(true positive)、假正例(false positive)、真反例(true negative)、假反例(false negative),这四种情况。TP、FP、TN、FN分别表示对应的样例数,便可以得到TP + FP + TN + FN = 总数。精度P和召回率R的定义为:
(10)
(11)
查准率和查全率是一对矛盾的量,查准率越高,查全率往往越低;查全率较高时,查准率就会偏低。单独用两个评价指标难以衡量好网络模型,将两者结合起来,以查准率为纵轴查全率为横轴作图,得到的曲线就是P-R曲线。平均精度AP就是P-R曲线所围成的面积,平均精度均值mAP就是所有类别的平均精度求平均,mAP50指的是IoU的值取50%时的平均精度。mAP50:95指的是IoU的值从50%取到95%,步长为5%。其公式如下:
(12)
(13)
除平均精度外,平衡F分数即F1-Score也兼顾了模型的精确度和召回率,F1分数可以看作是模型精确率和召回率的一种加权平均,其公式如下:
(14)
FPS是实时检测工作中一个尤为重要的衡量指标,它指的是目标检测网络每秒可以处理多少张的图片,一般情况下每秒能够处理30张图片,就可以达到人眼能感知到的实时效果。FLOPs是浮点运算数也就是计算量,该评价指标可以衡量模型的复杂程度。
5.3. 训练策略与实验结果
训练采用的是随机梯度下降算法(SGD),预热回合数为3,初始动量为0.8,预热初始偏差为0.1。在Carck400和Crack2000的对比实验中,训练回合数为100;在Carck400消融实验中,训练回合数为300。
5.3.1. Crack400实验
为验证YOLOv5作为基准模型的可行性,在数据集Crack400上与常见的目标检测模型做了做了对比试验。在所有的对比实验中,以8:2的比例随机分配各类裂纹图片作为模型的训练验证集和测试集,设定训练轮次为100轮,结果如表1所示。

Table 1. Crack400 comparison experiment
表1. Crack400对比实验
根据实验结果可知,黑色加粗部分表示各项指标的最大值。不论是精度、召回率、还是mAP50各项指标上,YOLOv5在Crack400数据集中检测的效果最好,平均精度可达91%,相较于SSD、Faster-RCNN的平均精度在65%~73%,有显著优势。实验结果反映出YOLOv5在小数据集上更具有优势,因此以其作为基准模型并优化更能提升现阶段网络模型对小型桥梁裂纹数据集的检测效果。
为验证优化策略中各模块对基准模型性能提升的效果,以不同模块构成的配置文件作为实验环境进行消融实验,仍然在Crack400小数据集上进行训练和验证。为更好验证收敛效果,将训练轮次设为300,消融实验结果如表2所示。

Table 2. Crack400 ablation experiments
表2. Crack400消融实验
表2从上至下依次添加了本文的优化模块,通过消融实验可以看出,本文的模块对模型检测目标的精度均有所提升。加入Wise IoU和GSConv能有效提升模型检测精度,加入GS + Slim-Neck,虽然该模块降低了检测速度,但是保证精度提升的同时也减小了模型1.3GFLOPs的计算量。本文的网络模型结合二者的优势,在mAP50指标上提升3%,mAP50:95指标上提升4,检测速度也提升12 FPS。
为验证优化后的算法收敛效果,绘制了与基准模型的Loss曲线对比图,如图8所示。本文的算法相较于原始算法收敛速度更快,更有效减少网络的训练时间。
从图9的预测结果图中,可以看出本文的网络模型能够有效检测到样本中的目标,准确率能够保持在80%~90%。
5.3.2. Crack2000实验

Table 3. Crack 2000 comparison experiment
表3. Crack 2000对比实验
如表3,由Crack2000对比实验可知,不论YOLO系列、SSD、Faster-RCNN,在该数据集上都能获得较为优秀的检测结果。效果最差的方法,其平均精度也能够达到0.99,接近1。其中本文的算法YOLOv5-W在Crack2000数据集上,精度、召回率、平均精度上都能达到与YOLOv8相同的效果。
6. 结束语
本文自制了背景复杂数量较小的数据集Crack400和背景更为单调数据量大的数据集Crack2000,用于桥梁裂纹的研究。针对Crack400数据集中,纹检测效率不高、背景复杂难以检测的问题设计出了改进的YOLOv5-W算法,采用了动态化损失函数Wise IoU,引入了轻量化颈部网络设计。轻量化的颈部网络设计使得模型更小,能更好地满足实时检测的要求。实验表明本文的改进方法明显优于原始算法、Faster-RCNN、SSD等目标检测模型。但是,本文的YOLOv5-W算法在模型大小上还有提升的空间,后续将会进一步优化网络以获得更好的检测效果。