吴华运,任德均,付 磊,郜 明,吕义昭,邱 吕
(四川大学机械工程学院,四川 成都 610065)
随着现代工业技术的快速发展,注塑空瓶在生产效率上有了巨大的提升,然而效率的提高也带来许多的产品质量问题。注塑空瓶在生产制造过程中会出现诸如瓶身划痕、缺料、孔洞、砂眼、污渍等缺陷,如图1所示。这些缺陷不仅会影响产品外形包装的美观,而且还会影响产品的销售和使用。因此,对瓶体表面进行缺陷检测,有着重要的意义。传统的检测往往由人工来完成,工作量大、劳动强度高,容易受到检测人员主观因素的影响,存在检测效率和检测精度低等缺点。基于机器视觉的检测技术由于检测精度高、速度快等优点已经被应用在瓶体表面缺陷检测领域。
图1 空瓶表面不同缺陷类型
在过去的几年中,传统的缺陷检测算法已经被广泛应用于工业产品质量检测。然而,传统检测算法多基于手工特征提取的方法,特征提取算子提取的特征通常处于较低水平,在针对复杂的场景变化,如光照变换、透视失真、遮挡、物体变形等情况下,所提取的特征通常很难用于缺陷分类和识别,因此许多算法在实际环境中并不适用。
深度学习,特别是卷积神经网络,其特征提取器和分类器可以从输入图片本身进行端对端的训练。与传统表面缺陷检测算法相比,深度学习目标检测算法可以通过卷积神经网络对瓶体缺陷图片进行学习,自动地从图像中提取缺陷的特征,具有学习能力强且识别精度高、速度快等众多优点。深度学习目标检测算法可以分为2类:1)基于区域的目标检测算法,如Faster R-CNN[1]、Mask R-CNN[2]等RCNN系列检测算法,该类算法检测精度高,但速度较慢,无法满足实时检测的需求;2)基于回归的检测算法,如YOLO[3]、SSD[4]等算法,这类算法检测精度不如第一类,但检测速度快,可以满足实时检测的需求。
本文以基于回归的SSD算法为基础,将瓶体图片中的缺陷作为检测目标,在SSD算法的网络模型中引入了注意力机制模块,提高特征图之间的通道依赖性,设计尺度特征融合模块,增加特征鲁棒性,扩大特征图的感受野,有效提高了检测精度。本文研究主要包括:
1)首次将深度学习目标检测算法应用于注塑空瓶表面缺陷检测领域,并取得远高于传统机器视觉算法的精度。
2)设计特征融合模块。实现将高层语义特征和低层细节特征相融合,提高特征鲁棒性;引入膨胀卷积操作,有效地扩大了特征图的感受野。
3)在残差网络瓶颈模块中引入注意力机制模块,建立特征图远程依赖关系,增强特征提取能力,从而提高检测精度。
卷积神经网络已经被验证是有效的端对端的解决方案,可以解决各种视觉任务,例如检测[5]、分割[6]、目标跟踪[7]、风格迁移[8]等。目前,卷积神经网络已经被广泛地应用于各种缺陷检测算法中。文献[9]提出了一种基于神经网络的工件缺陷检测算法,作者结合卷积神经网络的特点,仿照目标检测网络YOLOv3[10]提出了一种基于卷积神经网络实现的端到端检测分类器,并完成连铸方坯缺陷的识别与分类实验。文献[11]提出了对Faster R-CNN网络模型进行优化与改进,然后采用优化与改进后的网络模型对铁轨表面缺陷进行检测研究,最终能够精确且高效地检测到铁轨表面缺陷。文献[12]提出了一种基于正样本训练的新型缺陷检测框架,该框架将GAN[13]和自动编码器结合起来用于缺陷图像重建,并使用LBP[14]进行图像局部对比以检测缺陷。文献[15]提出了结合选择搜索和卷积神经网络的区域提出方法的两阶段算法,它可以检测并识别感兴趣区域,完成对胶囊表面缺陷检测。这些文献均使用深度学习卷积神经网络来解决工业产品表面缺陷检测任务,并取得了较好的检测结果。针对空瓶检测领域,本文使用深度学习目标检测算法对空瓶表面缺陷进行检测和识别。
SSD算法是一种基于回归的端对端的目标检测算法,它在YOLO的基础上加入了Faster R-CNN的anchor机制,在检测性能上高于YOLO的检测精度和Faster R-CNN的检测速度。在网络结构上SSD使用了VGG16[16]作为网络的基础结构,用来对整幅图片进行特征提取,并在VGG16网络后加入新的网络层。每个特征层的尺度是不一样的,以便后续做多尺度特征提取。
SSD算法网络将经过预处理后瓶体缺陷图片缩放至512×512,然后送入卷积神经网络进行推理,根据网络模型的输出结果对缺陷进行分类和定位。相比于YOLO对原始图片划分栅格,SSD依次对特征图上所有的点做处理,以每个特征图上对应坐标的特征向量为预测目标。针对不同尺度的特征图,不同尺寸的目标,对于每个特征图上的点重新设计了多重特征提取框。SSD在每个特征图上的坐标点设置了6个不同尺度的默认框,然后根据这些默认框来提取特征,并将这些特征用来预测目标的类别和边界框。SSD使用3×3的卷积核来提取每一个默认框中的特征,每一种特征用到的卷积核为3×3×6×(class+4),其中,6为特征图坐标点上默认框的个数;class为检测目标的类别数,在本文数据集中class=4;4为预测的目标边界框与真实边界框之间的偏差。若特征图尺寸为m×n,每个坐标点有6个框,将产生m×n×6×(class+4)的输出结果,最后将这些结果放入损失函数中计算损失。
模型损失函数由分类损失函数和回归损失函数组成。分类损失为多类Softmax损失函数,计算公式如下:
(1)
回归损失为smooth L1 loss,计算公式如下:
(2)
(3)
模型总损失函数为:
(4)
其中,N为匹配成功的正样本数量,如果N=0,则损失为0;α是定位损失和分类损失之间的比重;x是用来判断默认框中是否有对应的目标。
为了提高SSD模型对瓶体缺陷的检测能力,本文对SSD网络结构进行优化,优化后的网络结构由特征提取网络、尺度特征融合模块、分类和回归网络组成,如图2所示。缺陷图片经特征提取网络提取特征,然后尺度特征融合模块对特征图进一步融合增强,最后在分类和回归层进行预测。
优化后的网络使用Resnet50作为基础网络,相较于原始的VGG16,Resnet50有着更高的分类准确率和更少的参数量,为了保持原始算法的多尺度训练和预测,在基础网络后增加了conv5_1、conv5_2、conv6_1、conv6_2、conv7_1、conv7_2等卷积层。因此,本文算法是在layer2、layer3、layer4、con5_2,conv6_2、conv7_2等6个不同尺度的特征图上做预测。为保证预测层具有丰富的尺度特征,本文在f_1、f_2、f_3、f_4、f_5、f_6等特征图上引入了尺度特征融合模块,从而得到融合后的特征图ef_1、ef_2、ef_3、ef_4、ef_5、ef_6。
图2 改进SSD算法模型结构图
改进后的模型相较原始SSD算法有了很大的精度提升,但对于较小类缺陷检测精度提升较小。为此,本文在Resnet[17]网络的瓶颈模块中插入全局上下文模块(Global Context Block, GCBlock),用来获取全局语义特征,GCBlock被插入在conv1×1卷积之后。通过在数据集上验证,GCBlock在一定程度上增强了网络特征提取能力,提高了空瓶表面缺陷的检测精度。
除此之外,本文损失函数采用FocalLoss[18]损失函数,替代原始多类的Softmax损失函数。在预测过程中,通过采用Soft-NMS[19]策略在大量的预测结果中筛选出最优框,以得到最佳的检测结果。
在卷积神经网络中,卷积层建立像素关系通常处于局部领域,而远距离依赖关系却需要深度堆叠卷积来实现,然而这种简单重复的堆叠卷积层的方法不仅效率低下,而且造成网络难以优化。近年来,为了解决这个问题,众多的注意力机制网络被提出,如SENet[20]、NLNet[21]、GCNet[22]。本文为了获取全局语义特征,提高检测精度,引入GCNet网络中的全局上下文模块。全局上下文模块由上下文建模模块、特征变换模块和特征融合模块构成。上下文建模模块主要包含一个1×1的卷积和一个Softmax函数,该模块通过权重αj的加权平均将所有位置的特征组合在一起,以获得全局上下文特征。在特征变换模块中,首先使用1×1的卷积对特征图进行降维,然后再用1×1的卷积对特征图进行升维。为了降低瓶颈变换带来的优化难度,在瓶颈变换内,即在ReLU之前添加了归一化层,这样一方面可以简化模型优化,另一方面对模型起正则化的作用。
详细的GCBlock结构如图3所示,公式定义为:
(5)
图3 全局上下文模块
SSD算法在检测上同时利用低层特征和高层特征在不同特征层进行预测,但这种方式获得的特征鲁棒性不强,都是一些弱特征。受SIFT[23]特征提取的启发,本文尝试使用一种新颖的模块来提取尺度、形状和位置不变性的特征。尺度不变特征变换是计算机视觉中的特征检测算法,用于检测和描述图像中的局部特征。该算法提出高斯拉普拉斯特征表示方法,可以将尺度空间特征和金字塔多分辨率特征融合在一起。与SIFT中的高斯函数相似,本文使用不同膨胀因子的膨胀卷积[24]来获得具有相同比例但感受野不同的特征,提出一种新的特征融合方式尺度特征融合模块(Scale Feature Fusion Module, SFFM),如图4所示,通过将低层细节特征和高层语义特征相融合,增加特征的鲁棒性;同时在融合的过程中使用不同膨胀因子的膨胀卷积,用来扩大特征图感受野。
图4 尺度特征融合模块详细结构
尺度特征融合模块主要将第i层高层语义特征与第j层细节特征相融合,其过程如下:
1)将第i层的特征图上采样2倍后与第j层的特征图相加。
2)将相加后的特征图使用膨胀因子为3、5、7、9,核尺寸为3×3的卷积核对特征图做卷积操作。
3)将产生的5个不同感受野的特征图堆叠在一起,采用1×1的卷积形成最终融合后的特征图。
定义ef_i∈RC×H×W表示第i层的特征图,f_j∈RC×2H×2W表示第j层的特征图,Z∈RC×2H×2W表示ef_i和f_j相加后的特征图,ef_j∈RC×2H×2W表示融合后的特征图,其中特征图通道数C=256。则图4的计算过程可用公式表示为:
Z=fsum(f_j,fup(ef_i) )
(6)
ef_i=fconcat(fdilation(Z) )
(7)
其中,fup表示上采样,fsum表示加运算,fdilation表示膨胀卷积操作,fconcat表示将融合后的特征图连接起来。
3.1.1 数据集
本文使用的数据集由在线采集的注塑空瓶表面带有缺陷的图片组成,图片分辨率大小为1280×960,对采集的图片缺陷使用LabelImg进行标注,数据标注格式为PascalVOC格式,为了防止训练过程中产生过拟合现象,对标注的7512幅图片进行旋转、镜像、颜色通道变化等数据增强技术,最终得到30048幅图像。对被标注后的数据集进行训练设置,如表1所示。
表1 训练测试数据设置详细
3.1.2 实验环境
本文使用深度学习框架PyTorch搭建实验运行环境来对瓶体缺陷图片进行研究,并在GeForce GTX 1080Ti显卡环境下进行GPU加速运算。详细软件和硬件配置如表2所示。
表2 实验运行环境
3.1.3 性能评价指标
为了评估检测的效果,本文采用准确率(Accuracy)、漏检率、误检率和均值平均精度(mAP)等性能评价指标对检测效果进行评估。准确率计算方法如式(8)所示,均值平均精度计算方法如式(9)所示:
(8)
(9)
其中,TP表示被正确预测为缺陷数目,FP表示为错误预测为背景的数目,FN表示错误预测为缺陷的数目,TN表示正确预测为背景的数目。
3.1.4 训练
本文实验均使用Xavier初始化方法对网络模型进行初始化。输入图像大小为512×512,训练过程使用随机梯度下降算法对网络进行迭代优化,设置动量为momentum=0.9,权重退化率为weightdecay=0.0005,输入批次为batchsize=16,初始学习率为learningrate=0.001,在迭代次数为75000次和90000次时,学习率分别为0.0001和0.00001,总迭代次数为105000次。
为了验证优化后的SSD算法对空瓶表面缺陷检测的有效性,本文分别对原始SSD算法,SSD+GC Block、SSD+SFFM以及本文方法等4种不同网络结构的SSD算法在测试集上的检测效果进行对比。同时为了验证全局上下文模块和特征融合模块对模型准确率的影响,本文通过向SSD算法中分别加入图3和图4结构,在空瓶缺陷数据集上进行训练和验证,得出的检测结果如表3所示。对比结果可知,本文提出的算法较原始SSD算法在漏检率、误检率、准确率和均值平均精度上都有了较大的提升。在SSD网络中加入尺度特征融合模块和全局上下文模块均可以提高模型的检测精度。相较于全局上下文模块,尺度特征融合模块可以得到更高的检测精度,同时也带来检测时间的消耗。
表3 不同算法在空瓶数据集上的检测结果 单位:%
图5展示了SSD算法和本文算法在不同缺陷类型上的检测效果图。由图5可知,本文方法较SSD算法对空瓶缺陷有更好的检测效果。尤其对于划痕类缺陷,本文方法有更高的定位精度,更低的误检率和漏检率。
(a) Ground Truths
(b) SSD检测结果
(c) 本文算法检测结果
本文采用深度学习目标检测SSD算法对空瓶表面缺陷进行了检测。为了满足工业检测所需要达到的检测精度,本文在SSD算法的网络模型中插入全局上下文模块,提高特征提取的能力;在预测层引入尺度特征融合模块,一方面使得低层特征和高层特征相融合,增强了特征的鲁棒性,另一方面扩大特征图的感受野,提高检测的精度。通过对SSD算法的优化,在满足工业检测时间的条件下,检测准确率达到了98.3%,较原始算法提升了5.6个百分点,漏检率降低到0.74%,误检率降低到0.96%。相较于人工检测方法,本文提出的方法有更高的优势。