APP下载

采用U-Net卷积网络的桥梁裂缝检测方法

2019-08-20朱苏雅杜建超李云松汪小鹏

西安电子科技大学学报 2019年4期
关键词:宽度卷积像素

朱苏雅,杜建超,李云松,汪小鹏

(1.西安电子科技大学 综合业务网理论及关键技术国家重点实验室,陕西 西安 710071;2.西安公路研究院,陕西 西安 710065 )

截至2016年,我国在用桥梁已超过80万座。为了确保通行安全,每座桥梁都需要定期维护检修。桥梁的主要病害之一是构件裂缝。目前对裂缝的检测主要采用人工巡检加宽度测量仪查看的方法,检测效率低,数据难以维护。因此,采用图像处理的方式进行桥梁裂缝检测成为当前的一个研究热点。

一些研究基于传统的数字图像处理方法,如利用裂缝区域与背景之间的灰度差采用灰度阈值分割的方法实现裂缝的提取[1]、利用裂缝的线性特征采用坎尼迭代的方法检测裂缝边缘特征[2],但这类算法只能给出裂缝的大体位置,准确度不高,易受背景杂波影响,误检和漏检率较高。随着机器学习技术的兴起,文献[3]中采用裂缝多特征结合支持向量机(SVM)、AdaBoost、 Random Forest 3种统计学分类方法分别实现裂缝检测,检测效果有所提升,但该方法需要人工设计裂缝特征,导致算法的适应性和扩展性较差。文献[4]中利用裂缝与背景杂波的线性差异采用张量投票算法增强裂缝特征,该方法对线性裂缝检测效果较好,但是对复杂裂缝不敏感,丢失了宽度信息。近年来,深度学习在图像识别中表现出了优异的性能[5-6],使用卷积神经网络检测裂缝的方法明显增多。文献[7]中首先将裂缝图像划分为多个小图像块,再利用经典卷积神经网络将小图像块分为裂缝面元和非裂缝面元两类,从而完成裂缝的提取。但由于全连接层的存在,限制了输入图片的大小,且基于图像块的检测方法感受野受限,检测效率低,内存消耗大。

U-Net网络是一种改进的全卷积神经网络模型[8],网络中无全连接层,能实现任意尺寸图像的检测,最早被Olaf等人提出,用于神经元结构的分割[9],在医学图像处理领域如肝脏CT序列分割[10]、虹膜分割[11]等应用较为广泛。近两年,U-Net网络也被用在其他领域的图像处理场景中,如遥感图像水体分割[12]、道路检测[13]等领域,检测性能优良。基于此,笔者提出一种基于U-Net网络的桥梁裂缝检测方法。该方法由一个捕获上下文信息的收缩路径和一个可用于精准定位的对称扩展路径组成,是一种小样本裂缝检测方法,不仅能够准确检测裂缝的形态,还能够准确地保留裂缝的宽度信息。

此外,在实际场景中,由于污点、杂物覆盖、光影等因素造成检测后的裂缝有断裂现象。一些文献中研究了裂缝断裂处的连接方法,包括基于形态学的连接算法[1]以及基于prime最小生成树算法的连接方法[14]。笔者在基于U-Net网络裂缝检测结果的基础上,提出一种改进的迪杰斯特拉(Dijkstra)连接算法来实现断裂处的裂缝连接。所提算法能更加准确地保留裂缝细节特征,还原裂缝真实信息,从而提高复杂背景下裂缝检测的准确性。最后,通过采用骨架图和八方向搜索的方法,实现了裂缝宽度的测量。

1 基于U-Net网络的裂缝粗提取

U-Net网络是一种改进的全卷积神经网络,因其网络结构酷似“U”形而得名。该网络充分利用深层网络获得的抽象特征和浅层网络包含的图像上下文信息,采用复制叠加的方式进行特征融合,能有效、准确地实现图像的分割。

图1 15层U-Net网络模型

1.1 U-Net网络结构

U-Net网络结构的搭建是裂缝提取的关键步骤。笔者采用15层卷积层搭建网络模型,如图1所示。该网络结构左右对称,左侧由卷积层和池化层组成,称为收缩路径;右侧由卷积层和反卷积层组成,称为扩展路径。网络使用卷积层提取裂缝特征,池化过程减少网络参数,同时会减少裂缝特征图的分辨率,再采用反卷积将其恢复到原始输入图像大小,实现端到端的裂缝检测。该网络巧妙地使用复制叠加的方法将底层包含大量上下文信息的特征图加载到高层网络,最大程度地保留了逐层池化过程中丢失的裂缝细节。另外,该网络卷积层使用3×3的卷积核,步长为1;池化层使用2×2的卷积核,步长为2。每层卷积后使用整流线性单元Relu函数作为激励函数:

