改进的VGG网络的二极管玻壳图像缺陷检测
2020-01-19刘桂华
杜 超,刘桂华
(西南科技大学信息工程学院,四川 绵阳 621000)
玻壳作为二极管封装的重要材料因其良好性能被广泛应用[1]。区别于一般的玻璃检测方法[2-3],目前二极管玻壳缺陷检测方法主要分为人工检测法、图像识别法和机器学习法。采用人工检测的方法,不仅效率低,劳动强度大,而且检测精度差,难以满足生产需要。图像处理方法[4]一般都是基于阈值分割,操作简单,存在准确率不高和自适应性能差问题。
机器学习的方法进行缺陷检测中有LI等[5-6]开发了一种高度稳健的估计器,称为模型拟合(model fitting,MF)估计器[7]。ZHAO等[8]提取玻璃中比较大的气泡边缘的直方图特征,使用自适应提升算法(adaptive boosting,AdaBoost)进行分类,可以达到88.89%的准确率。冯小波等[9]利用小波共现提取特征,通过主成分分析(principal component analysis,PCA)降低特征的维数,并且选择3种不同方法之间的最佳分类器:包括分类和回归树(classification and regression trees,CART),多层感知器(multi-layer perception,MLP)和支持向量机(support vector machine,SVM)。在训练SVM和MLP分类器时,使用模拟退火算法来获得分类器的最佳调整参数,将缺陷识别准确率提升到89.5%。牛乾等[1]使用BP(back propagation)神经网络,通过对二极管玻壳灰度、不变矩、纹理特征提取,然后使用多层感知机神经网络对缺陷进行分类检测,得到了91%的精确率。虽然使用机器学习算法可以达到较高的识别率,但是其不足之处是需要进行分割和人工提取特征,识别精确度很大程度上会依赖于所输入的特征的准确性以及所设计出的特征量维度,识别难度比较大,而且容易陷入“降维诅咒”[10]。
针对于以上问题,分析传统的二极管玻壳图像缺陷检测的缺点,为了进一步提高缺陷的识别率,提出了一种基于VGG-19(visual geometry group-19)网络的二极管玻壳图像检测方法,并在此基础上进行改进。VGG神经网络曾赢得了ILSVR(ImageNet)2014年的冠军,具有良好的模型迁移能力[11],采用制作的二极管玻壳图像进行实验验证,实验结果表明,相比于传统的检测方法,该方法大幅度提高了二极管玻壳缺陷检测的准确率。
1 数据集获取与系统设计
1.1 二极管玻壳数据集获取
采集图像主要分为4种缺陷:裂纹、破壳、污点、无缺陷。每一种采集样本700张,总共2 800张图片,训练集每种500张,总共2 000张;测试集每种200张,总共800张,其次采集100张包含多种缺陷样本作为测试集使用,最后通过训练得出最佳模型并保存,图1为采集的部分样本图像。
1.2 系统流程设计
传统的玻壳检测都是通过手工提取特征,再进行分类,而卷积神经网络(convolutional neural networks,CNN)作为一种新的图像检测方法不需要手工提取特征,通过卷积与池化等操作不断逐级加深特征的提取。传统的机器学习和本文的缺陷检测流程如图2所示。
图2 本文系统整体流程图
在图2(a)中所示为传统的分类检测,其流程主要包含:二极管玻壳图像预处理、图像缺陷特征提取、分类器选择、分类检测,其中特征提取的好坏直接影响缺陷检测的识别率。而基于CNN检测的主要流程(图2(b)),其主要分为2部分:①进行玻壳图像预处理,②进行分类识别。
分类识别也包含2大步骤:①大样本集训练的VGG-19网络模型(如图3所示),得到VGG-19预训练模型[12-13]。②重新调整网络的全连接层结构的层数以及单元个数等超参数,迁移训练好的VGG-19网络模型的权重参数入固定层,改进层使用玻壳图像进行训练,训练完成后得到改进模型。
最终使用改进模型进行缺陷种类的识别。
图3 VGG-19网络结构
2 玻壳图像缺陷检测方法
2.1 玻壳图像预处理
由于采集的玻壳包含大量噪声,并且玻壳在整张图片的位置是不确定的,因此需要对玻壳图像进行预处理,主要包括:
(1)模板匹配:去掉除二极管以外的部分;
(2)滤波:使用自适应中值滤波去除噪声;
(3)增强:使用线性增强图像缺陷。
预处理效果流程如图4所示。
图4 二极管玻壳图像预处理
2.2 卷积神经网络(CNN)
VGG-19[14]的CNN模型如图3所示,相比其他网络模型具有以下特点:
(1)在卷积层使用更小的滤波器尺寸和间隔。VGG-19模型共有19层,其中连续卷积层的深度最多达到4层,不仅网络较AlexNet更深,而且都采用3×3的卷核作为滤波器。此种连续小模板的卷积核比单个大的积核具有更好的非线性,具有隐式规则的作用。
(2)将图片进行多尺度化训练与测试。对原始图片进行等比例缩放,保证图片短边大于 224,然后再图片上随机提取224×224窗口,进行训练,多尺度方法可以更好地识别缺陷。如图所示,VGG-19卷积网络模型有19个权重层,其中包含了16个卷积层和3个全连接层。输层需要将输入的图像调整到3×224×224,隐层结构中2层或4层卷积层相互堆叠。中间层的池化采用2×2步长为2的结构进行特征降维,全连接层为3层具有多层感知机(multi-layer perception,MLP)的结构。最后将输出到具有1 000个标签类的SoftMax分类器进行预测概率排序,从而选出具有最大概率的类别标签作为分类的结果。
激活函数的选择上使用了线性整流函数(rectified linear unit,ReLU),其表达式为
当x≥0时,梯度恒为1,无梯度耗散问题,收敛快,增大了网络的稀疏性。当x<0时,该层的输出为0,训练完成后为0的神经元越多,稀疏性越大,提取出来的特征就越具有代表性,泛化性能越好。
2.3 VGG-19改进模型
在VGG-19的基础上对网络模型的全连接层进行了改进,并且在训练中通过调节固定层的深度,使模型在泛化性和检测精度上得到最大地提升,其改进的模型机构如图5所示。VGG-19固定有3个全连接层其神经元,个数为4096×4096×1000,使用4类标签SoftMax分类层替换原有网络中的分类层,同时使用ReLU作为激活函数。
VGG-19的预训练模型是通过 ImageNet数据库中的1 000种类别的图片数据集训练而成的,可以分类1 000种类别的图像并且错误率为7.3%,因此具有较强的分类图像特征学习能力。将其部分参数与权重迁移到二极管玻壳缺陷的特征提取中,可以避免使用大量数据集重新训练整个网络,减少了训练时间和提高了训练效率,利用训练好的VGG-19模型参数优化改进网络的参数,有利于二极管玻壳图像识别。
图5 改进模型整体流程图
如图5所示,将VGG-19与训练模型参数迁移到二极管玻壳图像识别模型的部分卷积层和池化层,其主要流程如下:
(1)采集二极管玻壳数据集,挑选出需要识别的类别图像,作为训练集与测试集使用。
(2)采集的玻壳图像包含大量噪声,在输入模型之前需要进行滤波、去噪、增强等预处理操作。
(3)建立改进模型,调节超参数。
(4)训练改进模型。
(5)使用测试集,测试和验证模型。
3 实验结果与分析
本实验的深度神经网络搭建在Tensorflow深度学习框架上,并采用基于 Python语言编程实现;硬件包含台式电脑,英特尔酷睿i7 7700 k处理器,12 G内存,显卡为NVIDIA GeForce GTX 750 Ti。
3.1 改进网络超参数调节
(1)全连接层层数和单元数确定。VGG-19全连接层为固定的3层结构为4096×4096×4,首先对全连接层进行改进,设定全连接层为2层,网络层结构为a×4(a为首层单元数)。分别设a为512,1 024,2 048,3 069,4 096。实验结果如图6所示,对第2层全连接层的超参数进行设定,第2层全连接层结构为4096×b×4(其中b为第2层单元数)。此时分别设定b为0,100,1 024和2 048,当第2层单元层设定为0时收敛最快而且稳定。由以上实验得出最佳的全连接网络层为4096×4。
图6 全连接层首层单元个数设定
(2)固定层层数确定。在训练中固定层的参数可以改善和优化新的模型,非固定参数层通过新的数据集进行训练可以提高模型的泛化能力和模型的检测精度。
VGG-19共有25个权重层,设定最小的固定层数为17,测试效果如图7所示,可以看出固定层数为19和20的时候测试的准确率曲线波动最小。并且固定层数设定为20的时候迭代次数在1 000以后波动是最小的,因此网络设定固定层为前 20层,20层以后的权重层作为玻壳数据集训练时的权重参数修改层。
3.2 改进模型训练与测试
(1)全连接层层数和单元数确定。浅层网络主要是提取玻壳缺陷的颜色、纹理、边缘等细节信息,如图8(a)和(b)所示。随着网络越深,提取到的特征更加抽象,更加具有分类能力,如图8(c)和(d)所示。
图7 固定层深度对准确率的影响
图8 不同卷积层对玻壳图像特征提取的结果
(2)准确率曲线和损失曲线。将采集的 2 000张二极管玻壳图像数据集对改进模型进行训练,800张进行测试,二级管玻壳图像分辨率分别缩放用来测试分辨率对准确率和损失函数的影响,再将数据集进行增强,用来测试增强数据集对准确率和损失函数的影响。
分别使用分辨率为 128×128,256×256以及661×601的不同像素尺寸进行检测,使用 30°旋转角度,左右尺寸曾加0.2倍,然后进行随机剪裁增强数据集。测试的准确率曲线和损失曲线如图9和图0所示,可以看出随着分辨率的增加准确率函数变得越来越稳定,但是依然有部分波动很陡峭,当使用数据增强后准确率函数和损失函数曲线变得更加平滑,测试效果最好。
3.3 对比实验
为了研究改进模型的性能,对二极管玻壳图像进行对比实验:①通过提取特征使用传统分类器进行缺陷分类如 SVM,AdaBoost,MLP等[12,15];②分别使用AlexNet,GoogLeNet[16]和VGG-16的CNN进行测试。
图9 准确率函数曲线
图10 损失函数曲线
在机器学习中需要提取特征作为输入,首先求玻壳图像缺陷的灰度共生矩阵,利用共生矩阵h获得图像的对比度、能量、相关性、逆差矩等特征和求灰度均值、灰度方差、偏度、峰度、灰度熵等特征作为图像灰度特征的描述,以及纹理特征与不变矩特征一起作为总的特征。为了解决尺度不变性问题,再将这些特征在3个尺度下分别求取,获得特征共140维。将特征作为输入分别输入到高斯混合模型(Gaussian mixture model,GMM),K 最近邻(k-nearest neighbor,KNN),SVM,决策树(random forest,RF),AdaBoost,Bayes和 MLP 进行分测试,效果见表1。
表1 传统特征分类准确率对比(%)
由表1可以看出,AdaBoost和BP网络效果最佳。但由于手工提取特征的限制很难做到更好。对于CNN,使用卷积模块进行特征提取,弥补了人工提取特征的缺点。并且卷积网络提取的特征更加全面,且网络越深提取特征也更加抽象,更具有分类能力,同时池化可以优化和降低特征维度。
为了验证改进的CNN的性能,通过AlexNet,GoogLeNet和VGG-16进行验证对比。对比效果见表2。可以看出CNN比传统网络将准确率提高了至少 5%,改进网络相比准确率提高到了 98.3%,效果最佳。
表2 改进网络与其他CNN分类精度对比(%)
调用已训练好的模型进行单张测试,当使用机器学习方法检测一张玻壳缺陷图片需用0.141 3 s,而在GPU(2 G内存)下调用深度网络模型测试一张玻壳缺陷图片需耗时0.426 2 s,虽然在该实验平台上使用机器学习的方法检测速度比深度学习的方法快,但是调用深度模型进行检测基本上也能满足工业检测的要求,且检测的准确率有很大的提升。
4 结束语
由于传统的机器学习算法固有缺陷[10]使得在玻壳缺陷检测上不能达到很高的识别率,因此使用自动提取特征的卷积网络进行检测,通过使用VGG-19模型进行迁移学习,大范围提高了玻壳缺陷检测的准确率,并在此基础上进行改进,改变网络结构,进一步提高了识别率。
本文只针对二极管玻壳中的裂纹、污点、破壳和无缺陷4种类别进行了研究,在网络模型的选择和结构改进过程也只使用了有限的模型和改进机制进行对比实验,后期的工作需要增加样本数据集和扩大样本种类。并且使用其他种类模型和改进网络方法进行改进和测试,进一步提高检测的效果。