陈立潮,解 丹,张 睿+,解红梅,潘理虎
(1.太原科技大学 计算机科学与技术学院,山西 太原 030024;2.国电华北电力有限公司 廊坊热电厂,河北 廊坊 065000)
目前,对焊缝缺陷的识别包括人工评片和非人工评片两类。人工评片会掺杂个人的主观性,而非人工评片能够保证规范、稳定和准确。非人工评片又包含手工提取缺陷特征的方式[1-3]和自动提取缺陷特征的方式[4-6]。手工提取焊缝缺陷特征对于形状不规则的焊缝缺陷而言,很难寻找一种方式能够自动识别焊缝缺陷,因而会降低焊缝缺陷的识别精度。而自动提取缺陷特征可以改善这种情况。卷积神经网络(convolutional neural network,CNN)可从图像中直接提取特征,且应用广泛。Khumaidi A等[7]对网络摄像头获取的图像用CNN进行焊缝缺陷的分类,最终的精度达到了95.83%,但其需要较多的样本数量,才能达到高精度。Liu Bin等[8]提出一种基于VGG16的全卷积结构来对焊接缺陷图像进行分类,用相对较小的数据集实现了高精度的分类效果,但其复杂度较高不利于工程的应用与推广。关于CNN在焊缝缺陷识别上的应用,国内的研究较为薄弱;而国外的研究开始较早且更为完善。因此,研究一种复杂度较低的CNN对焊缝缺陷高精度的识别具有重要意义。
为此,提出一种复杂度较低的渐进式卷积神经网络(progressive convolutional neural network,P-CNN)模型对焊缝缺陷进行识别,以期用较少的样本和较简单的神经网络学习得到显著的特征,避免过拟合和欠拟合,并达到与传统的CNN模型相比,此模型具有更高精度的目的。
CNN是一种前反馈的人工神经网络。它通过局部感受野、共享权值和下采样这3种技术来识别图像的位移、缩放和扭曲不变性[9]。最早的CNN是LeCun Y等提出的LeNet-5模型,之后出现了AlexNet、ZFNet、GoogleNet、ResNet、DenseNet等一系列经典的CNN模型[10-12]。这些CNN网络结构包括了输入层、输出层、卷积层、下采样层和全连接层。
如图1所示是一个传统的CNN网络结构——LeNet-5。其中C1代表卷积层1,S2代表下采样层2,F5代表全连接层5。输入的是一个32×32像素的图像,之后通过一个 5×5的卷积核进行步长为1的卷积操作,变为28×28的图像,紧接着进行下采样操作,此时用2×2的窗口进行步长为2的操作,得到14×14的图像。然后重复卷积和下采样操作,最后经过全连接层,到达输出层并输出结果。
图1 传统的CNN网络结构
具体来说,卷积层的计算形式为
(1)
下采样层是对上一层的特征图进行子抽样,它可以留下有用的信息以减少计算时间和消除偏移、扭曲。其计算形式为式(2)
(2)
全连接层把最后输出的二维特征图转化为固定维度的特征向量,它在计算输入向量和权重向量之间的点积之后,加上一个偏置,最后通过激活函数输出。
输出层共10个神经元,采用欧式径向基函数,具体计算形式为
(3)
式中:yi是RBF的输出,Wij是一个参数向量,由i的比特图编码所确定,i取0至9,j取0至83。
当网络结构构建好后,将训练集图像全部输入构建好的网络中进行训练。传统的CNN训练流程如图2所示。完成训练后将测试集图像输入到训练好的模型中进行识别。
图2 传统的CNN模型训练流程
考虑到X射线下的焊缝图像的特征较少,同时区分度较大。故为了实现焊缝缺陷的高精度识别,在传统的CNN模型上进行改进,并运用了渐进式学习的方式对模型进行训练。焊缝缺陷识别方法的整体架构如图3所示。
图3 整体架构
整体架构包括学习和识别两个过程。首先,学习过程是根据焊缝射线图像与理想标签的向量对所构成的训练集训练模型从而得到一个分类器;得到分类器后再由验证集验证该模型。其次,识别过程是把测试集的实例输入到训练好的模型之中,从而得出预测的识别结果。总的来说,所提出的方法以P-CNN模型为核心,学习系统是对 P-CNN 模型的训练,而识别系统是对P-CNN模型的测试。
P-CNN结构如图4所示,其包括卷积层1、池化层1、卷积层2、池化层2、全连接层1、全连接层2和一个Softmax函数。卷积层中卷积核的大小为3×3,步长(step,s)为1;第一个下采样层的窗口大小为3×3,步长为2;第二个下采样层的窗口大小为3×3,步长为1。此模型在每层均有16个特征图,在全连接层有128个神经元,且第一个全连接层将第二个池化层的每个特征图展开形成的一维向量作为输入。
为了避免感知机的线性不可分问题,并加强网络结构的可扩充性。尽管实验中的焊缝缺陷识别是一个二分类问题,但在P-CNN结构中的输出层并未采用二分类函数,而是运用了具有很好纠错机制的Softmax函数,对“无缺陷”和“有缺陷”的图像进行概率分配,并获取最大概率的索引,然后输出预测结果。如果想要识别不同的缺陷类型,在输出层增加神经元便可实现。最后将此预测结果值与理想标签值比较并计算误差,再将此误差反向传播。同时,为避免权重更新过慢的问题,采用交叉熵损失函数;为避免陷入局部最优,优化器采用Adam优化器对参数不断优化。
图4 P-CNN结构
学习系统是对模型的训练,包括用训练集训练模型和验证集验证模型。由于传统CNN模型的训练过程会导致数据集中样本的数量难以确定,当样本量较少时,出现欠拟合;而样本较多时,又出现了过拟合。出现欠拟合导致对图像的特征学习不足,而出现过拟合时,又需要加入 Dropout 方法。因此,采用渐进式学习的方式对网络模型进行训练。这种学习方法同时避免了学习过程中的过拟合和欠拟合,使得网络可以很好的学习到图像的特征。此学习方法的具体过程是将训练集中的样本进行逐步分批训练,首先进行少量样本的训练;之后用验证集验证,从输出层结果观察哪一类样本识别的准确率低,再继续添加训练集中的该类样本进行训练,直至验证集中样本的准确率大于98%时停止。此时的训练样本数量为最优的样本数量。此方法既减少了不必要的样本训练次数,又比较容易实现。图5给出了P-CNN模型的训练流程。
图5 P-CNN模型训练流程
训练过程中,训练集和验证集的焊缝图像先经过剪裁与扩充规范化为156×156像素的图像,之后进行标准化,标准化的图像数据输入到一个7层的P-CNN中学习,最终得到分类结果,通过查看输出的准确率确定是否需要继续添加某一类别进行再次训练,直到准确率(Precision,Pre)大于98%时完成训练。之后进入识别系统。
识别系统就是测试模型,即用测试集对训练后的模型进行测试。利用模型中学到的分类器对新的(测试集中的)输入实例进行识别,预测其输出的标记及对应的概率。
熔焊缺陷按缺陷性质分为裂纹类、空穴类、固体类、未熔合和未焊透及其它共6大类。由P-CNN模型将采集到的焊缝缺陷图像分为无缺陷和有缺陷两类以实现焊缝缺陷的识别。实验中,由于无缺陷的焊缝图像的特征较有缺陷的焊缝图像的特征少。因此,分别采集了无缺陷的焊缝图像和有各类缺陷的焊缝图像各300幅和600幅。所采集的X射线图像来自于怀安等电厂,部分焊缝射线图像如图6所示。
图6 焊缝图像
图6中图(a)到图(f)为有缺陷的焊缝图像,图(g)和图(h)为无缺陷的焊缝图像。其中图(a)为夹渣缺陷;图(b)为气孔缺陷;图(c)为夹钨缺陷;图(d)为未焊透缺陷,图(e)为未熔合缺陷;图(f)是咬边缺陷;图(g)是小径管焊缝,是焊接完好的翻椭圆;图(h)是板子焊缝。
收集好数据后,按照第2部分描述的方法进行实验。刚开始以两种图像各25幅和50幅为基数进行训练,之后图像以成倍的数量增加进行训练。根据渐进式学习方法最终得到,两种图像中各抽取200幅和400幅作为训练集时可以满足训练的准确率大于98%的条件,之后再增加训练集时,准确率的变化很小。因此训练集定为600幅图像。随后,再从余下的100幅和200幅中随机抽取无缺陷的图像和有缺陷的图像各50幅和100幅作为验证集,最后剩余的150幅图像作为测试集。实验中采用python语言和tensorflow[13]框架,部分训练P-CNN模型的数据见表1,可以看出网络每次训练时损失率和准确率的变化都不同,但是变化的趋势基本相同,且满足实验预期的要求。
表1 训练数据
由表1中数据可知,实验中损失率和准确率随迭代步数变化而变化。刚开始时损失率和准确率随不熟的增加变化很大,之后变化很小,趋于平缓。通过对实验中损失率和准确率随迭代步数变化的分析,发现实验在迭代1000步时,损失率逐步下降到最低,并且趋于平稳,准确率的值也可以达到预期效果。因此,实验中将迭代步数设置为1000。
实验最后取训练过程中的最优模型对150张焊缝图像(包括无缺陷的和有缺陷的焊缝图像)进行测试,部分测试图像如图7所示。图7(a)是对一张有气孔缺陷的焊缝图像的识别结果,模型识别出该图像是缺陷图像且概率是0.999 960。图7(b)是对一张焊接良好的,即无缺陷的焊缝图像的识别结果,模型识别出该图像是无缺陷图像且概率为0.928 603。
图7 测试结果
最终统计的识别结果数据见表2。由表中的数据可以看出,网络对焊缝缺陷的识别错误率降低到了2%以下,精度达到了98%以上。具有很好的识别效果。
表2 实验数据统计
此外,在相同的实验条件下对比了焊缝图像在传统CNN和P-CNN模型下测试的精度(accurancy, Acc)和均方误差(mean squared error,MSE),结果见表3。由表3可知,P-CNN的精确度高于CNN且P-CNN的MSE低于CNN。因此,P-CNN的性能较好,在焊缝缺陷图像识别的效果上有所提高。在实验过程中由于数据集的选取不同也会出现将所有数据集训练完成之后仍不能满足准确率大于98%的情况,此时可以用随机旋转、随机剪裁、色彩抖动、高斯噪声、水平翻转、竖直翻转等数据增强的方法进行数据集的扩充。
表3 不同神经网络对比
针对传统图像处理算法在焊缝缺陷识别上需要手动提取图像特征并且精度较低的问题,建立了P-CNN对X射线的焊缝图像中的缺陷进行识别。与传统的CNN相比,P-CNN 提前避免了过拟合和欠拟合问题,并减少了部分训练参数优化且易于扩充。实验结果表明,P-CNN对焊缝缺陷识别的精度达到了98%以上,该方法具有较好的识别缺陷的效果。之后需要收集更多的焊缝图像来增大数据集,同时改进神经网络结构,以达到识别焊缝缺陷类型的目的。