Φ(x)=max{0,x} 。

(1)

相对于sigmoid和双曲正切函数,Relu函数只需要一个合理的阈值就可以得到激励值,减少了计算的复杂度。另外,当Relu函数处于激活状态时,其一阶导数处处为1,这意味着Relu函数不存在梯度消失问题,且其随机梯度下降法收敛速度会比sigmoid和双曲正切快很多。其导数表达式为

(2)

其中,x表示输入神经元。最后一层卷积层采用1×1的卷积核,结合softmax函数用于分类裂缝图像。再采用交叉熵函数作为损失函数用于表征预测概率与标签之间的差值。最后通过反向传播算法优化更新网络参数,最小化损失函数,使网络模型达到最优。

1.2 输入图像边缘填充策略

为了降低资源消耗,需要将高分辨率图像裁剪成多个小尺寸图像,分别输入网络,完成检测后再拼接成原始图像大小。但由于U-Net网络中存在卷积层,对图像进行卷积操作会丢弃输入图像中小于卷积核的边缘部分图像,使得输出图像尺寸变小。经过一次卷积后,输出图像大小与输入图像大小有如下关系:

(3)

其中,nw,nh为输出图像的宽和高;w,h为输入图像的宽和高;fw,fh为卷积核的宽和高,fw=fh=3;s为滑动窗口的步幅大小,s=1。即每层卷积都将造成输入图像尺寸的减小,使得最终输出图片尺寸小于输入图片,拼接后的图像会存在边缘部分大块留白现象,无法提取出完整裂缝。如图1所示,当输入图像为800×800时,输出图像尺寸为708×708。

针对上述问题,笔者采用Mirror-overlap-tile策略解决,即合理镜像扩充原始大图的边缘像素,再对扩充后的图像使用overlap-tile 策略[9],重叠切分原始大图,获得多张存在边缘重叠的小图作为输入图像,且输入图像尺寸大于待检测的裂缝部分,从而实现输出大图的无缝拼接。将小尺寸图像输入网络,最终输出图像大小取决于卷积层的层数、池化层的层数和上采样次数,还受输入图像大小的影响。可通过如下方式计算原始大图需要镜像扩充的边缘大小:

每层卷积后输出图像尺寸大小为

nw=w-2且nh=h-2;

每层池化后输出图像尺寸大小为

nw=w/2且nh=h/2;

每层上采样后输出图像尺寸大小为

nw=w×2且nh=h×2。

当输入图像的宽和高在池化层中均能整除时,通过计算可以得到网络最终输出图像尺寸nw=w-88,nh=h-88,此时为最大输出尺寸;当输入图像的宽和高在池化层均不能整除时,每次池化后会丢弃一个像素的宽度,网络最终输出尺寸nw=w-95,nh=h-95,此时为最小输出尺寸。也即,15层U-Net网络输入输出图像尺寸差在88到95之间,则可将原始图像周围镜像扩充50作为输入数据,来保证边界像素不会丢失。

1.3 裂缝提取

深度学习网络实际是利用大量数据集以监督的方式通过卷积运算提取和学习图像特征,再利用反向传播最小化训练集上的分类误差,共同优化网络参数,最终实现目标的提取。笔者使用10 000张尺寸为160×160的裂缝样本图像和人工标注的裂缝标签图像投入网络进行学习和训练,并产生分割结果,再使用反向传播算法优化网络模型;然后,对尺寸为5 760×3 840的原始图像采用1.2节描述的填充策略处理图像,输入网络进行裂缝提取,结果如图2所示。可以看出该网络能准确地实现裂缝的识别和提取,保留了裂缝的走势、纹理等信息,但仍存在少量背景杂波和裂缝断裂部分需要做进一步的处理工作。

图2 U-Net网络测试结果图

2 裂缝提取结果优化

2.1 杂波去除

