基于CNN的带钢表面缺陷检测
2019-04-28杨延西
杨延西,赵 梦
(西安理工大学 自动化与信息工程学院,陕西 西安 710048)
0 前言
钢铁行业作为制造业的支柱性产业,近些年来得到了快速发展,带钢作为钢铁行业的重要产品之一,已经涉及生产制造、航空航天、国防科技等诸多领域[1]。带钢表面质量严重决定了最终的产品性能,现已成为国内外竞争的关键性指标,所以检测带钢表面缺陷、提高带钢表面质量具有重要的现实意义。
文献[2]提出一种基于视觉注意机制的钢板表面缺陷检测方法,利用高斯滤波器,Gabor滤波器和交叉尺度缩小、交叉尺度加法和归一化等计算建立了钢板表面缺陷检测模型。但是该方法不具鲁棒性,且速度较慢。刘坤等人[3]设计一套基于机器视觉技术的带钢表面缺陷检测系统,主要包括视觉传感系统、计算机系统、电气系统、软件系统及机械辅助设备五部分,可以对带钢加工质量和过程信息进行自动获取、表达、传递、分析。文献[4]提出一种基于AdaBoost分类器的带钢表面缺陷研究,通过自适应中值滤波方法,有效保存图像细节;采用Canny算子强化缺陷图像边缘特征;再进行纹理特征提取,利用PCA-ReliefF算法进行特征选择,最终通过AdaBoost分类器进行缺陷识别。
传统的带钢检测主要靠人工肉眼检查,过于依赖质检人员的主观意愿,从而降低检测的可信度[5]。现如今,互联网、大数据、科学技术等的飞速发展,为智能制造提供了动力引擎,智能制造是一种由智能机器和人类专家共同组成的人机一体化智能系统,在制造过程中能够进行智能活动。智能制造日益成为未来制造业发展的核心内容,呈现出智能化、模块化、高度集成化的发展趋势。智能制造作为工业4.0的核心,也就是实现动态配置的生产方式。工业4.0战略率先由德国提出,其根本目标就是通过构建智能化网络,推动工业生产制造进一步由自动化向智能化升级,他们认为制造业的未来只能通过智能化的生产来创造价值。毫无疑问,作为制造业的支柱性产业,钢铁行业将逐步走向数字化,最终实现智能化[6-8]。
随着计算机的普及,硬件设备性能的提高,深度学习又一次在业界被广泛提及,因其能在传统的识别任务上显著提高准确率,彰显出高超的处理复杂任务的能力[9]。许多领域的学者尝试利用深度学习来解决实际问题,其中卷积神经网络(CNN)被广泛应用于故障诊断、缺陷检测、图像识别这一领域中[10-11]。本文提出一种基于CNN的带钢表面缺陷检测系统,通过构建卷积神经网络框架,逐层提取带钢表面特征,依赖于计算机,提高缺陷检测的准确性,逐步实现智能化检测。
1 表面缺陷检测方法
深度学习模型主要包括循环神经网络模型(Recurrent Neural Network,RNN),长短期记忆网络(Long Short-Term Memory,LSTM),生成式对抗网络(Generative Adversarial Networks,GAN),卷积神经网络模型(Convolutional Neural Network, CNN)等。其中,RNN是一类用于处理序列数据的神经网络,主要应用于语音识别领域;LSTM是一种时间递归神经网络,适合于处理和预测时间序列中间隔和延迟相对较长的重要事件,主要应用于机器翻译领域;GAN是近年来无监督学习最具前景的方法之一,模型通过至少含有生成模型(Generative Model)和判别模型(Discriminative Model)两个模块的互相博弈学习产生好的输出,主要应用于图像生成,如超分辨率任务,语义分割等[12];CNN是一种前馈神经网络,基本结构主要包括两层,分别为特征提取层和特征映射层。由于权值共享的特殊结构,CNN在图像处理方面有着独特的优越性,其布局更接近于实际的生物神经网络,典型CNN网络结构图如图1所示。
图1 CNN网络结构图
本文通过图像处理,对带钢表面进行缺陷检测,采用CNN模型,主要包括输入层(input)、卷积层(convolution)、激活函数层(Relu)、池化层(Pooling)、局部响应归一化层(lrn),全连接层(fc),drought层,输出层(output)。基于CNN的带钢表面缺陷检测网络层级结构示意图如图2所示。
图2 网络层级结构示意图
图2所示为一个六层神经网络,其中,input:输入层,输入数据为128×128×3的原始数据;Conv1+Relu:第一卷积层:卷积核为3×3×64,步长为1,padding=‘SAME’,激活函数为Relu,通过这一层得到的输出为:128×128×64的图像数据;卷积过程如式(1)所示。
(1)
n×n为卷积核大小,w为权值,b为偏置,x为对应位置上的像素值,y为输出值,再将该输出值y输入激活函数Relu中,如式(2)所示。
(2)
式中,f(x)为特征图像对应的像素点的值。
Pooling1+lrn为第一池化层:卷积核为2×2,步长为2,通过这一层得到的输出为:64×64×64的图像数据;池化之后,执行lrn()操作,局部响应归一化,有利于提高训练过程中的准确度。
Conv2+Relu为第二卷积层:卷积核为3×3×16,步长为1,padding=‘SAME’,激活函数为Relu,通过这一层得到的输出为:64×64×16的图像数据。
Pooling2+lrn为第二池化层:卷积核为2×2,步长为2,通过这一层得到的输出为:32×32×16的图像数据;池化之后,执行lrn()操作,局部响应归一化,有利于提高训练过程中的准确度。fc1+Relu为第一全连接层,128个神经元,将上一层中的输出reshape为一行,激活函数为Relu。完成之后,执行drought操作,即在深度学习神经网络训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃,是防止过拟合,提高效果的一种手段。
Fc2+softmax为第二全连接层,将上一层得到的1×1×128的列向量转换成2个类别打分。此处使用TensorFlow提供的tf.softmax_cross_entropy_with_logits函数,可以直接对Logit定义交叉熵损失。交叉熵刻画的是实际输出(概率)与期望输出(概率)的距离,即交叉熵的值越小,两个概率分布越接近,如公式(3)所示。
H(p,q)=-∑xp(x)logq(x)
(3)
其中,p为期望的输出,q为实际的输出,H(p,q)为交叉熵。
反向传播阶段使用自适应矩估计(Adaptive Moment Estimation,Adam)[13]进行优化,Adam是一种自适应学习率算法,对每一个参数都计算自适应的学习率。Adam相比较于其它自适应算法,在实际中的表现更具优势。
2 实验过程及结果分析
典型带钢表面图像如图3所示。
图3 带钢表面图像
所以本文利用MATLAB对原始图像进行镜像和旋转变换,以达到扩充样本的目的,变换后的带钢表面图像效果如图4所示。
图4 图像变换
本次实验总共包含1776张带钢表面图像,其中缺陷图像为1392张,无缺陷图像为384张。将这1776张图像作为原始数据,制作Tfrecords,读取Tfrecords数据,获得image和label,并保存相应的数据,作为后续训练的inputdata。
对inputdata进行image和label的分类制作,同时对输入数据进行batch处理,以获得image_batch和label_batch。
建立CNN神经网络模型,主要包括4部分:定义模型(def inference())、定义好坏标准(def loss())、定义算法,挑出好的标准(def train())、定义输入数据(def input()),模型建立完成之后,进行训练与测试。
本次训练在Intel Core i5-7300HQ,内存为8GB的CPU平台上进行,采用TensorFlow框架,利用python语言完成。训练过程中,选取1420张图像作为训练样本,(包括缺陷图像1114张,无缺陷图像306张),余下的356张图像作为测试样本,(包括缺陷图像278张,无缺陷图像78张)。
实验过程中,设置总迭代轮数为1000,调整batch_size以及学习率(learning_rate),进行测试,本文中batch_size分别取10、20,学习率分别取0.001和0.0001,得到的结果如表1所示。由表1可知,batch_size为10,学习率取0.0001时,模型的效果最好,准确率最高。在该模型下,对356张样本图像进行测试,每一张测试图像输出的最大概率均与其标签一致,部分测试结果如表2所示,可以看出,该模型准确率为100%,未发现误差,相较于文献[5]所涉及的方法,有了较大的提升。
表1 各参数对模型准确率的影响
表2 测试结果
3 结束语
本文提出一种基于CNN的带钢表面缺陷检测算法,引入深度学习知识,通过建立CNN模型,制作数据集,实现了对带钢表面缺陷的自动提取与检测。实验表明,本文所提出的方法具有较高的准确率,能够满足工业生产方面的要求。另外,该方法对于其它实物也可以进行类似检测,具有一定的通用性。为紧跟工业4.0:智能制造的脚步,下一阶段的主要任务是实现对检测出的有缺陷带钢表面图像进行自主的缺陷识别与分类,以达到更加高效、智能的目的。