基于深度学习的野外露头区岩石裂缝识别

2020-06-09 08:17梁世豪
计算机与现代化 2020年5期
关键词:面元识别率卷积

罗 伟,梁世豪,姜 鑫,安 妮,杜 锐

(东北石油大学电子科学学院,黑龙江 大庆 163318)

0 引 言

野外露头区岩石裂缝是岩石受到地质作用影响而产生的裂缝,地质考察中对此类露头区裂缝的研究是一项很重要的课题,通过对裂缝的深入研究可以为了解地质结构的演化过程和预测地下的矿产资源等地质考察工作提供有效的数据支持。

但目前传统的露头区裂缝的研究中,初始的裂缝获取及处理仍采用人工描绘处理方法和传统的图像处理算法如主成分分析法(PCA)、局部保值映射法(LPP)、拉普拉斯特征图法、稀疏表示法等。第一种人工描绘方法不仅浪费庞大的人力而且会不可避免地产生较大的人工测量误差,以至于对地质考察深入研究工作带来不可预估的偏差和风险。第二种传统图像处理方法在计算机的帮助下相对人工描绘法而言可以较好地处理简单的裂缝如隧道、路面、工业产品等表面裂缝,如国内王耀东等人[1]提出的一种全局与局部相结合以及连通区域的多级滤波隧道裂缝检测算法;徐志刚等人[2]提出的一种基于直方图和形状分析的沥青路面裂缝识别算法。但由于原始野外露头区岩石表面结构和裂缝结构较为复杂以及外部环境(光照、阴影等)的影响,导致这些传统的图像处理算法对野外露头区裂缝的识别结果准确度不高,并且不易对原图裂缝外表结构进行有效表达,无法满足现代地质考察的应用。随着深度学习在近些年不断取得重大的突破,一些研究者开始研究用深度学习算法来识别隧道、桥梁、沥青路面、容器等表面复杂度较低的裂缝。如国外Dung等人[3]研究的一种基于卷积神经网络的混凝土裂缝自动检测法;Protopapadakis等人[4]研究的使用深度学习和图像后处期理的隧道自动裂缝检测技术;Kim等人[5]研究的基于深度学习的混凝土表面裂缝检测技术。以上3种基于深度学习的识别方法在识别复杂度较低的混凝土隧道表面取得了良好效果。相关研究还包括Zhang等人[6]研究的基于深度学习的对3D沥青路面全自动裂缝检测;Islam等人[7]研究的基于特征选择和深度学习方法的压力容器裂纹分类法;Dung等人[8]提出的一种基于视觉的钢桥节点板焊接裂纹检测方法;国内李良福等人[9]提出的一种基于深度学习的桥梁裂缝检测算法和Ni等人[10]提出的卷积特征融合图像中的像素级裂纹描述等。

根据上述传统图像处理算法的不足和深度学习算法在野外露头区等高度复杂的表面的裂缝研究处于空白的情况,本文提出一种基于TensorFlow的神经网络模型算法来对野外露头区裂缝进行识别,该方法通过使用预处理的数据集对神经网络进行训练,使用训练完成的模型和参数对野外露头区裂缝图片进行识别得到了高于91%的识别准确度,并且识别结果可以清晰地显示裂缝结构。该方法可为现代地质考察提供可靠的数据支持。

1 露头区裂缝识别基本原理

1.1 深度学习

深度学习是人工智能中机器学习的一个分支,具体包含关系如图1[11]所示。深度学习源自人工神经网络的研究,其目的是通过计算机在构建的多层网络上自动学习并得到隐含在内部的数据关系,将低层的特征提取组合并形成一个更抽象的特征,经过若干层特征的处理使得特征更具有表达力[12]。

图1 深度学习与人工智能关系包含图

通过判断数据集是否具有标签将深度学习分为监督学习和非监督学习[13],其中监督学习方法主要包括:卷积神经网络[14]、深层感知器、深层前馈网络、循环神经网络等。非监督学习方法主要包括:受限玻尔兹曼机、深层玻尔兹曼机、深层信念网络等。目前国外一些主流的互联网公司对深度学习研发了一系列深度学习框架,其中主流的包括谷歌公司的TensorFlow、脸书公司的Torch、微软公司的CNTK等。这些学习框架的提出极大地方便了研究人员对深度学习的应用并且促进了深度学习的发展,目前此类框架在图像识别分类、语音识别[15]、手写字识别、自然语言处理等方面得到了广泛的应用。