经深度学习检测后的裂缝图像仍存在少量的背景杂波。从图2的提取结果可以看出,杂波的长度较短,连续性差。因此,笔者基于长度进行判断,删除杂波和伪裂缝。为了获取一段裂缝的长度,首先采用文献[15]中的算法将裂缝细化,生成一条单像素线性裂缝骨架,细化后的裂缝如图3(b)所示;然后基于八方向搜索法统计裂缝点的像素数量作为该段裂缝的长度,通过预先设置的阈值来删除长度较短的杂波和伪裂缝,保留较长的裂缝部分。经过杂波去除的裂缝如图3(c)所示,可以看出结果较好地去除了干扰,且保留了真实裂缝的信息。

麦小秋不抬头,她俯身城区,望着渺茫朦胧的苇湖,她的头有些晕,她想从楼上栽下去,变成湖底的一条鱼,沉入泥底。啪,苇湖暗了下去,可能是某个地方出现了故障,她听见苇湖深处的鸟儿发出了几声嘶鸣。

图3 提取结果优化过程图

2.2 最小生成树连接

有部分裂缝由于光照、遮挡等原因不能完整识别,造成所提取的裂缝出现断裂现象。最小生成树算法是一种常用的连接策略,采用广度优先搜索的方法解决赋权有向图或无向图的单源最短路径问题,最终生成最短路径树。可采用最小生成树算法对细化后的裂缝图像进行处理,实现裂缝单元之间的最短连接。常用的最小生成树算法有两种:prime算法和迪杰斯特拉算法。其中prime算法在迭代更新中更新的是未确定点的集合中到已确定点距离最小的点,而迪杰斯特拉算法更新的是未确定点集合中到起始点距离最小的点,后加入的点只作为中间节点,连接起始点不能直接到达的点。相对于文献[14]采用prime算法将交叉的裂缝部分分割成零散的线段作为独立的单元,取线段端点作为连接点的方法,笔者采用迪杰斯特拉算法,对交叉的裂缝部分不做处理,看成一个单元,即将不连通的零碎裂缝片段均视为一个独立的单元,选择一个初始单元,计算各单元直接或间接到初始单元的最小距离(欧氏距离),按照最小距离选择边和归并单元实现其他单元到初始单元的最短路径连接,且连接点不局限在线段端点上,连接效果如图3(d)所示。

由于最小生成树连接算法是针对所有裂缝单元进行的连接,连接结果中会存在伪连接的情况。一般伪连接的裂缝相对真实裂缝较短,为了去除伪连接,可以通过判断裂缝长度来剔除伪裂缝,处理结果如图3(e)所示。图3(e)是完整的、无杂波的单像素裂缝图像,称为裂缝骨架;图3(f)是无断裂的、包含宽度信息的最终裂缝提取结果。实验证明,该方法连接效果更符合裂缝的走势,且更好地保留了交叉处的裂缝纹理信息。

3 裂缝宽度测量

裂缝宽度是评价裂缝病害的重要数据。在得到裂缝提取结果后,采用裂缝骨架图和八方向搜索方法来获取裂缝宽度。首先利用单像素裂缝骨架图(图4(a))将每个裂缝点作为宽度测量的种子点。从种子点出发,在提取的裂缝图中(图4(b))进行八方向搜索。若是裂缝点,则该方向上像素数量加1,直到到达裂缝边界,这样可分别统计一个种子点所在位置在0°、45°、90°、135°、180°、225°、270°、315°方向上的裂缝像素点数量。然后将八方向上统计的像素点数量在四条直线方向上进行合并,根据像素点数量最小的直线方向来计算裂缝的宽度(图4(c))。具体计算步骤如下:

(1)根据裂缝骨架图,确定起始种子点。

(2)在裂缝区域图中,分别统计以种子点为中心的0°、45°、90°、135°、180°、225°、270°、315°方向的裂缝点数量,记为n1,n2,n3,n4,n5,n6,n7,n8。

(3)合并0°和 180°、45°和 225°、90°和270°、135°和 315°四组方向上的裂缝点数量,合并方法为d1=n1+n5,d2=21/2(n2+n6),d3=n3+n7,d4=21/2(n4+n8),取D=min{d1,d2,d3,d4},并记录获得D的方向。

(5)更新到下一个种子点,重复步骤(2)~(4),直至测量完所有种子点处的宽度。

图4 宽度信息提取方法展示图

4 实验结果

