布申申,田怀文
(西南交通大学可视化研究所,四川 成都 610031)
带钢在生产过程中,因受制造工艺、环境等因素的影响,表面常出现划痕、裂纹等生产缺陷,不仅影响产品外观,还会影响产品性能,造成安全隐患和经济损失。传统人工目视抽检,依据先验知识估算带钢的综合质量,存在效率低、易受身体疲劳等因素的影响,不能满足现代化工业生产的需求。
国内外相继提出脉冲涡流[1]、机器学习等多种检测技术用于带钢表面缺陷检测。
脉冲涡流检测技术由于其信号处理困难、设备庞大等问题,难以推广应用;普通机器学习方法采用手工提取HOG[2]、SIFT[3]等低层特征,再用文献[4]分类器对特征进行分类,存在特征提取时间长、泛化能力低、检测精度低、速度慢等缺陷,无法满足实时检测要求。
随着计算机GPU计算能力的快速发展,深度学习的方法为解决带钢表面缺陷检测问题提供了新思路,文献[5]提出了一种缺陷检测CNN算法,解决了特征泛化性低问题,但该算法的输入图像为单通道,各层特征图尺寸过小,特征损失严重,检测精度低,文献[6]提出的半监督带钢表面缺陷分类方法,一定程度上解决了标签问题,但训练集和测试集中缺乏正样本,难以应用于实际生产线的实时检测,以上深度学习方法网络结构均采用普通Plain networks[7],网络的特征图利用不充分,网络深度增加时易产生梯度消失、梯度爆炸等问题,造成网络难以训练或精度不高。
针对以上存在问题,基于卷积神经网络,采用DenseNet[8]网络的密集连接算法,解决梯度消失和梯度爆炸的问题,采用堆叠式空洞卷积[9]扩大卷积核感受野,采用深度可分离卷积[10],减少网络参数量和计算量,提出一种用于带钢表面缺陷检测的轻量化深度神经网络模型Ds-DenseNet算法。
在训练VGG-Net[11]这样的深层卷积神经网络时,常出现梯度消失、梯度爆炸等问题,造成网络难以训练,GoogLeNet[12]和ResNet[13]的Inception模块和残差模块有效缓解了梯度问题,但这些网络的每一层仅学习该层的前一层或两层特征,对浅层特征图利用率低,网络学习性能不高。CVPR2017年提出的DenseNet其密集连接思想可以有效解决此问题。
DenseNet主要由其核心结构Dense Block和Transition layers结构交替连接而成,在Dense Block结构中,任意一层的输入是前面所有网络层特征图的并集,该层的特征图也会作为后面各层的输入,因此,Dense Block 加强了各层特征图的利用率,不仅可以有效解决梯度消失问题,还可以大大削减网络参数量。Dense Block的连接模式可以表示为:
式中:Xl—Dense Block 第l层输出;[X0,X1…Xl-1]—将特征图从X0到Xl-1进行拼接;Hl(·)—对拼接后的特征图依次进行BN、ReLU、1×1Conv、BN、ReLU、3×3Conv 操作。Transition layers结构用于降维,由BN、1×1Conv、2×2AveragePooling 操作依次连接构成。
浅层信息特征图像素的感受野对网络的性能影响很大,因此DenseNet网络的首层采用(7×7)大卷积核,但大卷积核参数量较大,因此本算法提取浅层网络特征时采用空洞卷积,在参数量较少的情况下,获得较大感受野,普通卷积和空洞卷积结构对比,如图1所示。
图1 普通卷积和空洞卷积Fig.1 Ordinary Convolution and Dilated Convolution
空洞卷积采用在卷积核权值间插入空洞(补零)的方法,增大卷积核感受野,两个权值间的空洞个数加1叫作空洞系数(Dilation rate),若f—原卷积核尺寸,dr—空洞系数,则其卷积核的有效大小Fdr的计算公式为:
如果步长为stride,卷积核尺寸为Ksize,则卷积神经网络第n层特征图每个像素的感受野RFn计的算公式[14]为:
由式(3)可知,卷积核多次堆叠可有效增大感受野,但多次堆叠Dilation Rate相同或非互质的空洞卷积,易产生部分像素未覆盖,造成Gridding Effect问题,因此本算法依次选择空洞系数分别为5、2、1,权重参数为(3×3)的空洞卷积进行堆叠,堆叠卷积效果,如图2所示。
图2 堆叠式空洞卷积Fig.2 Stacked Dilated Convolutions
为验证本算法中堆叠式空洞卷积的优越性,对其感受野和参数量进行计算,由式(2)可知,空洞系数为5、2、1的(3×3)空洞卷积核有效大小分别为:(11×11)、(5×5)、(3×3),由公式(3)可知,此堆叠式空洞卷积最终输出的特征图感受野为(17×17),参数量为(3×3×3),相比DenseNet的(7×7)卷积核,堆叠式空洞卷积不仅感受野大大增加,参数量也有所减少。
DenseNet 虽采用Dense Block、Transition layers 结构加强了各层特征图的利用率,但其卷积操作仍采用传统卷积,计算量和参数量十分庞大,本算法进一步采用深度可分离卷积对网络结构进行优化,其结构示意,如图3所示。
图3 深度可分离卷积结构Fig.3 Depthwise Separable Convolution
深度可分离卷积的结构可分为Depthwise和Pointwise,Depthwise指采用多个二维卷积组对输入特征图各通道分别进行卷积,其输出通道数与输入通道相等,采用(1×1)卷积核的Pointwise用于对Depthwise的输出进行维度变换处理。若输入特征图大小为(Hi×Hi×M),卷积核尺寸为(F×F),则传统卷积与深度可分离卷积的参数量,如式(4)和式(5)所示。计算量,如式(6)和式(7)所示,深度可分离卷积和普通卷积的计算量之比,如式(8)所示。
若Dense Block的卷积核大小为(3×3),输入通道64,输出通道16,分别由式(4)和式(5)计算可知,参数量分别为9232 和1680,普通卷积参数量是深度可分离卷积的5.4倍,计算量之比由式(6)可知,普通卷积计算量是深度可分离卷积的9倍,所以应用深度可分离卷积优化DenseNet网络的密集连接算法,可大大降低其参数量和计算量。
结合以上优化算法,提出参数量更少,计算量更小,空间复杂度更低的Ds-DenseNet模型,具体的结构,如图4所示。
图4 Ds-DenseNet网络结构Fig.4 Structure of Ds-DenseNet
本算法整体可划分为Entry、Middle、Dense、Exit 四个模块,Entry模块由两个Conv-pool、三个空洞率为5、2、1的空洞卷积层和一个3×3最大值池化层堆叠而成,Conv-pool用于提取细粒度特征和降维处理减小网络计算量,堆叠式空洞卷积提取大特征,Middle 模块由两个Sep-DB-Sep-TL 结构循环构成,其中,每个Sep-DB有6个循环concat结构,Dense模块由1个Sep-DB构成,有12 个循环concat 结构,Exit 模块包含两部分,全局平均池化(GAP)[15]层和分类层,最后网络输出6维向量,经过Sofmax激活进行分类输出。
Sep-DB 结构的具体构成,如图5(a)所示。在DenseNet 的Dense Block结构基础上,采用普通卷积和深度可分离卷积优化,并在Dense Block的Depthwise和Pointwise卷积后依次添加Dropout-BN-ReLU处理。
图5 Sep-DB和Sep-TL结构Fig.5 Sep-DB and Sep-TL Structure
Sep-TL 具体结构,如图5(b)所示。该结构在DenseNet 的Transition Layers 基 础 上,将Transition Layers 结 构 中BN-1×1Conv-2×2AveragePooling 的1×1Conv卷积结构采用深度可分离卷积优化,并对Depthwise的输出数据进行Dropout-BN-ReLU处理,对Pointwise卷积后的数据进行BN-ReLU处理。
分别采用‘mdr’表示空洞率为m的空洞卷积,‘nConv’表示BN-ReLU-卷积-Dropout组合,其中n表示卷积核的个数,采用‘[]×d’表示Sep-DB 中迭代concat的次数。则Ds-DenseNet 的各层网络具体参数,如表1所示。
表1 Ds-DenseNet网络参数Tab.1 Parameters of Ds-DenseNet
采用NEU表面缺陷数据集[16]中的5种带钢表面缺陷图片作为缺陷样本,每种缺陷图片各300张,分别为裂纹(Cr)、表面夹杂(In)、斑块(Pa)、磨花(Rs)和划痕(Sc),NEU 数据集缺少正样本,通过实验获取300张合格带钢(Qs)图片用作正样本,加入NEU数据集作为基础数据集。
带钢正常样本及五种表面缺陷的样本图片,如图6所示。每张图片分辨率为200×200,由图可知对带钢表面进行缺陷分类具有以下难点:
图6 基础数据样本Fig.6 Basic Data Sample
(1)类内差异:同类缺陷存在明显类内差异,比如斑块大小、划痕方向、图像亮度、饱和度等。
(2)类间相似:异类缺陷存在类间相似,比如裂纹和磨花表面,夹杂和划痕表面等。
Ds-DenseNet的训练及工作过程,如图7所示。分为数据采集,数据增强,数据标准化处理,网络训练,网络测试,缺陷检测几个部分:
图7 算法训练及工作流程Fig.7 Algorithm Training and Working Process
(1)通过实验采集正样本,裁剪成相应尺寸后加入NEU数据集作为基础数据集。
(2)将每种样本图片随机选取220张用作基础训练集,通过90°、180°、270°旋转变换进行数据增强操作,剩余80张样本图片用作测试集,然后分别转换为TFrecord 文件,制成AUG-NEU 数据集。
(3)样本图片输入网络训练之前,对各通道的像素值进行标准化处理:
式中:Xstd—标准化后的图像矩阵;X—原图像RGB三通道像素矩阵;μ—像素均值;σ—图像像素的标准差;N—像素个数。
(4)学习率采用指数衰减法进行动态更新:
式中:λ0—初始学习率;n—迭代次数;ε—衰减系数;λn—第n次迭代的学习率;θ—衰减步长。
(5)为预防网络过拟合,需对可训练参数进行Dropout处理,如图8所示。其主要思想是稀疏网络,每一轮训练时随机设定一部分神经元节点不参与训练,减小网络训练参数对训练集的过度依赖,增强网络泛化能力。
图8 Dropout结构Fig.8 Dropout Structure
(6)采用交叉熵损失函数计算分类损失,选用Adam 优化器迭代优化。损失函数表达式如下:
式中:y(i)—第i种类别期望的概率—第i种类别预测的概率;Loss—损失函数。
为了准确显示对比实验结果,本算法所有对比实验均在同一台计算机上进行训练与测试,CPU采用Intel Core i7 8700,GPU采用RTX2080,运行内存为DDR4 3200MHz 32GB,Ubuntu16.04 操作系统,使用Python、OpenCV进行数据处理,深度学习框架采用Tensorflow。
为验证Ds-DenseNet算法网络性能的优越性,将本算法与主流分类算法GoogLeNet、ResNet、DenseNet和现有带钢表面缺陷检测算法文献[5-6]进行对比实验,六组实验均在AUG-NEU数据集上进行训练和测试,超参数设置及软硬件环境均相同。初始学习率设置为0.001,学习率衰减步长为500,学习率衰减周期为50,Ds-DenseNet的Dropout系数设置为0.4,mini batch设置为32,165个mini batch 为一个eopch,训练迭代50 个eopch。六种网络在AUG-NEU的测试集上精度曲线对比结果,如图9所示。
图9 各算法测试精度对比曲线Fig.9 Test Accuracy Curve of Each Algorithm
由图可知,六种网络对于AUG-NEU数据集的训练精度均在8个eopch之后趋于稳定,Ds-DenseNet算法识别精度最高且最稳定,DenseNet次之,然后分别是ResNet、GoogLeNet、文献[6]、文献[5]算法。
将Ds-DenseNet算法与其他几种算法的网络性能进行对比分析,综合参数量、计算量、识别速度和识别精度4方面因素,对比结果,如表2所示。6种算法中Ds-DenseNet 算法综合性能指标最强,识别精度最高,达到99.38%,参数量最小,分别占DenseNet121、ResNet50、GoogLeNet、文献[6-5]参数量的1.7%、0.5%、1.9%、1.1%、30%,识别速度达到1.3ms/frame,是DenseNet121 的2.3倍,ResNet50的2倍,完全可以满足带钢表面缺陷生产线实时检测的需求,相对于文献[6-5],本算法计算量虽有所增加,但识别精度大大提升。
表2 各网络性能参数对比Tab.2 Comparison of Network Performance Parameters
文献[5]和文献[6]算法分类精度较低,不做详细精度对比,其它4种算法对带钢表面缺陷检测的具体分类精度对比结果,如表3所示。Ds-DenseNet算法在AUG-NEU数据集上仅对Cr和Rs缺陷识别有误,其精度分别为98.75%和97.5%,通过计算可知,Ds-DenseNet算法在AUG-NEU 测试集480张图片中,仅有3张样本识别错误,1张Cr样本,2张Rs样本。
表3 各算法具体分类精度对比Tab.3 The Classification Precision of Each Algorithm
针对现有带钢表面缺陷检测算法识别精度低、特征泛化性不强、算法参数多、计算量大等缺陷,基于卷积神经网络,提出一种用于带钢表面缺陷检测的深度神经网络模型Ds-DenseNet算法。采用密集连接方式,解决深层神经网络易发生梯度消失、梯度爆炸而难以训练的问题,采用堆叠式空洞卷积增大卷积核感受野,同时提取大尺寸特征和细粒度特征,采用深度可分离卷积,解决模型参数量多,计算量大的问题。综合考虑识别精度、参数量、计算量、检测速度4 个方面,Ds-DenseNet 算法的识别精度高达99.38%,参数量为117958,仅占DenseNet121、ResNet50参数量的1.7%、0.5%,识别速度高达1.3ms/frame,分别是DenseNet121、ResNet50识别速度的2.3倍和2倍,完全可以满足带钢生产线实时性检测的需求。