1.2 露头区裂缝识别系统训练流程

运行环境:Pycharm2018编程环境+Anconda包管理器+Python语言。

本文采用一种基于谷歌TensorFlow框架的卷积神经网络深度学习模型[16-17],通过对原始图片进行手动分类设计神经网络训练数据集,将数据集输入至神经网络进行多个次数的训练,最后将训练得到的参数及网络结构保存。如图2所示。第1步为原始图像的采集:通过互联网、相关地质剖面图集[18]资源和相机实际拍摄最终获取了40张合适的野外露头区裂缝图片并剪裁成105张分辨率为512×512 px(px,像素)尺寸大小的未预处理的原始图片。第2步为图像预处理:将原始图片中的98张进行二值化预处理并切割成分辨率为32×32 px的小图片共约计25000张(每张原始图片可分为256张32×32 px的面元)人工分类为背景图片和裂缝图片,并分别将背景图片放入background文件夹,将裂缝图片放入crack文件夹。余下7张原始图片用于识别测试。第3步为数据集读取程序:此程序主要是将background和crack文件夹的图片读取并分别标注上对应的background和crack标签。第4步及后2步为将数据集读取程序读取的图片加载至训练主程序,分批次地将所有读取的图片传入神经网络进行训练学习,其中数据集的样本总量为25000张,2000张作为训练集,5000张作为验证集。经过n次完整的训练并将每一次训练的结果输出,并将第n次训练的参数和网络结构保存至model-of-crack文件夹。

图2 露头区裂缝神经网络训练过程流程图

1.3 露头区裂缝识别流程

本阶段为露头区裂缝识别过程,主要步骤如图3所示,所识别的图片为训练时留下的7张图片。将图片分割后选取需要识别研究的露头区裂缝图片,本文最终识别的裂缝图片分辨率为256×256 px大小,先将识别图片设置合适的参数二值化,再通过步长参数为16 px、尺寸大小为32×32 px的滑动窗口算法[19]将已二值化后的图片进行自左至右、自上至下获取不同区域块图片的标准差,通过对比每个区域的标准差预先筛选排除明显的背景区域,然后对标准差筛选非明显背景的区域的二值化的图片传入已训练完成的神经网络并加载参数进行识别,综合计算通过区域块标准差预筛选的方法将识别任务量减少至原来的65%左右。然后将通过神经网络识别出的裂缝二值化图像及通过裂缝位置信息还原出的原色裂缝图像进行保存,原色裂缝图像可以帮助地质考察人员对裂缝内部纹路进行分析。

图3 露头区裂缝识别过程流程图

在本阶段除了使用区域块标准差预先筛选排查的方法减少识别任务量外,为了防止出现滑动窗口获取的每个图片相互独立、缺少全局信息的问题出现,将滑动窗口的步长设为16 px,小于窗口大小,使得在相邻的2个独立区域块之间获取一个都有重叠部分的区域块。使用滑动窗口的算法加重了识别任务量,但同时也减少了裂缝的漏检率,并且可以通过滑动窗口的参数确定裂缝区域的具体坐标位置,为进一步研究裂缝的方向、大小与形貌等问题提供位置数据。

2 数据集处理

2.1 露头区裂缝图片的分割

露头区裂缝原始图片二值化后再分割的目的是为了设计合适裂缝和背景面元的训练数据集,分割图片所用到的工具为Adobe Photoshop(PS)中切片分割工具。图4所示为一张露头区裂缝原始图片和经过二值化的图片,其表面除裂缝外还有复杂的小坑、表皮脱落和亮度不平衡部分如标记框所示。在分割时需要尝试找到最合适的分割尺寸,如图5所示:因为当分割尺寸过大如64×64 px时,裂缝图片中将会包含外部干扰,使得识别结果中也包含干扰物,而分割尺寸过小如16×16 px、8×8 px时,图片中的裂缝特征得不到体现,且容易判断为背景或干扰物,从而降低识别准确度。经过比较发现将分割尺寸设置为32×32 px时对裂缝特征有较好的体现。