在实验中采用PyCharm平台开发,使用基于Python语言的Tensorflow深度学习框架搭建U-Net网络;基于Visual Studio 2015 、opencv3.10 平台开发,实现裂缝宽度的测量。为了验证检测效果,分别使用张量投票的方法[4]和笔者所提方法对24张尺寸为5 760×3 840的裂缝图像进行检测,并对检测后的图像进行切分,得到384张大小为1 440×960的裂缝局部图像。针对裂缝位置即骨架信息提取情况做分类比较,分为无裂缝、完全检测、部分检测、漏检和误检5种情况。无裂缝指图中无裂缝且未检测到裂缝,属于正确检测;完全检测是指完全并且正确检测到所有裂缝;部分检测是指正确检测到大部分裂缝;漏检是指图中含有裂缝,但未检测到;误检则是图中含有裂缝,但未正确检测到或图中无裂缝却检测到伪裂缝。分类结果如表1所示。采用准确率A、漏检率L和误检率E对统计结果进行评估,计算公式如下:

(5)

其中,s表示裂缝样本总数,n,c,p,m,f分别表示无裂缝、完全检测、部分检测、漏检和误检这5种情况的检测结果总数,且s=n+c+p+m+f。

从表1可以看出,笔者提出的方法可以精确地检测到裂缝位置,且漏检率低于3%,误检率低于1%,准确率高于90%,远高于张量投票方法的检测准确度。图5为两种方法对裂缝检测结果的对比图,可以看出,两种方法均能准确地实现线性裂缝的检测,但针对复杂裂缝和较细裂缝的检测,张量投票方法存在误检和漏检的现象,笔者提出的方法整体检测效果优于张量投票方法,且保留了裂缝走势和形状信息,误检率低。

表1 裂缝检测情况评价

图5 裂缝检测结果对比图

为了验证宽度测量方法的性能,在不考虑实际测量裂缝时存在的系统误差以及读数误差的情况下,实验将使用裂缝宽度测量仪测得局部裂缝的平均宽度作为对比依据。如图6(a)所示,用圆圈标记待测量区域,数值表示该区域平均裂缝宽度。针对待检测图像进行裂缝提取和宽度测量,图6(b)为裂缝提取结果,图6(c)展示了待检测裂缝区域部分种子点的D值和D的方向。在图6(c)上统计位于标记区域的平均D值,并按照每个像素所代表的实际距离为比例尺进行换算,从而获得检测到的裂缝宽度,并计算所检测的裂缝宽度与实际测量的裂缝宽度间的差值作为检测误差。笔者对其中30组宽度值小于0.65 mm的裂缝样本数据进行测量评估,其中有16组样本的测量误差小于0.03 mm,占样本总数的50%以上;有27组样本的测量误差小于0.05 mm,占总样本数的90%。详细统计结果如图7所示。另外,表2给出了其中5组数据的详细统计信息。可以看出该方法测得裂缝宽度总体误差小于0.05 mm,测量精度较高。

图6 裂缝宽度测量图

数据组比例尺/(毫米·像素-1)实际测量宽度/mm 平均像素距离/像素检测裂缝宽度/mm误差/mm10.088 70.354.250.3770.02720.089 90.404.670.4200.02030.093 00.455.000.4650.01540.088 30.505.290.4670.03350.090 00.556.260.5630.013

图7 测量误差分布图

5 总 结

笔者针对现有的桥梁裂缝检测算法准确度不高、丢失细节信息等问题,提出一种采用15层U-Net卷积神经网络的裂缝检测方法。该方法可以实现像素级的图像分割,且高效地利用浅层特征与深层特征相融合,最大程度地保留了原始图像的诸多细节信息。针对污点、标记、阴影等因素造成裂缝检测结果存在部分断裂的情况,采用改进的迪杰斯特拉最小生成树算法实现断裂处的连接,有效地去除了背景杂波,突出了裂缝主干信息;同时利用裂缝骨架信息,结合深度学习检测结果实现了对裂缝宽度的测量。经实验验证,所提方法能够准确实现裂缝的提取,准确率达到90%以上,漏检率、误检率低,且裂缝宽度的测量准确性高。

猜你喜欢

宽度卷积像素
像素前线之“幻影”2000
基于3D-Winograd的快速卷积算法设计及FPGA实现
卷积神经网络的分析与设计
“像素”仙人掌
从滤波器理解卷积
基于傅里叶域卷积表示的目标跟踪算法
ÉVOLUTIONDIGAE Style de vie tactile
高像素不是全部
红细胞分布宽度与血栓的关系
孩子成长中,对宽度的追求更重要