杨秋媛,李 宁,石 林,庄丽华,徐守坤
(常州大学 计算机与人工智能学院阿里云大数据学院软件学院,江苏 常州 213164)
混凝土表面裂缝检测是混凝土建筑结构健康监测的重要内容。传统的裂缝检测方法对于数据集质量要求较高,在光照不均、噪声多的数据集上表现欠佳。
近年来,研究者们致力于将基于神经网络的目标检测[1]算法运用到裂缝检测中以解决传统方法的局限性。
现阶段的裂缝检测[2-7]领域,主要存在以下两个问题:在特征提取阶段,通常随着网络深度加深,逐渐降低的特征图分辨率会导致裂缝图像低级语义信息以及细粒度的空间结构信息损失;裂缝检测作为一种像素级的语义分割,由于其像素级特征的感受野不够,并且裂缝具有多尺度的现象会导致检测过程中上下文信息缺失。
由此,本文基于U-Net[8]网络的理论与方法,提出一种语义分割网络模型,用于混凝土裂缝图像中的裂缝分割。
本文贡献主要概括如下:
(1)在编码器阶段引入双核空洞卷积模块,该模块能够在提取裂缝特征的同时,保留有更多裂缝的低层语义信息和易丢失的空间结构信息。
(2)为了有效提取尺寸不同的裂缝信息,在解码器阶段引入动态多核融合池化模块,生成多个感受野捕捉不同尺度上的信息并融合。相比单一的池化层获得的信息更有全局性,能够有效提高不同尺寸裂缝的分割效果。
(3)在多核池化模块阶段引入动态核融合机制构成动态多核融合池化模块[9],该机制有效从不同分支中动态选择重要信息并进行整合,能够在增加较少计算量的前提下在语义信息丰富但低分辨率特征的帮助下整合语义信息缺失但空间信息丰富的高分辨率特征。
本文提出了一种混凝土裂缝检测方法,该方法基于U-Net网络,利用U-Net网络的编码器-解码器结构结合跳跃连接从复杂的混凝土建筑图像中分割出完整的裂缝图像。本文方法结构如图1所示。图中OS(output stride)表示为输入图像的空间分辨率和输出特征图的空间分辨率的比值。
图1 改进的U-net网络结构
其中编码器主干网络采用经过预训练的ResNet34[10],并在下采样过程中加入空洞卷积以保留更多的低层次语义信息;解码器部分采用了多核池化模块,在上采样过程中可以产生多个有效视场以更好分割出不同大小的裂缝;同时,多核池化模块最后的特征聚合采用动态核融合机制,在不同分支中有效提取重要信息进行多尺度融合,从而更加精确保留原始特征信息。图中双核空洞卷积,由两个具有不同扩张率的空洞卷积级联构成。图中的动态多核融合池化模块,由多个具有不同尺寸的池化层以及自注意力机制构成。本文算法在上采样过程中,先采用跳跃连接将编码器中获得的对应特征图与解码过程中获得的相同尺寸的特征图拼接,再进行上采样操作放大特征图。
空洞卷积[11]的提出主要是为了在不降低特征图的尺寸(分辨率)情况下实现感受野的增长,让每个卷积的输出都包含更大范围的信息。
以3×3卷积为例,展示普通卷积和空洞卷积之间的区别,如图2所示。
图2 不同扩张率的空洞卷积
图2中3幅子图分别代表,图2(a)普通卷积过程(扩张率为1),卷积后感受野为3;图2(b)扩张率为2的空洞卷积,卷积后感受野为5;图2(c)扩张率为3的空洞卷积,卷积后的感受野为7。感受野k′的计算公式如式(1)所示,其中k为卷积核大小,d为扩张率
k′=k+(k-1)*(d-1)
(1)
图3从一维分析空洞卷积在增大感受野的同时不改变特征图的尺寸。图中浅灰色无数据正方形表示填充部分,浅灰色有数据正方形表示原始数据部分,深灰色有数据正方形表示经过卷积后得到的数据部分。
图3 普通卷积和扩张卷积
输出特征图大小尺寸计算如式(2)所示
(2)
混凝土裂缝具有多尺度、裂缝所占像素在全图比例非常小等特点,这就导致普通的下采样操作在提取特征降低输出特征图尺寸大小的操作过程中很容易丢失一些细小裂缝的语义信息和裂缝的空间结构信息。
为了保证在下采样过程中既能有效提取裂缝特征,又能提升特征图的分辨率,本文在普通下采样操作中加入级联的双核空洞卷积模块,如图4所示。图4中H1、W1、H2、W2代表原始特征图根据不同参数由式(2)得到的输出特征图分辨率大小。
图4 双核空洞卷积模块
由于空洞卷积的运算方法比较特殊,如图2所示,直观上类似于棋盘格式,上下两层卷积操作过程独立并不互相依赖。如果实验中仅仅多次堆叠空洞卷积,容易导致卷积之后得到的结果没有相关性,即局部信息丢失,裂缝检测实验中体现出来的就是裂缝断裂和孔洞现象。因此,为了避免出现上文所说问题,如图4所示,本文的双核空洞卷积模块由两个具有不同扩张率的空洞卷积构成。扩张率为2时感受野为5×5,扩张率为3时感受野为7×7。
扩大的感受野使得卷积输出包含有更大范围的语义信息,较小的感受野可以提取较小对象的特征,较大的感受野可以提取更大对象的特征。空洞卷积操作后进行输出特征图的对应像素相加,对应值相加能使得特征图维度不变,但与此同时每个维度都能包含有更多的特征也即语义信息。
本文方法选择在下采样中间层使用双核空洞卷积模块,一方面:对下采样后分辨率降低的特征图使用空洞卷积操作,能够有效降低计算量,提升处理速度;另一方面:较高分辨率的特征图拥有更多的低级语义信息,对于像素级别的分割任务来说,保留的裂缝语义信息以及空间结构信息越精细,分割的结果越精确。
混凝土裂缝图像中,同一张、不同图片里都会出现粗细、深浅不一的现象,也就是检测目标尺度不同。对于非常大或者非常细小的裂缝,网络的识别能力较差,算法很难分割准确,容易出现漏检误检现象。为了解决这个问题,本文提出在解码器阶段采用动态多核融合池化模块来生成多个感受野在并行卷积流中更高效捕捉不同尺度、不同子区域之间的信息。动态多核融合池化模块整体结构如图5所示。
图5 动态多核融合池化模块
由图5可知,动态多核融合池化模块融合了4种不同尺度下的特征,本文中使用了2×2、3×3、5×5、7×7的池化组合。
池化操作后输出特征图尺寸计算公式如式(3)所示
(3)
动态多核融合池化模块获取上下文语境信息流程为:首先,不同池化核下输出的多尺寸的低维特征图通过双线性插值进行上采样,使其与原始特征图尺寸相同。接着,为了维护全局特征的权重,在每个特征图后使用1×1卷积,使特征图的维数降到原始特征的1/n, 这里的n表示为原始特征图的通道数。最后,将不同层级的特征图和原始特征图通过动态核融合机制拼接成最终输出的特征图。
动态多核融合池化模块能收集不同尺寸的语义信息并高效融合,获得一个有层次的全局先验结构,比单一的池化层得到的信息更具有代表性,对于裂缝检测任务,能有效保留不同粗细、大小裂缝的低层语义信息。
普通的多核池化模块最后的特征融合采用的是concat操作,但简单的concat操作得到的特征图融合的语义信息有限,模型的表达能力提升不足。本文选择在多核池化最后的特征融合阶段引入动态核融合机制,该机制能使神经元对不同尺寸的信息自适应调整其感受野的大小,用以提升在并行卷积流中高效提取并选择性融合信息的能力。
如图6所示,动态核融合机制有3个输入,U1表示2×2、3×3池化后的输出逐像素聚合而成的特征图;U2表示5×5、7×7池化后的输出逐像素聚合而成的特征图;U3表示池化操作前的原始输入。动态核融合机制共有以下4步操作:第一步,将3个并行输入进行逐像素聚合,聚合后输出空间维度为C*H*W的特征图U;第二步,为了建模特征图通道间依赖关系,对U进行全局平均池化操作,输出空间维度为C*1*1的特征图;第三步,为了增加更多的非线性从而更好拟合通道间复杂的相关性,对特征图分别进行两次全卷积操作,第一次卷积操作将输入的特征维度降低到原来的1/r, 输出空间维度为Z*1*1, 此处r表示为计算通道缩减时候的缩减系数,第二次卷积操作将维度升到原来的大小;第四步,利用softmax激励函数对分支中的特征图设置权重,因为不同分支中的卷积核尺寸不同,此步操作实现让网络自适应的重新校准多尺度特征图U1、U2和U3,也即所谓的动态选择。
图6 动态核融合机制
动态核融合机制能够在并行卷积流中有选择的提取出重要语义信息并保留,抑制低效信息的表达,在裂缝检测这种前后景像素极度不平均的任务中,能高效提取出裂缝的语义信息,并有效抑制噪声以及背景信息,从而为像素级的场景解析提供了一个更加有效的全局场景先验信息。
对于裂缝检测这种背景所占比例极大,物体占比很小的不平衡样本,合适的损失函数的挑选是十分重要的。本文选择了组合损失函数Bce loss+Dice loss。
Bce loss二分类交叉熵损失函数,语义分割中较为常用的分类损失函数,公式表示为
(4)
Dice loss是在V_net[12]文中提出的,文章应用于医学图像分割,但是图像中需要分割的区域仅占据图片很小的区域,这使得学习易陷入损失函数的局部最小值,因此作者设计的Dice loss加大了前景区域的权重。Dice可以理解为两个轮廓区域的相似程度,用A表示真实值所包含的点集,B表示预测值包含的点集,定义为
Dice(A,B)=2|A∩B|/(|A|+|B|)
(5)
二分类Dice loss的公式表示如下,其中pn表示为第n个像素点预测为裂缝的概率值,rn表示为第n个像素点真实像素值,本文设置ε值为1,加快网络收敛,防止产生过拟合
(6)
本文损失函数将两者线性结合,公式表示为
Loss=BL+DL
(7)
组合损失函数有效结合了二分类交叉熵损失函数和Dice损失函数的优点,关注像素级别的分类正确率同时迫使网络加大对裂缝前景特征的学习,有效克服裂缝图像中前后景像素分配不均的问题,提升裂缝图像分割精度。
本文实验所使用的详细硬件与软件环境配置见表1。
表1 实验软、硬件环境配置
为了验证本文算法有效性,实验分别在两个数据集上进行测试。数据集1:由使用设备在路面、桥梁等混凝土结构建筑物上拍摄采集得到,共2000张裂缝图片,其中1600张分为训练集,400张分为测试集。数据集2:采用公共数据集CRACK500[7],此数据集中共1896张训练图像,348张验证集,1124张测试图像。为防止数据量过少导致训练产生过拟合现象,采用数据增强HorizontalFlip、RandomGridShuffle和Rotate90°方法,扩充训练集,测试数据集不使用数据增强。数据增强效果如图7所示。
图7 数据增强
本文实验参数设置见表2。
表2 算法参数设置
本文采用精确率(Precision)、召回率(Recall)、均衡平均数(F1)、交并比(IoU),作为模型性能的评价指标,各评价指标的计算公式如式(8)~式(11)如下
(8)
(9)
(10)
(11)
精确率(Precision)反映了被模型判定为裂缝中真正的裂缝所占比例;召回率(Recall)反映被正确判定为裂缝在总的裂缝中占据的比例;精确率和召回率对于数据为类别不平衡样本的实验模型评估效果有一定偏差,而均衡平均数(F1)是精确率和召回率的调和平均数,综合了两个评价指标产出的结果,均衡平均数越高说明模型质量越好;交并比(IoU),直观可以表示为真实值和预测值的交集,也即模型检测出的真实裂缝与标记中的真实裂缝之间的重叠率。当前语义分割方法效果评估都是基于此完成的。
为了充分比较本文算法和其它模型在裂缝检测中的性能,将本文提出的网络模型实验结果与U-Net、Res-UNet[13]、CE-Net[14]、UNet++[15]、SegNet[16]和DeepLabv3+[17]等这些主流和经典的分割算法实验结果进行对比。U-Net首先采用了编解码加跳跃连接的网络结构恢复图像细节信息,在裂缝分割中取得了优秀的结果;Res-UNet将U-Net中的VGG16换成具有残差结构的ResNet34,在一些复杂结构的裂缝分割任务中精度得到了提升;CE-Net在上下文提取模块中使用了DAC和RMP模块,为了提取上下文语义信息并生成更多高级的特征图;UNet++对U-Net传统拓扑结构做了改进,采用长短连接的方式,更加有效融合深浅层特征,提升分割精度;SegNet在编码器过程中存储最大池化索引(index),用以在编码器过程中直接调用对应位置信息进行上采样操作,能够有效降低模型复杂度,加快算法运行速度;DeepLabv3+属于多融合结构算法,在有效提升特征图感受野的同时保留足够的空间位置信息,在复杂场景任务下,能有效提升分割精度。
在数据集1也即自制数据集上进行实验,各模型评价指标结果对比见表3,实验最好结果加粗。实验效果对比如图8所示。
表3 自制数据集不同模型测试结果对比
图8 自制数据集测试结果实验对比
由表3数据可知,在数据集1上测试结果评价指标中,精确率(Precision)结果达到86.55%,召回率(Recall)结果达到89.64%,均衡平均数(F1)结果达到88.04%,交并比(IoU)结果达到78.86%。与文献[3]实验结果相比,本文算法精确率提高0.31%,召回率提高2.63%,均衡平均数提升1.42%,交并比提升2.16%;与文献[18]实验结果相比,本文算法精确率提升0.71%,召回率提升3.22%,均衡平均数提升1.91%,交并比提升3.21%。总体而言,本文算法实验结果均优于其它对比分割算法,能够对裂缝图像实现更精确的分割。
图8为实验效果对比,可以清晰看出,不论图片中裂缝结构简单或是复杂,本文网络结构实验效果最好,不易受噪声干扰,裂缝完整走势以及形状信息基本保留完全。其它方法在拓扑结构复杂以及有明显噪声的图片中,极易造成细小裂缝的误检漏检,不仅无法保留完全裂缝的基本形状,而且较为明显的噪声会被模型误识别为裂缝。如U-Net、CE_Net和SegNet算法易受噪声影响,第一张图片上的黑色斑块很明显被识别为大块裂缝,第二张图片上细小的浅灰色竖纹,被识别为小裂缝;UNet++、文献[3]和文献[18]容易产生漏检,第一张图片右下方孔洞细小的联结区域未能完全识别,并且这些算法在裂缝走势复杂、细小纹路繁多的区域,也会产生不同程度的误检现象,如第二张图片中有着大量细小蛛状结构被检测为块状裂缝。
为了充分验证本文算法在裂缝检测上的有效性以及自制数据集的可信度,在公共数据集CRACK500上再进行实验。实验损失分布如图9所示,本文算法损失在10个批次后结束震荡稳步下降,25批次后下降趋势渐缓,45批次后趋于稳定模型逐渐拟合。与其它算法模型相比,本文算法损失最小,下降最为平缓。值得注意的是对比实验中SegNet算法的loss值下降非常有限,这是由于本文网络模型所采用的训练策略不适合SegNet;文献[18]的loss前期收敛快速并且小幅震荡,但在40个批次后开始较大幅度震荡且至80个批次后仍未稳定收敛,实验证明是由于本文训练策略中设置的批次过大,使得网络陷入局部最优。
图9 不同模型的损失曲线
各模型在公共数据集上实验结果数据对比见表4,本文算法在各类语义分割算法中,实验精确率(Precision)、均衡平均数(F1)以及交并比(IoU)仍是最高,只有召回率(Recall)与SegNet算法相比略低0.79%。与裂缝检测文献[11]结果进行对比,本文算法在精确率(Precision)提升1.88%,召回率(Recall)提升3.43%,均衡平均数(F1)提升2.39%,交并比(IoU)提升4.00%;与裂缝检测文献[18]结果进行对比,本文算法在精确率(Precision)提升3.28%,召回率(Recall)提升2.07%,均衡平均数(F1)提升2.59%,交并比(IoU)上提升3.86%。与SegNet算法结果进行对比,本文算法在精确率(Precision)提升8.16%、均衡平均数(F1)提升4.15%、交并比(IoU)提升5.89%,只在召回率(Recall)的评价指标上比SegNet算法略低。与DeepLabv3+算法结果进行对比,本文算法在精确率(Precision)提升3.35%、召回率(Recall)提升1.25%,均衡平均数(F1)提升2.45%、交并比(IoU)提升3.41%。
表4 CRACK500不同模型测试结果对比
数据集CRACK500实验效果对比如图10所示。文献[3]算法和本文算法实验效果相较其它分割算法能够较大程度上获得完整裂缝形状,并且裂缝结构细节信息基本保留,但文献[3]算法易产生补足现象,即将原图中断裂的细小裂缝自行连接,相较而言,本文算法并未出现此种现象;对比的其它算法则出现了一些细小裂缝结构漏检以及孔洞问题,如SegNet、CE-Net算法,在图10中能较为直观看到它们的效果图与标签图的对比,尽管图片中结构清晰的粗大裂缝被算法完整识别保留,但同时很多边缘细节模糊的细小裂缝在算法分割的过程中被丢弃。CRACK500数据集实验效果与数据集1实验结果相比,各项指标数据都有一定程度的降低,主要由于CRACK500数据集背景噪声、干扰都比较多。
图10 CRACK500测试结果实验对比
综上,本文算法在两个数据集上分别进行实验,所得实验数据结果以及效果图都表示本文算法能够完整检测出裂缝的拓扑结构,误检漏检较少,裂缝检测精度最高,效果最好。
为了验证本文设计的网络模型中的级联的双核空洞卷积、原始多核池化模块以及加入动态核融合机制的动态多核融合池化模块对于实验结果性能提升的效果,本节设计了模块间的消融实验。CRACK500数据集上实验结果对比见表5。
表5 消融实验结果对比
如表5所示,对比实验1和实验2,可知采用级联的双核空洞卷积,精确率(Precision)提升了0.81%,召回率(Recall)提升了0.29%,均衡平均数(F1)提升了0.59%,交并比(IoU)提升了0.70%;对比实验1和实验3,可知采用原始多核池化模块,精确率(Precision)提升了0.24%,召回率(Recall)提升了3.39%,均衡平均数(F1)提升了1.59%,交并比(IoU)提升了2.04%;对比实验3和实验4,可知原始的多核池化模块的网络结构与加入动态核融合机制的池化模块的网络结构比较,精确率(Precision)提升了1.84%,召回率(Recall)有所降低,降低了1.97%,均衡平均数(F1)提升了0.03%,交并比(IoU)提升了0.12%。对比实验1和实验5,可知组合级联的双核空洞卷积和动态多核融合池化模块的网络结构与最原始的网络结构比较,精确率(Precision)提升了2.47%,召回率(Recall)提升了1.52%,均衡平均数(F1)提升了1.88%,交并比(IoU)提升了3.00%。值得注意的是对比实验3和实验5,只使用多核池化模块得到的召回率(Recall)优于本文最终算法模型,但精确率(Precision)、交并比(IoU)相较本文最终算法模型低,由此得出只使用多核池化模块的模型能够找出更多的正样本,同时在识别判断正样本的过程中产生更多的误差,将负样本也即背景错误识别为正样本也即裂缝。
数据集CRACK500消融实验效果对比如图11所示。为了方便展示,如图11所示,用D2Net表示本文算法、D2Net-D2表示实验1、D2Net-DF表示实验2、D2Net-DCM表示实验3、D2Net-DC表示实验4。直观上可以发现,3幅测试图中,裂缝结构粗大的第一和第三幅子图检测结果较好,裂缝基本结构信息保留完全,第三幅子图中会出现一些不太明显的噪声现象,第一幅子图中左下方对应的边界裂纹易被漏检,而含有非常细小裂缝纹路的子图二,除了本文算法对应的D2Net能够基本保留结构信息,其它实验都出现了较明显的漏检现象。
图11 CRACK500消融实验结果对比
综上可知,本文所提出的级联的双核空洞卷积和动态多核融合池化模块对裂缝图像分割性能的检测都有一定的提升,并且将两个模块组合实验能够达到最优的检测性能和实验效果。
本文针对裂缝拓扑结构复杂、细小裂缝容易误检漏检、裂缝像素占比极度不均的问题,采用了编解码网络结构作为主干网络,通过在编码层引入级联的双核空洞卷积以及在解码层引入动态多核融合池化模块,构建了一个新的网络结构用以裂缝检测。经过充分的实验,结果表明本文所提出的网络结构在一定程度上提高了裂缝细节恢复和空间位置信息定位能力,能够提高裂缝检测的性能,在数据集CRACK500进行实验得到的结果与文献[3]方法检测交并比相比提高了4.00%,与文献[18]方法检测交并比相比提高了3.86%。但是在一些背景复杂、噪声较多的数据集上,本文算法的效果仍然有待提升。在以后的研究中会针对此缺陷深入研究,提高网络模型的分割能力。