图5 不同分辨率的裂缝分割图片

2.2 分割后的图片挑选、保存及打标签

图6 分割后的裂缝和背景图

图4中的露头区裂缝遍布了整张图片并且分割出了大量的裂缝和背景面元,从而造成了裂缝图片挑选工作的复杂且耗费大量时间。图6所示为通过人工挑选的分割后的裂缝面元(左)和背景面元(右),将挑选完成的裂缝面元存放至cut/crack文件夹、背景面元存放至cut/background文件夹。通过对训练主程序的读取程序编程设计使得对crack和background这2个文件夹内的图片分别打上对应的标签[1 0]和[0 1],进行模型训练时一次性将打标签的分割后裂缝和背景图片预加载至主程序。

3 神经网络结构

3.1 卷积神经网络结构设计

本实验采用基于谷歌TensorFlow框架的卷积神经网络结构,简称CNN(Convolutional Neural Networks)。该网络为一个10层的深度网络结构,采用3×3、2×2尺寸大小的卷积核和2×2大小的池化采样窗口尺寸,卷积和池化采样过程均考虑边界。

神经网络各层参数如图7所示。第1层为输入层,第2、4、6层和第3、5、7层分别为卷积层和采样层。本文在编程中将相邻的一个卷积层和采样层定义为一个函数,第2、4层为32个3×3尺寸大小的卷积核,第6层为64个2×2尺寸大小卷积核,采样层均为对不重叠的2×2 px大小区域进行max-pooling池化采样操作。第8层为flatten层,第9、10层为全连接层,第11层为结果输出层。

图7 露头区裂缝神经网络识别模型

3.2 神经网络中的数据传递

在第1层输入层输入一个32×32 px的预处理野外露头区背景或裂缝图片,输入图片经过第2层卷积层卷积输出为32个32×32 px的矩阵;第2层结果被第3层池化采样层池化输出为32个16×16 px的矩阵;第3层结果被第4层卷积和第5层的池化输出为32个8×8 px的矩阵;第5层池化输出结果被第6层卷积和第7层池化输出为64个4×4 px的矩阵;然后第7层池化结果传递至第8层flatten层,其目的是将第7层采样层输出的多维向量转化为一维向量;最后flatten层输出的一维向量输入至第9、10层全连接层,使用Softmax逻辑回归函数[20]对第10层全连接层的数据进行逻辑回归并输出最后的结果。

3.3 神经网络中超参数设置

1)损失函数设置。

在训练中通过将第10层输出结果输入Softmax搭配交叉熵损失函数[21]并对该损失函数求均值来判断实际输出与期望输出的概率偏差。该损失函数和求均值的代码为:

cross_entropy=tf.nn.softmax_cross_entropy_with_logits(logits=layer_fc2,labels=y_true)

cost=tf.reduce_mean(cross_entropy)

其中logits为第10层输出数据,labels为数据真实标签。

2)优化器和学习率的设置。

本文采用寻找全局最优点的Adam优化器,其引入了二次方梯度矫正。该算法代码为:

optimizer=tf.train.AdamOptimizer(learning_rate=1e-4).minimize(cost)

其中learning_rate为学习率,该参数设置过大会导致优化器在梯度下降时无法收敛,太小会导致梯度下降太慢,通过多次对损失函数的判断选择1e-4为较为合适的学习率。

3)其他参数设置。

激活函数采用Softmax,神经网络层数为10层,batch_size为200,学习回合数为5000次,全连接层采用dropout防止过拟合。

4 训练及实测结果讨论

4.1 训练结果

1)训练准确度和代价函数迭代曲线。

通过数据集读取程序将已预处理图像读取至训练主程序,并以每个批次200张图片的速率向训练神经网络传递训练数据,经过一次完整的图片训练称为一个epoch,经过100个epoch训练并记录每次完整训练的准确度ACC(accuracy)和验证集准确度VAL-ACC(validation-accuracy)。

