基于深度学习SCNet 的钢筋混凝土锈蚀裂缝识别
2022-04-02许颖张天瑞金淦
许颖,张天瑞,金淦
(哈尔滨工业大学(深圳),深圳市城市与土木工程防灾减灾重点实验室,广东深圳 518055)
钢筋混凝土结构的钢筋锈蚀会引起钢筋体积膨胀,导致混凝土裂缝的开展进而危害结构的安全性[1].传统的裂缝监测需要人工定期定时完成,但是存在安全性差、成本高、效率低的问题.随着技术发展,光纤、扫描电镜、热成像、超声波[2]等技术也被运用到裂缝检测中来,但这些技术也有其局限性且成本高昂.目前很多比较全面的结构健康监测系统只配置在大型建筑之中[3-4],需要安装大量的传感器,收集数据,并作一定的环境补偿.随着计算机的发展,一些基于计算机视觉的图像处理技术被投入使用[5-6],可以检测到混凝土表面缺陷,但是截至目前图像处理技术还存在着不足,比如不能对不同原因导致的缺陷进一步分类,光照和噪声对其结果影响较大等.
深度学习算法属于机器学习,是一种通过大规模的数据集训练学习神经网络框架,更新权重提取特征的学习方式[7].卷积神经网络(Convolutional Neural Network,CNN)是利用深度学习构建的神经网络,它的灵感来源于动物的视觉皮层[8],能够有效地捕捉到图像的网格状拓扑结构,作为判断分类的依据[9],可以高效地进行图像识别.
对人工神经网络的研究早已开展,但是将这项技术应用于图像处理尤其是土木工程裂缝识别的时间不是很长.蔡光明[10]提出的桥梁裂缝视频检测系统使用了视频图像处理技术,弥补了桥梁裂缝检测技术的不足.Landstrom 等[11]提出了一种基于钢板表面三维轮廓数据,利用形态图像处理和逻辑推理的统计分类,实现钢板表面裂纹自动在线检测的方法.Moon 等[12]研究开发了一种能够对混凝土表面进行分析并有效识别可视化裂缝的自动检测系统.通过滤波、改进的减法和形态学运算,将裂纹与背景图像区分开来并识别裂纹.
随着BP 神经网络、深度学习等领域的深入研究,裂缝特征提取的效率也随之提高.Zhang等[13]将深度学习算法应用于道路的裂缝检测方面,给出了一种通过深度学习来实现的裂缝检测手段.Cha等[14]将训练的CNN 网络模型与滑动窗口技术相结合,完成对混凝土裂缝图像的检测识别.
然而,现阶段深度学习CNN 只能识别出混凝土表面是否存在裂缝,还无法判断此裂缝是否为锈蚀裂缝.有鉴于此,本文将CNN应用于钢筋混凝土锈蚀裂缝识别分类,提出了一种基于深度学习CNN的钢筋混凝土锈蚀裂缝识别模型SCNet(Steel Corrosion Net),并将其与两种传统检测方法进行对比,结果验证了该模型的准确性和可测性.若应用于工程实践中,SCNet可以较好地识别钢筋混凝土结构的锈蚀裂缝.
1 CNN理论介绍
CNN 由输入、隐含、输出等结构层组成,其中隐含层包括卷积、池化、激活、全连接、Softmax 和Dropout 层等,图1 所示为基本的用于分类的CNN 框架图[14-15].
图1 图像分类CNN框架Fig.1 CNN framework of image classification
卷积层用来提取模型输入数据的基础特征,每一个卷积层有多个矩阵卷积核,每个矩阵的元素都有相应的权重系数和偏差值用来执行卷积操作,其操作公式为:
式中:Xi,j是图像的第i行第j列元素;Wm,n是卷积核的第m行第n列权值;Wb是卷积核的偏置项;Ai,j是特征图的第i行第j列元素.
输入数据在卷积层行特征提取后,在池化层进行特征过滤,常用的池化方法有最大池化yij,max和平均池化yij,avg,操作公式为:
式中:yij为池化输出第i行第j列元素;X i,j是池化输入第i行第j列元素;k是池化窗口的尺寸;s为池化窗口移动步长.
输出结果经过激活函数非线性处理和全连接层,由softmax层进行分类类别预测.
本文基于CNN 理论搭建了SCNet 模型,其基本思路是:首先总结一些分类神经网络的基本设计规律,即输入—卷积—池化—全连接—输出这样的排列顺序;其次对各层的数目进行优化调节,如利用三层卷积层相连,使用小卷积核等手段,增加感受野;最后使用ReLU 作为激活函数,使得训练效率和学习速率显著提高,并利用Dropout 层来处理过拟合的问题,使得网络有更好的泛化能力.
2 构建数据集
深度学习中,很多高识别率的网络都得益于其庞大真实的样本集,样本图像特征的准确性及优劣也直接影响到后续模型的训练和检测识别.构建神经网络数据集包括图像数据的采集和数据增强.本文数据集分为3 类:钢筋混凝土锈蚀裂缝、其他原因引起的混凝土裂缝、完整混凝土.其中钢筋混凝土锈蚀裂缝与其他因素引起的裂缝的主要区别在于:锈蚀裂缝有独特的颜色特征(红褐色锈痕),且钢筋锈蚀裂缝表现为通长的裂缝形状,与沿梁长的钢筋(纵筋)的走向基本一致.而其他裂缝的特征是不规则龟裂或网状开裂并伴随透明或淡黄凝胶析出等.数据集包括训练集和测试集,二者的数据比例为4∶1.
2.1 原始图像数据采集
采集原始图像数据使用了网络查找、自行拍摄、锈蚀试验3 种方法.其中网络查找图片210 张,自行拍摄图片540 张,锈蚀试验拍摄图片780 张,共1 530张.网络查找的210张照片中,有90张为钢筋锈蚀引起混凝土开裂的照片,60 张为其他原因引起混凝土开裂照片,60 张为完整混凝土照片;现场拍摄的540张照片中,100 张为钢筋锈蚀引起照片,300 张为其他原因导致混凝土开裂照片,140张为完整混凝土照片.为使图片数据的特征清晰、明确,本文统一了图片的拍摄标准,设定了图像采集规范.首先相机要垂直于混凝土表面进行拍摄,如图2(b)所示,这样不会产生几何畸变,保证所有的图片数据特征是在同一个拍摄环境下得到的.
图2 混凝土图片拍摄角度规范Fig.2 Specification for shooting angles of concrete pictures
拍摄距离也是影响图像质量的一个重要因素,距离远近决定着图像的视野范围的大小.在实际拍摄中,本文采用20 cm 的拍摄距离.离得太近会拍摄到一些干扰因素的图像特征,如混凝土表面缺陷等,导致识别率与准确率的降低;离得太远则会无法清晰拍摄裂缝特征.光照方面,自然光下图像的背景变化较大,会有非均匀的背景亮度,故本文拍摄时加入一个均匀的辅助光照,来减小图像的背景变化.
此外,本文还使用自行拍摄与网络查找的方法.自行拍摄可以按照拍摄规范拍摄,直接用于构建数据集,网络查找图片可能不符合采集规范,因此需要进行图片的缩放或亮度调节和矫正,使网络查找图片符合图片采集规范,也保证了数据的多样性,如图3和图4所示.
图3 缩放、裁剪、矫正前后对比图Fig.3 Comparison of pictures before and after the scaling adjustment
图4 亮度调节和矫正前后对比图Fig.4 Comparison of pictures before and after the brightness adjustment
2.2 钢筋加速锈蚀试验数据采集
为得到钢筋锈蚀引起混凝土裂缝数据,需进行钢筋加速锈蚀试验,共制备60 个钢筋混凝土试件.混凝土强度等级为C30,试件尺寸为100 mm×100 mm×200 mm,在中心位置放置250 mm长钢筋.
采用半浸泡恒电流通电加速试验法,首先用打磨机打磨钢筋外露部分,除去表面杂质,然后利用环氧树脂对外露钢筋和导线粘连处进行封闭处理,消除外露部分钢筋锈蚀对加速锈蚀试验产生的额外影响.然后将电源正极连接待锈蚀钢筋,电源负极连接不锈钢片,把混凝土浸泡在浓度为5%的氯化钠溶液中,接好电路后开始通电.钢筋锈蚀产物积累会导致电流强度减小,所以每隔12 h 需要对通电线路进行一次检查和调整,以保持电流的稳定.图5 所示为加快试验进度,采用并联电路接法进行批量钢筋加速锈蚀试验.一段时间后混凝土表面有钢筋锈蚀产物生成,混凝土开裂,拍摄混凝土开裂后的照片作为数据集的部分原始数据.
图5 批量钢筋加速锈蚀试验Fig.5 Accelerated corrosion test of rebar in batch
2.3 数据增强
在上述方法获得数据的基础上,本文利用OpenCV 的随机裁剪、旋转以及随机色彩变换的方式实现数据增强,以满足训练对数据集大小的要求,其中旋转操作的效果如图6所示.
图6 旋转操作效果图Fig.6 Rendering of rotation operation
经过上述数据增强的方法达到了扩充数据量的效果,一张原始图片可以产生30 张图片数据,剔除一些裂缝占比不够大、明暗度不满足要求的噪音图片,并进行统一尺寸和重命名处理就得到了最终数据集,共计39 000 张,其中3 个分类各13 000 张.将所有图片数据的80%作为训练集样本,共31 200张,20%作为测试集样本,共7 800张.
3 锈蚀裂缝识别分类
本文利用卷积神经网络进行混凝土裂缝图像分类,根据锈蚀裂缝具有红褐色锈痕的独特颜色以及产生沿纵筋的通长裂缝这两个特征,将数据集分为3类.具体分类方法是首先根据3 种不同分类给训练集样本添加相对应的标签0、1、2,再通过监督学习将这些已知数据和其对应的输出标签进行训练,调整参数,得到一个最优模型.再利用这个模型将未知数据的所有输入映射到相应输出,输出对应标签,得到分类结果,从而达到分类的目的.在得到网络输入之后,接着定义神经网络框架结构,反复修改参数训练模型,逐步减小结果误差,最后测试模型在未知数据上的表现.
本文将深度学习CNN 的文件输入、前向传播过程、训练部分、测试部分拆分成了4 个独立的程序.这样解耦合可以更加方便地对每一个部分进行独立修改而不影响后续程序,而且也使整个流程更加灵活.
3.1 构建网络框架
经过优化调整,本文基于经典分类神经网络VGG 设计了一种SCNet 模型,其网络框架如图7 所示.模型由输入层、6个大卷积层、3个全连接层、Softmax 层及输出层组成,其中大卷积层包括卷积层和池化层,第六个大卷积层只包括一次卷积作用.所有的卷积核大小都是3×3,步长设置为1,池化操作的池化窗口大小都是2×2,步长设置为2.输入大小为224×224×3 的图片,经过6 层大卷积层的处理,变成了3×3×512 的尺寸作为全连接层的输入,接着传输到Softmax层判别图片数据的分类.
图7 SCNet网络模型示意图Fig.7 SCNet network model sketch map
SCNet 模型各层的尺寸参数及运行后的图片尺寸变化如表1所示.SCNet模型优点主要有:使用3×3的小卷积核和2×2的池化窗口,增加了神经网络的感受野,并减少参数数量和计算量;25层的网络深度较深,可以适当提高识别精度;相比于VGG16,降低了一些卷积核数目及全连接层的通道数目,提高了网络运行速率,也比较适合本文的三分类问题;在卷积层和全连接层后面通过ReLU 激活函数增加非线性,并在全连接层引入了Dropout,提高了网络测试精度.
表1 SCNet模型的尺寸参数Tab.1 Size parameters of the SCNet model
3.2 神经网络的训练和测试
神经网络的训练过程包括定义损失函数的内容表达形式、挑选反向传播优化算法、在网络框架上一直输入数据并运行反向传播算法直到误差降到一定范围.如图8 所示,第一个阶段是前向传播阶段即输入数据的计算,统计最终误差;第二个阶段是反向传播阶段,是将实际输出和理论输出的误差从高层次传播到低层次的过程.
图8 CNN训练过程Fig.8 CNN training process
本文为了提高模型的训练精度,优化模型,在构建神经网络框架时加入了激活函数和Dropout 层,在训练过程中使用了滑动平均、正则化损失、反向传播优化算法、指数衰减学习率等优化手段,从而提高SCNet模型对锈蚀裂缝识别的准确率.
神经网络模型的测试过程也就是让模型去判断数据集样本里的图片数据属于0、1、2 哪一个分类标签,然后把判断的标签和真正的分类标签比较,统计标签判断正确的图片数,得到正确率.训练集的正确率就是训练精度,测试集的正确率就是测试精度.本文将测试程序与前几个程序独立开来,这样就可以在训练过程中将测试程序作为一个子程序调用.每训练一个epoch 之后,先停止训练,利用测试程序和最新的模型进行训练集和测试集的测试,分别得到当前模型的训练精度和测试精度,接着在原先的模型上继续训练下一个epoch.
3.3 结果分析
为了方便神经网络的调试与优化,本文使用了TensorBoard 来清晰、高效地展示神经网络的训练过程中计算图的构成和一些指标随时间变化的趋势.
一个神经网络的效果是通过其在测试数据上的表现来判断的,因为其最终目的是判断未知数据的分类结果.本文在神经网络每训练一个epoch并保存现有模型之后,都会验证这个模型在训练集样本和测试集样本上的准确率并记录下来.
3.3.1 不同结构框架网络模型结果对比
网络的结构框架对深度学习CNN 至关重要,隐含层数目的多少、卷积层池化层的位置、全连接层的大小都会影响模型精度的高低.如图9 所示,将SCNet 模型与经典分类神经网络模型VGG16 在其他基本参数和训练超参数一致的情况下进行对比.
图9 两种不同结构框架模型的精度对比Fig.9 Comparison of the accuracy of two different structural frame models
对比两个模型在数据集上的表现,可以看出虽然趋势基本一致,但是本文设计的SCNet 模型在训练集和测试集上精度相较VGG16 模型更高,训练精度达到了98.5%,测试精度达到了96.8%.
3.3.2 不同优化方法网络模型结果对比
在训练过程中,本文使用了滑动平均、激活函数、指数衰减学习率、正则化损失等优化手段.为了判断这些优化方法所起到的作用,用控制变量法对比使用所有优化方法的模型和不使用其中一项优化方法的模型.图10 所示是几个神经网络模型在其他网络参数和超参数一致的情况下,在裂缝数据集上训练25个epoch之后的训练精度和测试精度.
图10 不同优化方法模型对比Fig.10 Comparison of models using different optimization methods
可以明显看出,由于在卷积层和全连接层使用了激活函数去线性化,相当于对网络结构进行了调整,最终模型的正确率有很大变化.不使用激活函数的正确率只有91.45%,远低于最终结果96.83%,这说明神经网络的结构对模型的效果有本质影响.由于模型在裂缝数据集上收敛速度较快,所以滑动平均和指数衰减学习率这两种优化方法起到的作用不是很明显.是否使用正则化损失的模型正确率相差也较大,在前文中已经提到,正则化可以有效防止过拟合.只要有交叉熵损失就不能很好地拟合数据特征去分类测试数据,所以使用了正则化和交叉熵损失之和的优化模型在测试集上准确率更高.
3.3.3 不同训练超参数网络模型结果对比
模型超参数由试验者手动指定,神经网络不能直接从内部数据估计得到.对于模型超参数的最优值没有确切理论,只有大量的试验加上经验判断,根据模型的分类准确结果来进行调整.本文构建的SCNet模型超参数主要有:指数衰减学习率的初始学习率、批次大小batchsize、反向传播优化器、训练epoch次数.
神经网络模型在其他网络参数和超参数一致的情况下,改变某一个超参数,在裂缝数据集上训练25个epoch 之后得到的训练精度和测试精度如图11所示.
图11 不同训练超参数模型对比Fig.11 Comparison of different training hyperparameter models
按照经验分别取初始学习率为0.8、0.1、0.05、0.01、0.005,对比发现初始学习率取0.01 模型的正确率最高;分别取batchsize 为24、32、48、56、64,对比发现batchsize 取32 模型的正确率最高;分别取反向传播优化器为梯度下降法和Adam 优化算法,对比训练结果发现梯度下降法在数据集上正确率较高;分别取训练epoch次数为10、15、20、25、30,对比发现训练25个epoch之后正确率已经达到峰值,后续只是不断波动,所以本文采取训练epoch次数为25.
4 可测性研究
为了研究光照强度、明暗变化和图像扭曲等各种问题及噪音对本方法可测性影响,将本文构建的SCNet模型与两种传统的检测方法Sobel边缘检测方法和Canny边缘检测方法进行对比.分析3种方法在不同环境下的检测结果,对比讨论本文构建的SCNet模型在不同环境条件下的可测性.
像素点周围灰度有巨大变化的叫作边缘,而图片边缘包含着图像的重要特征,图片的边缘是其最基础特征,所以确定并提取图像边缘对于整个场景的识别和分类至关重要.对图片的灰度变化的测量、检测和定位就叫作边缘检测.初级阶段中视觉系统先会把图片背景和边缘分离出来,然后才是图像细节的感知[16].
作为一个离散一阶差分算子,Sobel 算子的重要作用是获得亮度函数的一阶梯度近似值.Sobel 算子的主要计算方法是灰度线性加权算法,是将需要计算的像素点的周围像素点进行加权,在图像边缘处取得极值,利用这种特征进行边缘检测.Sobel 算子也会将噪音误测成图像边缘,有着较低的边缘定位精度.Canny 边缘检测方法于1986 年由Canny[17]提出,这是一种提取不同视觉系统中的有效信息,同时削减了分析数据量的边缘检测方法,已经得到广泛应用.
选取4 幅不同环境下的裂缝照片,第一张照片使用正常均匀照明,第二张照片局部有强光,第三张照片有阴影,第四张存在图像扭曲.对4 张照片分别进行SCNet 模型识别、Canny 边缘检测识别和Sobel边缘检测识别.分析3 种方法在不同环境下的检测结果,对比讨论本文构建的SCNet 模型在不同环境条件下的可测性.
图12和图13所示是在均匀光照、局部有强光的情况下3 种方法的处理结果,可以看出本文提出的SCNet 模型方法正确输出了钢筋混凝土锈蚀裂缝对应的标签,可以很好地分类图像;而Canny 边缘检测方法受到极大干扰,将大量噪音也识别为边缘,无法提供有效信息;Sobel 边缘检测方法可以提供一些裂缝信息,但同样受到噪音严重干扰.
图12 均匀照明下裂缝图片处理结果对比Fig.12 Comparison of cracks image processing results under uniform illumination
图13 局部强光下裂缝图片处理结果对比Fig.13 Comparison of cracks image processing results under localized strong light
图14 和图15 所示,在裂缝照片有阴影、扭曲的情况下,SCNet 模型方法可以不受干扰,正确输出钢筋混凝土锈蚀裂缝所对应的标签;而Canny 边缘检测方法在受到阴影和扭曲干扰时完全失去了边缘特征,不能作为分类手段;Sobel 边缘检测方法也极大地受到了阴影和扭曲的干扰,判断不了黑暗区域是由图像损坏还是由噪音引起,不能很好地对混凝土照片进行分类.
图14 有阴影裂缝图片处理结果对比Fig.14 Comparison of cracks image processing results with shadows
这几种情况的分类结果表明,在正常均匀光照的情况下两种传统检测方法可以提供一些裂缝信息和边缘特征,但是在受到局部强光、阴影、扭曲等干扰的情况下,两种传统方法很难达到识别效果.所以传统方法的性能受到图像条件的制约和影响,而本文所提出的SCNet 模型分类方法则不受图像条件的干扰,在各种情况下都能表现出相对稳定的分类性能.
但目前SCNet 模型识别裂缝仍有局限性,如对拍摄的图片要求比较高,光照不能太亮或太暗等;混凝土不能有干扰颜色或者类似裂缝的物体;图片分割后每张图片仅能识别单个裂缝等.
5 结论
本文基于深度学习CNN提出一种用于钢筋混凝土锈蚀裂缝识别的SCNet 三分类模型,主要结论如下:
1)设定了统一的图片数据采集流程和拍摄标准,使图片数据的特征清晰、明确,方便后续神经网络进行训练和测试分类.
2)利用TensorFlow 和Python 构建了一个混凝土锈蚀图像识别分类的CNN 模型SCNet,并具有较高的识别率.
3)以往将卷积神经网络应用于混凝土裂缝识别只能实现对裂缝的二分类,本文提出的SCNet 模型可以识别完整混凝土、混凝土锈蚀裂缝、其他原因引起的混凝土裂缝,实现了对钢筋混凝土裂缝的三分类.
4)比较了SCNet模型与两种传统边缘检测方法在不同环境下的检测效果,结果表明SCNet 模型方法相对于两种传统检测方法在不同环境条件下都有更好的稳定性与可测性,受图像噪音干扰较小.