基于卷积神经网络的金属表面缺陷自动检测
2021-05-17张淇雅逄焕利
张淇雅, 逄焕利
(长春工业大学 计算机科学与工程学院, 吉林 长春 130012)
0 引 言
元器件质量是制造过程中的一个重要组成部分[1]。表面缺陷对工业产品质量和性能有着不利影响[2]。对于制造商来说,已经做了大量工作来检查表面缺陷和产品的质量控制[3-4]。但是为了满足日益增长的需求,在工业生产过程中,仍须在提高生产效率的同时,严格保证产品质量[5-6]。
近年来,基于机器视觉的表面缺陷检测方法由于能够克服人工检测精度低、实时性差、主观性强、劳动强度高等缺点,逐渐成为表面缺陷检测的一种趋势。这些基于机器视觉的检测系统出现在许多工业应用中,例如钢带检测[6]、液晶显示器(LCD)检测[6]、织物检测[6]、铝型材检测[6]、铁路轨道检测[6]、螺纹检测[7],食品检测[6]和光学元件检测[8]等。得益于计算机视觉的快速发展,上述挑战正逐渐在工业生产中得到解决。其它基于手工特征的方法被应用于工业检测中,如太阳能组件[9]、金属[10]、钢材[11]的缺陷检测,近年来取得了良好的效果。然而,这些方法都是人为地为特定缺陷设计一组特征,是不通用的。最近,基于深度学习的方法已经被证明在许多视觉任务中是有效的。深度学习利用非线性组合构建卷积神经网络(CNN)体系结构,通过改变网络的宽度和深度控制数据量,从而在大量图像中进行特征提取[12]。其统计稳定性和像素依赖性的局部特征提取已经被证明比人工设计特征更好。
目前,基于CNN的缺陷检测方法已广泛应用于工业缺陷检测中,通过设计不同的网络模型完成缺陷检测。对于低对比度问题,模型需要有效利用目标特征来区分目标和背景的差异。不同层次的CNN特征对目标有不同的敏感性。低层特征具有更高的分辨率,可以生成清晰、详细的边界,但上下文信息较少;高级特征具有更多抽象的语义信息,擅长进行类别分类,但形状和位置较弱。
Masci J等[13]采用多尺度金字塔池网络对钢材缺陷进行分类,可以适应不同尺寸的输入图像。Natarajan V等[14]提出了基于CNN的多层深度特征提取框架,通过转移学习来检测异常数据集中的异常。通过将深层特征与线性支持向量机(SVM)分类器相结合,设计了一种投票机制来克服过拟合问题。以上两种方法设计的深层网络结构主要是针对缺陷图像的分类任务而设计的,并且缺陷的位置没有被定位。Tian Wang等[15]提出了一种快速、鲁棒的自动质量视觉检测方法,利用传统带滑动窗口的CNN定位产品的损伤。Liu Z等[16]提出了一种基于深度卷积神经网络(DCNN)的检测系统,包括两个用于定位关键部件的检测器和一个用于诊断其状态的分类器。这些方法将表面缺陷检测问题转化为计算机视觉中的目标检测问题。缺陷定位通常是在一个边界框内[17],实际上并不代表缺陷的边界[18],也不能描述它的形状。
综上所述,文中开发了一种基于Faster R-CNN的结构损伤检测方法,用于检测裂纹、夹杂、斑块、麻点、划痕和滚压6种类型的表面损伤。利用类激活映射技术对缺陷区域进行定位,无需区域级人工标注[19]。基于以上理论的改进,文中对6种不同缺陷数据集进行大量实验,证明了该方法的有效性和通用性。主要贡献如下:
1) 介绍了一种基于深度学习的金属表面图像缺陷检测方法,证明了该方法具有一定的通用性和理论价值。
2) 介绍了一种基于像素级而非图像级或区域级的表面缺陷检测方法,同时,该方法的目的是检测和区分不同类型的缺陷,而不仅仅是突出图像中的显著区域。
3) 在训练过程中加入了迁移学习,以加快收敛速度。最后的框架在6个缺陷数据集上取得了优异性能。
1 材料和方法
1.1 数据集构成
与光滑表面相比,金属表面的照片容易出现光照不均匀[20-22]、反光强烈[23]、背景噪声[24]等问题,增加了检测难度。由于缺陷的复杂性,缺陷自动检测任务主要有三个方面的挑战:
1)低对比度[25]。在工业生产中,灰尘的存在和光强的变化导致图像中缺陷与背景的对比度较低。
2)类内差异[26]。与其他应用不同,在工业生产中,缺陷的形状是不规则的。
3)类间相似性[27]。由于生产过程的不确定性,一些不同种类的缺陷差别不大。
文中用于训练的数据来自于NEU-DET缺陷数据集,使用该数据集对所提方法的适用性和通用性进行了验证和评价。NEU-DET缺陷数据集是为解决热轧带钢自动识别问题而收集的标准化高质量数据库。数据集包括裂纹、夹杂、斑块、麻点、划痕和滚压6种类型的表面缺陷。该数据集图像采集的硬件配置主要包括光源和摄像头两个部分。光源提供照明以使缺陷可见。使用了四个区域扫描CCD摄像机。原始灰度图像的尺寸为1 024×1 024像素。为了节省后续部分计算时间,原始图像在下采样过程中执行,因此数据集将采样图像设置为200×200像素。每个原始图像的分辨率为200×200,每个类别包括300个具有紧密边界框注释的图像。部分NEU-DET原始图像和其存在问题区域的局部细节放大图像如图1所示。
Faster R-CNN是He Kaiming等[19]在2015年提出的一种目标检测算法,该算法自提出以来已经在许多领域得到了广泛应用。经典的RCNN检测算法使用选择搜索(Selective Search)方法生成候选框,而Faster R-CNN在此基础上提出了区域生成网络(Region Proposal Network, RPN),直接生成候选框,使得目标检测速度有了极大提高。Faster R-CNN网络采用VGG 16作为特征提取网络,该网络的模型结构如图2所示。
图1 部分NEU-DET原始图像和其存
1.2 目标检测模型
文中研究的Faster R-CNN网络对数据集中缺陷的检测过程如下:
1)使用特征提取网络VGG16对输入模型中的图像进行特征提取,所提取的特征图(feature maps)分别被用于RPN层和ROI Pooling层。
2)RPN网络作为第一部分用来生成候选框,通过激活函数softmax判断特征提取结果属于前景或者背景,即判断是否包含前景,再利用边界框回归来修正特征提取结果或者相对准确的候选框;ROI Pooling层作为第二部分把RPN网络生成的候选框缩放到相同尺寸送入全连接层。
3)经过全连接层后再通过分类函数计算出候选框的类别,同时再次对边界框进行回归,得到测试集图像中缺陷的精确位置。Faster R-CNN网络的整个检测过程如图3所示。
整体模型的关键特征参数见表1。
1.3 主要函数
1.3.1 激活函数
在卷积层将原模型的relu函数修改为leaky_relu,在keras框架中自带leaky relu定义,但是文中的leaky_relu也不同于程序自带的leaky relu函数,在该函数的基础上进行了微调。原始模型的激活函数relu属于线性整流函数,数学表达为
f(x)=max(0,x)。
(1)
作为神经网络的激活函数,其定义了线性变换wTx+b之后的非线性输出结果,即输出值为f(x)=max(0,wTx+b),以relu为激活函数,输入值x为负的时候,输出结果为0。但是relu可能导致神经元死亡。对于relu中(x<0)的激活,此时梯度为0,因此在下降过程中权重不会被调整。这意味着进入这种状态的神经元将停止对错误/输入的变化做出反应(仅仅因为梯度为0,没有任何变化)。这就是所谓的dying relu problem。平时使用时relu的缺点并不是特别明显,只有在学习率设置不恰当(较大)时,会加快神经网络中神经元的“死亡”。
leaky relu为带泄露线性整流,当输入值x为负的时候,其梯度为常数θ∈(0,1),不会判定为0,正值与relu一致。表达式为
(2)
选择leaky relu作为激活函数,对于叶片的边缘检测精度可以达到要求,但是模型分割效果不平滑,且虽然避免了输入值x为负数时判定取值为0的问题,但当学习率设置较低的时候,此激活函数特性需要增加大量训练次数。
1.3.2 损失函数
文中模型的损失函数主要由两部分组成,其中第一部分是分类损失,第二部分是回归损失,用于确定网络训练过程中的偏移量,两个部分函数的具体公式为
(3)
Ncls----网络训练过程中生成的256个检测框。
(4)
式中:ti----训练阶段预测值的偏移量;
λ----平衡回归损失和分类损失的参数。
图2 VGG16特征提取网络结构
图3 网络的整体目标检测流程
表1 Faster R-CNN的结构配置
续表1
1.4 迁移学习
文中使用的Faster R-CNN深度学习目标检测网络主要调用编码器中的VGG16预训练来构建,因此在训练过程中引入Imagenet的权重,对Faster R-CNN模型进行迁移学习训练。迁移学习是一种新的机器学习方法,它将来自相关但不同领域的知识应用于目标领域,旨在解决目标领域中几乎没有标签数据的问题[16]。文中因为输入图像的尺寸较小,可以看作是一种小样本数据训练问题,在训练过程中使用训练过的VGG16模型进行迁移学习可以更快地训练目标检测模型,有利于模型的快速收敛。
1.5 评价指标
为了使检验结果与其它检验方法相结合,分别对检验结果进行定量评价。分类模型通常采用总体精度(Accuracy)、召回率(Recall)以及F1-score作为评价指标。文中采用以上3个评价指标对模型的检测计数性能进行客观评估。各评价指标公式如下:
(5)
(6)
式中:TP----正阳性;
FP----假阳性;
FN----假阴性;
TN----正阴性。
(7)
1.6 训练配置
模型训练是在处理器为Intel(R) Xeon(R) CPU Gold 6 148×2、内存大小为256 GB、显卡为NVIDIA Quadro P6000 GPU硬件平台上完成的。在Windows 10操作系统下进行环境配置,Cudnn版本为7.4,Cuda版本为10.0,tensorflow版本为1.13.2。
选择随机梯度下降法(Stochastic Gradient Descent, SGD)来更新学习率,从而对网络进行训练。训练时将初始学习率设置为1e-4,迭代20次后学习率更改为1e-5。设置网络训练迭代次数为100个epoch,每个epoch训练2 000步。
2 结 果
2.1 目标检测模块性能
模型在100个epoch的训练迭代后完成了训练,训练过程中的损失曲线如图4所示。
图4 模型的训练损失曲线
训练完成模型输出的各种参数见表2。
表2 训练完成模型输出的各种参数
为了评估模型在数据集图像中缺陷检测的性能,比较了6种不同缺陷图像的检测性能。检测结果如图5所示。
图5 模型在测试集中的缺陷检测结果
从图5可以看出,模型对数据集中不同缺陷的图像均实现良好的检测效果。
2.2 分类模块性能
为了定量地评价文中描述方法的分类性能,利用多层感知器(MLP)进行了3次缺陷分类实验。MLP由隐藏层和输出层中的15个单元组成,输出层有3个输出变量。输入层数量由上述特征的尺寸决定。该优化算法在MLP中的最大迭代次数为1 000次。特征包括6个要区分的灰度级,并在共生矩阵中计算90°方向。第一次实验中灰度值的量化为8,第二次实验中过滤面具的尺寸为3.3。实验结果见表3。
表3 不同方法分类结果的性能比较 %
结果表明,基于机器学习的浅层特征提取方法的准确率仅为70%左右,文中方法则比这些方法高出15%以上,组合的浅层特征比单个特征稍有改善。
传统的机器学习方法通常需要设计特征来训练模型。然而,Faster R-CNN已经实现了端到端的训练,从特征学习到分类结果的直接输出。传统方法很难区分这两种类型的粉尘和损伤点。可能是因为它们的纹理和渐变信息非常接近,有时很难区分开来。然而,该方法能更好地区分损伤点和粉尘,损伤点的分类准确率可达84%以上。这可以解释为在工业场景中存在非常复杂的缺陷,仅靠纹理特征和梯度特征很难完全反映实际缺陷的特征。
3 结 语
提出一种基于深度学习的方法,可以在复杂的工业场景下准确地执行金属表面缺陷检测和分类任务。在此基础上,将缺陷检测问题转化为目标检测与分类问题。所提出的方法是一种在紧凑环境下快速获取缺陷的方法,利用NEU-DET数据集,检验结果准确率达到86.93%。可视化和定量实验结果表明,文中检测算法能够满足复杂工业要求的环境。此外,该方法无需多做修改,也可直接应用于其它工业材料的缺陷检测。
文中方法的一个局限性是深层网络训练需要人工标记数据,这需要大量的时间和费用。今后工作将包括减少使用半监督学习的数据标签,以及将该方法应用于更现实的检查问题,如手机屏幕的检查。