图8所示为前100个epoch得到的训练结果ACC、VAL-ACC折线图,由折线图可以得到初始ACC为0.75、VAL-ACC为0.76。经过100次完整训练最高ACC为0.955、VAL-ACC为0.945,第100次训练结果ACC为0.935、VAL-ACC为0.88。

图8 露头区裂缝识别率与训练次数之间的关系(训练100次)

图9所示为训练中代价函数的迭代收敛曲线,代价函数为整个训练集上所有样本损失函数值的平均值,代价函数值的大小反映了预测结果和真实结果的逼近程度。由图中数据可看出代价函数值由刚开始的0.5607经过多次训练降低至0.08附近上下浮动。

图9 代价函数迭代曲线(训练100次)

为了提高数据可信度,将训练次数增加到5000次,如图10所示可以看出训练起始时整体的准确度较低,ACC为0.8931、VAL-ACC为0.8918。随着训练迭代次数的增加训练整体准确度缓慢上升,最后ACC在一个可接受的数值范围0.91附近波动,VAL-ACC在0.88~0.89的可接受区间内波动,其中ACC最高为0.9136、VAL-ACC最高为0.9017。

图10 露头区裂缝识别率与训练次数之间关系(训练5000次)

2)训练精确率、召回率和F1值。

图11所示为神经网络模型的3个常用的评估指标,分别是精确率(Precision, P):P=TP/(TP+FP),召回率(Recall, R):R=TP/(TP+FN), F1-Score:F1-Score=2PR/(P+R)。其中TP为预测为正并判断正确,FP为预测为正但判断错误,FN为预测为负但判断错误。

图11 精确率、召回率、F1-Score曲线

由图11可知,起始时召回率为0.960、精确率为0.967、F1-Score为0.963,随着训练次数的增加召回率缓慢下降至0.945附近上下波动、精确率缓慢上升至0.989附近上下波动、F1-Score缓慢上升至0.968附近上下波动。

由训练过程中的识别率曲线、代价函数曲线和精确率、召回率、F1-Score曲线可以看出在本次设计中该神经网络结构表现相对出色,能够较好地完成对野外露头区裂缝识别训练。

4.2 实测结果

1)将所需要识别的野外露头区裂缝图片传入识别模型进行裂缝识别,得到识别结果如图12和图13(b)所示,在图12中每张图片的分辨率都为256×256,拥有64个32×32的面元。图12中,第2列为第1列裂缝图片的二值化图片,第3列为第2列的裂缝识别结果图片,第4列为第3列图片通过裂缝位置信息复现的原始裂缝结果。图13(a)为尺寸和复杂度较大的露头区裂缝图片,图13(b)为图13(a)的识别结果,为了方便地质考察研究人员获取裂缝信息识别结果,删除了识别出的背景图片,只留下裂缝图片。

图12 露头区裂缝系统识别结果1

(a)裂缝图片 (b)识别结果

2)对识别结果图12进行统计分析:裂缝识别率用D表示,误判率用E表示,正确识别裂缝面元个数用F表示,期望得到的裂缝面元数量用G表示,误判面元数量用H表示,每张图总面元数用I表示,其中对原始图片和识别结果图片进行32×32尺寸网格分割统计得到正确识别裂缝面元、期望得到面元和误判面元的数量,则:

裂缝识别率:D=F/G

误判率:E=H/I

通过人工对比第2列二值化图片和第3列二值化裂缝识别结果图片,得出第3列识别结果中的正确识别到的裂缝面元数量和误判面元的数量。由识别结果图A3数据分析可得:该图中总面元个数为64,其中有22张为期望得到的裂缝图片,正确识别到的21张,对裂缝的识别率约为0.955;误判结果数量(裂缝识别为背景或背景识别为裂缝的图片张数)为3,误判率约为0.047。同理可得:B3中20张期望得到的裂缝图片,正确识别19张,对该裂缝的识别率为0.950;误判结果数量为1,误判率为0.016。C3中20张期望得到的图片,正确识别20张,对该裂缝的识别率为1;误判结果数量为1,误判率为0.016。D3中14张期望得到的裂缝图片,正确识别14张,对该裂缝的识别率为1;误判结果数量为1,误判率为0.016。E3中21张期望得到的图片,正确识别20张,对该裂缝的识别率为0.952;误判结果数量为2,误判率为0.031。

