裂缝作为桥梁早期损伤破坏的重要表征之一,及时发现并对其进行检测是桥梁维护工作中的重点[1]。常规的人工勘测不仅存在检查盲区,同时也需要耗费大量的人力物力,有时还存在安全隐患。随着摄影、遥感、无人机等图像采集技术的快速发展,基于数字图像处理技术的裂缝检测方法得到广泛关注[2]。通过使用模糊多级中值滤波[3]、灰度矫正[4]、非下采样轮廓波变换[5]等数字图像处理技术去除裂缝图像上的噪声并优化图像质量,裂缝的几何特征和尺寸信息能够被提取出来。在面对复杂光照、背景等外界因素时,传统的数字图像处理技术不能很好地消除干扰。张维峰等[6]综合应用了不同图像处理算法开发的适用于桥梁缺陷较远距离图像的检测分析软件,在面对细小裂缝的检测时也遇到了瓶颈。
随着计算机领域深度学习的兴起,桥梁裂缝图像处理迎来了新的机遇和挑战。众多学者从实际情况出发,对数据方法、智能算法进行改进,提高了模型的分析能力,推动了人工智能在桥梁检测应用中的提高[7]。比如,Zhang等[8]将深度卷积神经网络(Deep Convolutional Neural Network,DCNN)应用到裂缝信息提取研究中,该算法展现出了比传统方法更高的准确度。Zhang等[9]提出网络CrackNet,能够实现裂缝的自动检测提取。数据集作为数据驱动型深度学习算法的核心组成部分,也得到了广泛的关注。服务于像素级别下桥梁裂缝检测任务的公开数据集[10]包含了超过一万张的裂缝图像样本,但这些图像的尺寸都只有256×256像素。包括其他的公开数据集[11],服务于裂缝检测任务的裂缝图像尺寸不超过500×500像素。在工程应用中,使用高清相机或者无人机拍摄的图像一般都会超过1 920×1 080(1 080 p)。一般认为,4k UHD(3 840×2 160)作为新的工业标准,视为高分辨率(High-Resolution);而超过这一尺寸则为超大尺寸,或者是超高分辨率(Very High-Resolution)[12]。一些超大尺寸的裂缝图像甚至会超过4 096×3 112[13]。另外,这些公开数据集中的图像一般都是经过挑选的小尺寸、裂缝特征明显的图像。在实际工程应用中,高清相机拍摄获取的裂缝图像中的裂缝尺寸远小于公开数据集或者试验条件下拍摄的裂缝。
由Lin等[14]首次提出的金字塔型深度学习网络(FPN)表现出了强大的图像分割能力,并赢得了COCO 2016挑战。其网络结构突出体现了对小目标检测的优势。受Lin等工作的启发,笔者提出一个基于特征金字塔深度学习网络针对超大尺寸裂缝图像的细长裂缝检测方法。在金字塔型的网络架构下,采用特征提取效率更高的Se_resnext50_32×4d[15]编码器,区别于传统的图像分割网络,将编码器提取的不同层次(共4个)特征图分别进行预测,不同分辨率的特征图得以保留。对于细小裂缝,更大分辨率的特征图能够提供更精确的裂缝几何特征,同时,较小分辨率的特征图提供了更深层的语义信息,能够优化细小目标的预测。不同尺寸裂缝特征图最后通过一包含3×3卷积层的W运算进行叠加输出统一尺寸的预测,避免产生混叠效应。
该方法包括使用超大尺寸图像的数据集构建方法。针对细长裂缝的检测特征,创新性利用特征金字塔深度学习网络具备的多层识别能力以及识别小目标的优势,通过充分利用裂缝长细几何特征,实现了对超大尺寸裂缝图像进行像素级的裂缝检测。
数据集是基于深度学习的裂缝自动检测方法的核心之一。为了充分获取裂缝细长的几何特征以及发挥深度学习网络的特征提取能力,提出针对超大尺寸细长裂缝图像的数据集构建方法。该数据集的构建方法包括两个关键部分:训练集与测试集。下文中将分别对训练集和测试集的处理、生成和构建方法做详细介绍。同时,来自International Project Competition for SHM (IPC-SHM 2020) ANCRiSST[13]的钢箱梁数据集将按提出的数据集构建方法进行处理,以生成后续试验用的数据集。
该钢箱梁数据集中包含120张高清相机拍摄的钢箱梁表面细长裂缝图像,这些图像为三通道RGB图像,像素为3 264×4 928大小。除这些裂缝图像外,数据集内还包含每张裂缝图像相对应的标记图(label)。标记图由土木工程领域内专家对裂缝图像中的每一像素点进行标注分类生成,例如将裂缝像素标注为1,背景像素标注为0进行像素级别的区分。
在进行处理前,钢箱梁数据集中的120张图像首先被随机分出100张作为初始训练集,其余20张为初始测试集,命名为DS0。
将超大尺寸的图像直接放入网络中通常需要超大的计算机GPU运算空间。考虑到计算机性能的限制,较为简单直接的方法便是缩小图像尺寸,减小运算空间。传统是使用方法的双线性插值方法是在保证一定质量条件下对图像进行缩放。
为了与数据集构建方法相对比,试验中通过传统的双线性插值对图像进行缩放处理,构建了两个数据集。将原来的高分辨率图像降采样为1 600×2 400像素和2 112×3 168像素两种规格。为讨论方便,将图像大小调整为1 600×2 400像素的训练集命名为DS1,将图像大小调整为2 112×3 168像素的训练集命名为DS2,其具体参数见表 1。对于验证及测试过程,仍然以原规格图像作为验证和测试对象,但为了和训练过程相匹配,测试的裂缝图像均根据双线性插值方法调整为1 600×2 400像素和2 112×3 168像素大小。模型输出预测结果(1 600×2 400像素和2 112×3 168像素)后,再利用双线性插值恢复为3 264×4 928像素,与标注图像进行比较。
由于细小裂缝占裂缝背景极少,双线性插值缩放之后,图像中裂缝像素急剧减小,预测难度增加,预测准确度降低。考虑到部分裂缝即可提供足够信息进行识别,即可以拆分的几何特性与特征金字塔网络对小目标识别的优势,相应地提出了针对超大尺寸裂缝图像通用的训练集和测试集处理方法。
针对实际工程拍摄中裂缝在图像中分布不确定、长细比例较大、裂缝像素占整体像素比例较低的特点,采用多个步骤对超大尺寸图像进行处理,以构建训练集。
步骤1:获得一张初始的超大尺寸裂缝图像(假设其大小为h×w,其中,h为图像的高、w为图像的宽),选取一大小为32m×32n(m、n为大于1的整数)的固定拆分尺寸。该拆分尺寸的取值主要取决于计算资源。将初始图像以数值0进行边缘扩增(Padding),将图像统一为尺寸32m×32n的倍数。扩增后的图像大小为H×W。H、W的计算式为
步骤2:使用一个大小为32m×32n的滑窗,以行、列步长为16m、16n像素大小对扩充后的图像进行拆分。
步骤3:保留所有k张带裂缝的拆分图像,同时,为保证深度学习能够充分获得背景特征,学习背景信息;k张只包含背景的图像也被随机选取,进入最终的训练集。最后,一张初始的超大尺寸裂缝图像经过上述操作共可生成2k张的32m×32n拆分子图进入深度学习训练集。对多张超大尺寸裂缝图像进行该构建操作便可构建出相应的训练集。
对于试验用钢箱梁数据集,考虑计算机的计算性能,选取m=15、n=20。首先将尺寸为3 264×4 928的图像(如图 1(a))填充为3 360×5 120,并置零,保证后续拆分时能够覆盖到图像的边缘,见图 1(b),根据重叠分割的步骤2,设定滑窗大小为480×640对图像以行/列240、320像素的步长,得到拆分子图,如图 1(c)所示。一些将子图像包含0填充部分。利用所有的子图像作为输入需要大量的训练时间。因此,根据对应的子标签,自动筛选出包含裂纹损伤像素的1 923个子图像,如图 2(a)所示,即k=1 923。这1 923张裂缝子图像组成了一个训练集,命名为DS3,作为缺少背景图像信息的数据集,与本方法进行对比。其余的13 939个子图像不包含属于裂纹损伤的像素,只表示背景信息,如图 2(b)所示。在13 939个子图像中随机选取1 923张子图像。1 923张裂缝子图像和1 923张背景子图像构成一个训练集,命名为DS4,见表 1,即为本方法提出的数据集构建方法的最终结果。
在图像测试方法上,同样针对细长裂缝的位置和几何特征提出了新的超大尺寸细长裂缝图像的测试处理方法。该方法包含3个步骤:
1) 输入测试图像(假设为h×w),将图像以0进行扩增,不同于训练集,为了保证边缘像素能够被后续拆分覆盖,扩增后尺寸H×W的计算式为
式中:m、n的取值同训练集中的取值。
2) 使用32m×32n的滑窗以行、列步长为32m、32n对测试图像进行第1次拆分,随后将分割起点定位于图内的第16m行、第16n列像素,进行第2次拆分。通过此方法,第1次拆分的4张相邻图像交点将成为第2次分割图像的中心。针对裂缝的位置不确定性对分割图像边缘进行多次覆盖。将步骤2生成的一系列拆分图一同输入经训练集训练后的特征金字塔深度学习网络,获得预测结果。
3) 最后将该预测结果按照滑窗顺序重新拼装成为带0增的图像。去除0增区域后,便获得与原测试图像大小相同的裂缝预测图。同时,由于预测图中的每一个像素经过二次分割拥有两个预测值。本方法从较为安全的角度设定其中只要有一个预测判断该像素为裂缝,该像素即可认为为裂缝像素,保证尽可能多的裂缝像素被检测识别。
在测试试验中,m、n的取值同训练中的取值,分别为15、20。其余处理按上述3个步骤进行,与训练集虽然稍有差别,但较为相似。
特征金字塔网络(Feature Pyramid Network)的结构大致可以分为编码器(Encoder)、解码器(Decoder)和组装(Assembling)3个部分,如图 3所示。编码器是卷积神经网络的前馈过程,用来提取不同阶段的特征,并不断降低特征图分辨率。解码器是自下而上的特征图放大过程。通过上采样,顶层特征图和底层特征图实现合并,丰富网络获取的语义信息。在融合完成后,网络使用了3×3的卷积核对每一个融合结果并进行卷积,目的是消除上采样中的混叠效应(Aliasing Effect)。最后,在组装部分添加各个阶段的特征图获取各层信息,这使得特征金字塔网络拥有较强的语义信息获取能力,同时也能够满足速度和内存的要求。特征金字塔网络的特别之处在于预测是在不同的特征层中独立进行的,有助于检测不同尺寸的裂缝目标,契合工程获取裂缝图像中裂缝大小不确定性的特点。
编码器是一个特征提取网络,一般采用VGG[16]和ResNet[17]作为骨干。在本方法中,为了提高对裂缝的特征提取效果,采用Se_ResNeXt50_32×4d[15]为编码器。它包括3个部分:ResNet,SE(Squeeze-and-Excitation)模块和X模块,使网络更加深入、更快收敛和更易优化。同时,该模型的参数少,复杂度低,适合裂缝检测任务。SE模块采用的是SENet[15]的一个计算单元。
压缩(Squeeze)采用了一个全局平均池化层,获取具有全局视野的特征图。激励(Excitation)利用了一个全连接的神经网络结构对压缩后的结果进行非线性变换,然后将其作为一个权重乘以输入特征。SENet主要对通道之间的相关性进行学习,减弱了对通道本身的关注,虽然稍微增加了计算量,但能够实现更好的分割效果。X模块来自ResNeXt[18],一个更优版本的ResNet。ResNeXt的核心创新在于采用了聚合转换(Aggregated Transformations),用相同拓扑结构的并行堆叠取代原始的ResNet的3层卷积块,提高了模型的准确度,而不显著增加参数量。同时,由于拓扑结构相同,超参数减少,模型也较原始的ResNet更易移植。ResNeXt50_32×4d从有50层网络深度的ResNet50改进而来。其中,32×4d代表的是32条路径,每条路径的通道数为4个。SE模块嵌入到ReNext50_32×4d中,最终获得Se_resnext50_32×4d。其预训练参数通过imagenet1000得到。
总的来说,编码器是一个以Se_resnext50_32×4d为骨干的自下而上裂缝特征提取网络。在编码器入口,将大小为裂缝图像输入(32m×32n)。后续中,每一个阶段便是特征金字塔的一个层次。选取conv2、conv3、conv4和conv5层提取的特征为{C2, C3, C4, C5},这是FPN网络的4个层次。N是batch size,特征向量则分别为F2=(N, 256, 8m, 8n),F3=(N, 512, 4m, 4n),F4=(N, 1 024, 2m, 2n),F5=(N, 2048, m, n)。需要注意的是,由于F5是原图的1/32大小,所以,拆分滑窗的长度和宽度应是32的倍数。
解码器是一个自上而下的放大裂缝特征图的过程。P5=(N, 256, m, n)是通过1×1卷积层直接从F5得到的。在接下来的操作中,通过插值算法将P5放大两倍为(N, 256, 2m, 2n)。F4经过1×1卷积层,变成(N, 256, 2m, 2n)。将上述两个特征向量相加,得到P4=(N, 256, 2m, 2n)。这些操作被称为跳跃连接(Skip Connection),如图 4所示,继续使用这些操作来获取P4、P3和P2。跳跃连接的优势在于它既可以利用顶层的高级语义特征(有助于裂缝特征分类),又可以利用底层的高分辨率信息(有助于裂缝特征定位)。
组装部分要求金字塔每一层输出的特征图具有相同尺寸大小,为了实现该目的,首先选择包含3×3卷积层的W运算,采用双线性插值放大,如图 5所示。
P5执行3次W操作后,H5=(N, 128, 8m, 8n)。以此类推,H4和H3分别进行两次和一次W操作。此外,H2不需要放大。然后直接将Hi(i=2~5)相加,得到一个向量(N, 256, 8m, 8n)。该向量经过3×3的卷积层和双线性插值放大到原始裂纹图像尺寸(N, 1, 32m, 32n)。为了便于预测过程,通过将激活函数sigmoid的值改为0~1得到掩码(N, 1, 480, 640)。如果某点的值大于某一固定阈值,则预测该点为裂纹。在试验中,选择0.5作为阈值。
所有试验均在Intel(R) Xeon(R) E5-2678 v3 @ 2.50 GHz、64.0 GB RAM和NVIDIA RTX2080TI、11.0 GB RAM的计算平台上进行。基于4个不同的训练集训练了4个基于特征金字塔网络结构的预测模型。为了讨论方便,用DS1和DS2训练获得的特征金字塔网络称为Model1和Model2,用DS3和DS4训练获得的网络称为Model3和Model4。
假设在标签和预测中均属于裂缝的像素数为I,在标签或预测中表示裂缝的像素数为U,交并比(Intersection over Union IoU)是图像分割任务常用的评价指标,通过式(5)计算。
另一评价指标Dice Loss不仅可以作为深度学习训练中的损失函数,也可以在一定程度上评价图像分割的准确度。假设在裂纹分割任务中X为图像对应的标记,Y是裂缝预测,Dice Loss通过式(6)计算。
图 6为4个模型在一些典型测试图像上的裂缝检测结果,图 7为基于4个不同训练集测试中的评价指标IoU和Dice Loss的对比。图 6中展示的IoU值通过单张预测图片与对应标记计算得到,图 7中展示的IoU和Dice Loss测试指标值为测试中所有图片的预测同对应标记计算获得的平均IoU和Dice Loss的值。从图 7可以看出,在IoU和Dice Loss方面,在测试图像上,Model2比Model1出性能更好,Model2的IoU高于Model1,同时Model2的Dice Loss小于Model1。在分析了Model1和Model2的预测之后,发现一个值得注意的现象,如图 6所示,Model1和Model2的预测都忽略了测试图像中的部分裂纹,导致预测中的裂纹长度比标签中的短,在预测中丢失了部分裂纹。造成这种现象的原因之一是用于调整图像形状大小的双线性插值算法,双线性插值考虑已知像素值围绕未知像素计算位置的最接近的2×2邻域,然后取这4个像素的加权平均值来得到最终的插值值。调整大小的方法不是对测试图像中的每个像素进行预测,而是对像素的统计值进行预测。一方面,Model1和Model2的预测不能在像素级上进行精确预测,但另一方面,模型仍然可以指出裂缝的位置。根据Model1和Model2预测的裂纹位置,可以采用一些方法改进裂纹预测,如利用扩展阈值算法可以扩展裂缝长度。从图 7(a)可以看出,Model1的IoU仅比Model2的IoU小0.02,但DS1中的图像大小几乎是DS2的1/3。这表明,更大的图像尺寸并不能在很大程度上改善预测,而作为输入的大尺寸图像却需要大量的存储和计算空间。当需要缩放图像以获得一个新的训练集时,建议首先考虑计算效率,而不是图像大小。
使用该方法构建数据集时,测试中评价指标IoU和Dice Loss都有了明显提升。Model3和Model4的IoU分别为0.70和0.78。由于Model3只在裂纹子图像(DS3)上进行训练,因此忽略了一些背景信息。从图 6第3、第4行的预测结果可以看出,Model3错误地将边缘上的一些像素点预测为裂纹,钢结构的一些凹槽特征也被预测为裂纹。尽管Model3的预测不如Model4准确,但Model3在结构健康监测中可以视为提供了较为安全的估计。从图 6第5行可以看出,使用Model3对结构的主裂纹进行了预测,并将一些可疑特征视为裂纹,保证不遗漏裂纹损伤。Model3的IoU虽然不是最好的,但在工程上具有理想的特性。经过DS4的训练,Model4变得比Model3更加优秀和准确。Model4同时学习了背景信息和裂纹信息。在图 6中的预测4,Model4的性能最好,很好地处理了背景和沟槽的干扰。较高的精度意味着Model4可以为下一步的研究或测量提供精确的裂纹信息。在裂纹分割任务中,Model3和Model4的性能优于Model1和Model2。对于基本训练集的图像,该方法被证明是比直接调整超大尺寸图像大小方法更好的解决方案。部分裂缝便可以提供足够的检测信息。因此,该方法是一种合适的针对超大尺寸细长裂缝的处理方法。此外,该方法对图像的分辨率没有任何要求,适用于任意的高分辨率和低分辨率图像。
针对钢箱梁内部包含复杂背景和裂缝的超大尺寸图像,提出了一种基于特征金字塔深度学习网络的裂缝自动检测方法,并进行了一系列对比试验。主要结论如下:
1) 基于本方法构建的训练集,特征金字塔网络能够在测试中对3 264×4 928像素的桥钢箱梁表面裂缝图像实现最大交并比(IoU)为0.78,最小Dice Loss为0.12,表现优于将图像进行简单缩放构建数据集训练的模型。
2) 采用双线性插值方法将超大尺寸图像(3 264×4 928)缩放至1 600×2 400像素或2 112×3 168像素,将会导致部分裂缝信息丢失,降低裂缝检测准确度。建议采用本方法对超大尺寸裂缝图像进行拆分,拆分尺寸大小可设定为480×640。
3) 部分裂缝可以为深度学习网络提供足够的特征信息。该方法适合于裂缝检测任务,并且该方法对于裂缝图像的具体分辨率没有严格的要求,为今后的裂缝自动检测提供了一个较有潜力的解决方案。