封雨鑫,邓宏贵,程 钰
(1.深圳市大族智能控制科技有限公司,广东 深圳 518057;2.中南大学 物理与电子学院,长沙 410083)
随着我国近年来在工业智能制造领域的快速发展,产品的市场需求对工艺、材料、设备的要求越来越高。钢铁在汽车、医疗、航空、船舶等诸多邻域的应用中成为了一种必不可少的材料。当前,激光焊接成为了工业钢材结构焊接的主流,受工艺环境的影响,会在焊接部位形成不同程度和数量的溅射、气孔、夹渣、未焊透等现象。这些工艺问题是不可避免的,如果视而不见的去应用这些焊件材料会影响整个产品的使用性能,尤其是化工锅炉、桥梁结构等一些应用场景中,严重时可能会带来不可预估的安全事故。因此,焊缝缺陷检测是确保焊件材料安全性、可靠性的一道必不可少的工艺。而目前工业缺陷检测主要以人工检测和机器视觉检测为主,人工检测存在检测效率低、检测精度低和误检率高等问题;在机器视觉检测方面已存在大量的方法:Guifang Wu[1]基于数字图像处理技术提出了一种热轧钢带表面缺陷检测系统;刘明炜,王快社[2]设计了一种带钢表面缺陷检测系统;Fernando Lòpez等人[3]基于T2统计量提出了一种彩色纹理缺陷检测方法;周鹏,徐科等人[4]基于SIFT算子对中厚板材进行了缺陷检测的研究;Fu Qiang等人[5]基于小波算法提出了一种多分辨率表面缺陷检测算法;针对钢板材料的表面缺陷检测,天津大学、西安理工大学、河北工业大学等研究人员在缺陷检测方法和缺陷检测系统设计这方面做了大量研究[6-9]。以上这些研究在很大层面上解决了人工质检效率低下、误检率高、成本高等问题,但随着市场对产品质量的要求越来越高,在诸多的工业材料质检领域,传统的检测方法无论是在检测精度上还是实时检测效率上都难以达到行业检测标准。
AI教父Geoffrey Hinton在2006年发表了一篇文章[10]才真正开启深度学习的时代。自此之后,深度学习在表面缺陷检测的应用中得到了大量研究。文献[11]基于卷积神经网络研究了轨道表面缺陷检测;文献[12]开发了一个基于深度卷积网络(DCN)的模型,该模型的精度达到了97.2%,远高于传统的特征提取方法;文献[13]利用Faster R-CNN为神经网络框架检测带钢表面缺陷,并基于迁移学习优化权重参数,实验准确率达到了92.2%;文献[14]通过卷积神经网络研究了工业机器人弧焊过程中产生的焊缝缺陷。文献[15]提出了一种改进的YoLo V3算法用于金属表面缺陷检测,使用了特征金字塔和残差网络来定位缺陷边界框,并通过非极大值抑制来筛选精确框;而且对输入的数据利用直方图均衡化做了处理,提高了检测效率,通过实验表明改进后的算法对缺陷的检测精度能够达到90%以上。
本研究也基于深度学习中的卷积神经网络,采集了一系列工业钢板缺陷样本,并对这些工业钢板表面焊缝缺陷分类识别进行了研究,还对比了传统的机器学习算法在该样本多分类任务中的表现,最终在自定义卷积神经网络模型中能够取得最优效果。
卷积神经网络(Convolutional neural networks,CNN)也叫卷积网络,是目前来说提取数字图像特征最好的一种方式,在二维数字图像识别、分类、分割中得到了广泛的应用。CNN是一种高效的监督学习模型,低隐藏层通过卷积和池化的交替操作提取图像的特征,高层通过全链接层进行分类输出[16]。它一般由卷积层、激活层、池化层和全链接层等网络层组成。在本研究中,综合了实际工业中钢板的缺陷类型搭建了如图1所示的自定义卷积神经网络框架。
图1 网络模型
输入层的图像尺寸为200*200*3,整个模型包括3个卷积层、3个池化层和3个全链接层,卷积核的大小为5*5*100,步长strides为1,padding方式为same。经过卷积操作后输出图片的尺寸为N*N,可以通过式(1)表示:
(1)
式中,W为输入图片尺寸,F为滤波核的大小,P表示在图像周围填充多少圈像素,S表示步长。经过一次卷积后,得到200*200*100的特征映射图。在多层神经网络中,卷积操作可通过式(2)计算。
(2)
式中,n为滤波核的大小;w为权重,可以通过随机初始化将初始权重矩阵的值设置为一个较小的值;b为偏置,当b>0时,激活函数向左移动;当b<0时,激活函数向右移动。输入像素值x经过一次卷积运算后得到输出值y。然后将输出值y作为激活函数的输入值,进行非线性运算,在本研究中,激活函数为Relu,如式(3)所示:
Relu=max(0,x)
(3)
采用最大池化可以进一步提取上层特征图中的信息边缘特征,还能降低模型的过拟合[17]。在本研究中,最大池化的核大小为2*2,步长为2。第一次池化后得到的输出为100*100*100。在最后一个池化层后添加了一个Dropout层,通过Dropout可以对隐藏层的神经元以概率进行随机剪枝,实现权重参数的压缩,能够有效地防止网络过拟合,还能提高模型的训练速度[18]。本研究中,概率设为0.5。通过全链接层将之前网络提取的所有局部特征进行整合,这里设置了3个全链接层,FC1有512个神经元,FC2有256个神经元,最后一层FC3为包含有4个类别的输出,利用softmax函数进行样本的概率预测,可以通过式(4)表示:
(4)
其中:C表示类别数;分子表示的是第i个网络节点的输出值;表示输出结果为第i个类别的概率。
损失函数采用交叉熵误差,如式(5)所示,其本质是判断实际值与期望值之间的距离,因此实验中可以通过优化器反向传播多次迭代更新来最小化损失误差,以此来提高模型精度。本研究中,训练过程中的优化器采用的是RMSprop。
(5)
本研究针对某工厂实际钢板激光焊接缺陷检测,需要采集一系列数据。其中,钢板对象有碳钢板和不锈钢板两种。相机设备采用工业CMOS相机和工业定焦镜头;光源采用工业环形视觉光源;配合工业数控机床和CNC操作面板进行数据采集。在实际采集过程中,采用了视觉曝光的方式进行了样本的采集,更突出了目标的表面特征。原始焊缝图特别大,如图2所示,其中包含有各种不同类型的缺陷,后续需要进行裁剪和分类。
图2 原始钢板焊缝图
通过视觉曝光后采集的某张图像如图3所示。
图3 曝光下采集的图像
最后设置一个固定的滑动窗口在原图中进行样本手动截取,通过分类和打好标签后,分别装载在4个文件夹下。已采集的图像总共分为4种类别,部分截取的样本如图4所示,从左至右依次为:正常、凹陷、溅射和未焊满。
图4 钢板表面焊缝图
在某些情况下,图像的采集会受到实际环境的影响。比如说,机床焊接中有时会有氮气、颗粒气雾等干扰,悬浮在焊缝图像上方时影响相机的图像采集,在这种情况下采集到的焊缝图像对比度和亮度都会下降,此时的图像特征会被部分隐藏,特征的具体轮廓也会难以辨认。对于采集到的存在干扰的焊缝图像,由于其灰度直方图的像素分布是比较密集的,肉眼看上去会有点不太清晰,存在一些朦胧感。根据这些特点,如果能够将这些密集的灰度直方图分布进行拉伸,就能提高图像的对比度。通过实验发现,利用Sin函数对焊缝图像进行一次非线性变换可以解决这一问题[19]。Sin函数的变换公式如(6)所示:
(6)
其中:f(x,y)表示变化后的灰度值,f0(x,y)表示变换之前的灰度值,a表示变换之前的最低灰度值,b表示变换之前的最高灰度值。这里通过opencv的函数minMaxLoc(Input_gray_img,&minVal,&maxVal,&minLoc,&maxLoc,Mat())可以分别计算出minVal=a和maxVal=b。低对比度的焊缝图像进行sin函数变换后可以得到如图5增强后的图像。根据图灰度直方图的分布可知,图像拉伸后的像素灰度级分布明显平缓了很多。
图5 Sin函数变换前后的焊缝图像和灰度直方图
在本研究中,采集到的原始图像非常宽,且有150多张,每张图像的焊缝区域基本都在x轴水平方向上,部分图像存在20度左右的角度偏移。在手动截取过程中,设置一个窗口大小为200*200的滑动窗口对所有原始图像从左至右以一定的步长依次截取,最后可以生成517张图像,然后通过分类打标签分别封装在4个子文件夹下。考虑到数据量比较少,为了提高模型的分类效果,对采集的数据进行数据扩增是必要的[20]。在本研究中,数据扩增主要包括水平翻转、垂直翻转、以20度角度范围随机旋转、随机亮度增强等操作来进行,部分数据处理效果如图6所示。
图6 数据增强
由于本研究的焊缝在钢板中的位置都是以直线形式呈现,因此实际检测时可以从起始端到尾端依次用调好的相机进行扫描就行。实际中的钢板是比较大的,为了便于焊缝检测,焊接完后的焊缝区域,在其起始位置和尾端会各设置一个mark点。如图7所示,起始点为A,尾端为B,通过这两个定位点坐标确定一条直线路径L,在工业数控机床上,机器轴可以根据第一个起始mark点将相机对准到A点。由于训练的图片尺寸为200*200,这里每个窗口Hi也采用200*200,并将相机定位到第一个H1的中心O1。为了避免每个窗口衔接处未被采集到,从第二个窗口H2开始的后面所有窗口都会有一小部分覆盖在前面窗口上,依次定位到每个中心点进行图像采集。
图7 窗口检测示意图
将每一条焊缝区域中的图像采集完后,采用数字编码的形式做好标签,并依次输入到已训练好的神经网络模型中进行预测分类,在本研究中有3种类型缺陷和一种正常焊缝。当该焊缝中的所有缺陷比例达到一定工业条件时则判别为不合格,并重加工;当只有很小一部分焊缝区域不合格时,则可根据不合格区域对应的标签用机器轴找到该位置,并针对不同的缺陷采用相应的方法进行修补。
本研究中,通过数据采集并扩增后的数据有2 070张,每种焊缝类型均在510张左右。按照4:1的比例划分为训练集和验证集,并在训练集中再抽取四分之一作为测试集。实验环境为Windows10系统,语言为python3.7,软件平台为Anaconda中的Spyder,基于tensorflow框架和keras进行实现,处理器为Inter(R)Core(TM)i5-2400 CPU@3.10 GHz,DDR4 16G RAM和GTX 1050显卡。
在神经网络的性能评价指标中,有准确率、精确率、召回率和精确率与召回率的调和,可以通过表1的混淆矩阵来进行表示。
表1 混淆矩阵
1)Accuracy:
Accuracy(准确率)表示预测正确的样本数占总预测样本数的比例。
(7)
2)Precision:
Precision(精确率)表示预测正确的正样本数占总预测样本中正样本数的比例。
(8)
3)Recall:
Recall(召回率)表示预测正确的正样本数占真实正样本的比例。
(9)
4)F1-score:
F1-score是精确率和召回率的一种调和形式。
(10)
本研究中,采用的优化器是RMSProp[21],由于该方法采用了动量的机制,在一定程度上能够加快梯度的下降,并将其初始学习率设为0.001,每批次的样本量batch_size为64,并采用shuffle的方式打乱训练样本;采用early_stopping的方法进行迭代训练,即当网络发生过拟合时停止训练;通过搭建的卷积神经网络首次训练后可以得到一个baseline模型,该模型的精度基本维持在0.8附近。将学习率缩小到0.000 1时,通过多次训练后,并经过50次epoch迭代可以得到如图8所示的结果。其中,纵坐标表示精度,左边图表示在训练集中的性能表现,右边图表示在验证集中的性能表现。为了验证学习率是否还会影响实验结果,通过实验发现,当学习率设为0.000 01,并冻结部分权重,经过多次模型微调训练后可以达到图9所示比较好的效果。通过数据表明,损失函数曲线和各精度评价指标分别平稳下滑和稳定上升,且经过多次调参后的模型精度能够达到一个相对baseline模型较高的水准。
图8 调参前不同迭代次数下的模型性能
图9 调参后不同迭代次数下的模型性能
在测试集上验证该模型时,可以得到如表2所示的结果。
表2 测试集中的模型性能评估
通过以上得到的训练模型,模型大小为232 M,在对测试样本的评估上,精度可以达到97%以上,通过滑窗采集测试图像的方式,每张图像在该网络下检测时间基本维持在200~400 ms之间。为了验证该卷积神经网络的有效性,本研究还进行了相同类型样本下的机器学习训练,如图10所示,采用SVM和KNN进行了多缺陷检测研究,在不同的惩罚因子C和Gamma值下,SVM分类器表现为不同的检测效果,随着C的增加精度将维持不变;在不同的邻域k下,KNN有不同的效果表现;两者的C和k都在一定范围内具有最佳表现性能,但精度都始终维持在80%以下,且样本量大的情况下,KNN算法非常耗时。针对该类型数据,在实际工程中,对于有无缺陷分类,SVM能够达到90%以上的检测效果,但在多分类中无法满足实际要求。对比机器学习算法,本文搭建的卷积神经网络在实际工程中实用性更强。至于存在少量误检的原因,是因为在本研究中,部分溅射缺陷和未焊满之间出现了误判,由于训练数据是人工标注的,某些溅射缺陷在焊缝周围飞溅的焊锡并不太多,也不是很明显,但在标注当中也是当成溅射缺陷标注的,导致对部分该类型缺陷进行了误判,所以分析结果时发现某些溅射缺陷被分为了未焊满。
图10 SVM和KNN下数据测试性能
针对激光工业板材焊件焊缝检测中,人工检测与传统视觉检测效率低下、无法满足质检要求等问题,本研究提出了基于卷积神经网络的焊缝表面缺陷检测方法。通过工业数控机床及工业相机采集钢板焊缝样本,对原始数据进行处理后进行训练,通过对参数及权重进行多次微调训练后,准确度可以达到97%以上,且复杂度低,能够满足实际产线的检测要求。实际检测中还可以在机床上通过机器轴和相机的配合,以滑动窗口的形式完成待测样本的采集,本研究还在机器学习算法上对该类型数据进行了验证,进一步表明本文研究的卷积神经网络模型在应用上的优势。对于模型的移植问题,可以通过权重剪枝方式来完成,这将是下一步的重要工作。