3)由识别结果图12的A3、B3、E3以及较复杂的图13(b)可以看出该系统在识别较宽裂缝主体时进行了较好的识别,但对于较窄和颜色较浅的裂缝未能完全识别。由识别结果图12的C3、D3可以得到该2个结果基本完成了对整体裂缝的完全识别。经过多组实测数据及训练数据分析得到本露头区裂缝识别系统的综合裂缝识别率可达到91%以上,图12第3列为二值化裂缝的识别结果,通过对二值化识别结果使得识别结果中的裂缝信息更加直观并且使得图片占用内存空间减小约80%左右,缺点为不能像灰度图和真彩图那样直观地看出裂缝内部构造。由图12第4列和图13(b)中识别的岩石裂缝结果可以看出本识别系统和其它识别系统不同之处在于本系统可在高准确度识别情况下对原裂缝的内部构造原色图进行还原,使地质研究人员可更加直观精确地分析裂缝形态及内部结构。

4.3 不同裂缝识别方法识别率对比

表1所示为横向对比的不同种裂缝识别率对比情况,由于基于深度学习对野外露头区岩石裂缝的研究处于空白,而其他研究者所研究的裂缝与野外露头区岩石裂缝虽然背景复杂度不同但具有相似的结构,所以使用2组背景复杂度和露头区岩石裂缝相似的隧道表面裂缝和2组背景复杂度一般的桥梁裂缝、路面裂缝识别方法作为对照组。

表1 不同裂缝识别方法对比

裂缝识别方法识别裂缝种类背景复杂度识别率/%TensorFlow神经网络识别(本文)露头区岩石裂缝较高91SVM裂缝识别[22]隧道表面裂缝较高81全局与局部相结合的预处理算法[1]地铁隧道裂缝较高80Caffe框架神经网络识别[9]桥梁裂缝一般70.6(无数据集扩增)几何特征识别法[23]沥青路面裂缝一般90

由表1可知,第1组本文设计的TensorFlow神经网络识别率为91%,而背景复杂度同样较高的隧道裂缝使用SVM裂缝识别方法和全局与局部相结合的预处理算法得到的识别率分别为81%和80%,远低于本文识别方法。而第4、5组使用背景复杂度较低的桥梁和路面裂缝的识别率分别为70.6%、90%,识别率低于本文方法。综合上述5组对比情况可知本文方法在裂缝识别中具有较大的优势。

5 结束语

本文采用基于TensorFlow框架的卷积神经网络算法识别野外露头区裂缝,通过对裂缝原始图片的预处理并将处理后的图片经过卷积神经网络的训练得到了表现出色的模型参数,从而降低了在地质考察中采用人工手绘方式和传统图像处理算法识别野外露头区裂缝带来的高误差,经过对本文原始数据多次实验结果表明该设计对野外露头区裂缝的识别率平均达到了91%以上,为地质考察研究提供了更加可靠的数据支持。

但由于到目前为止没有公开的全面的野外露头区裂缝数据集的支持,野外露头区裂缝一般处于较为复杂的野外环境中,包括数量庞大且不可预料的异物种类、不同的光照强度等,并且因本次设计的数据集数量及种类有限等原因,使得本设计在有限的范围内才能实现高准确度的露头区裂缝识别。在未来,通过对原始数据集的不断完善以及神经网络结构的不断改善,对野外露头区裂缝的识别将会和汽车自动驾驶功能一样在不断的数据积累中实现对大范围广种类情况下的高识别精度的识别。

猜你喜欢
面元识别率卷积
基于3D-Winograd的快速卷积算法设计及FPGA实现
卷积神经网络的分析与设计
超电大尺寸海面电磁散射计算的混合面元法研究
从滤波器理解卷积
基于真耳分析的助听器配戴者言语可懂度指数与言语识别率的关系
听力正常青年人的低通滤波言语测试研究*
提升高速公路MTC二次抓拍车牌识别率方案研究
基于傅里叶域卷积表示的目标跟踪算法
基于改进Gordon方程的RCS快速算法
高速公路机电日常维护中车牌识别率分析系统的应用