彭露露,朱媛媛,金文倩,王笑梅
(上海师范大学信息与机电工程学院,上海 200234)
现代工业对汽车生产安全的要求逐渐提高,使汽车钢铁零件表面缺陷检测成为研究热点。开展汽车钢铁零件表面缺陷自动检测研究对现代汽车生产具有重要意义。能否发现和定位微小缺陷,降低漏检率,提高检测精度是研究重点。
近年来,深度学习技术日趋成熟,显示出强大的图像处理能力,尤其在目标检测算法[1]中取得了较大进展。基于深度学习的目标检测算法依靠大数据获得比传统方法更好的检测结果,具有更强的鲁棒性。现有的目标检测方法可分为基于回归的检测、基于区域建议的检测、基于无锚的目标检测这3类。基于回归的目标检测称为单阶段目标检测,将识别问题当作一个回归问题,一步到位直接预测目标位置和类别,代表性算法有YOLO[2-5]、SSD[6]等。基于区域建议的检测又称为双阶段目标检测,首先使用区域推荐产生候选目标区域,然后使用卷积神经网络进行分类、回归处理,代表性算法有R-CNN[7]、Fast R-CNN[8]、Faster R-CNN[9]、Mask R-CNN[10]等。基于无锚目标检测的算法[11-14]不再使用先验框,而是把目标检测问题当做关键点检测问题来解决,主要包括CornerNet[15]和CenterNet[16],前者通过检测目标框的左上角和右下角2个关键点得到预测框,后者通过对物体的中心点检测得到目标框。
基于卷积神经网络和深度学习的目标检测方法由于其强大的代表性和学习能力,逐渐取代基于机器视觉的传统缺陷识别方法[17-19],受到研究人员和工业界的关注,被应用到工业缺陷检测中。Deng等[20]建立了铁材料极化图像裂纹数据集,并采用Cascade-YOLOv4网络模型进行钢铁表面裂纹检测,提高了检测准确率和检测速度,但该算法是用来检测极化图像,总体适用性不好。Shen等[21]针对工业铝缺陷检测中缺陷样本稀疏问题,基于Faster R-CNN,设计了一种多任务深度网络模型,解决了铝缺陷检测样品少而导致检测精度低的问题,但检测速度不满足工业实时性检测的要求。Xu等[22]提出了一种基于YOLO模型的改进金属表面缺陷检测技术,但在天池数据集上的平均检测精度为75.1%,精度较低无法执行小目标检测任务。赵振兵等[23]提出了一种基于改进Cascade R-CNN的典型金具及其部分缺陷检测方法,在一定程度上解决了金具检测精确度低的问题,但检测速度较低,FPS最高仅为8.3。
综上,双阶段目标检测算法精度较高,但速度较低;单阶段检测算法速度较高,但精度较低。为了满足汽车钢铁零件缺陷检测工业生产实时性检测和小目标检测要求,本文对比了目前主流的目标检测算法,针对单阶段的YOLOv4算法检测精度低的问题,作出以下改进,提出了SE-R-YOLOv4汽车钢铁零件表面缺陷检测算法。
1)通过加权K-means算法[24]对钢铁零件表面缺陷数据集进行聚类,得到与样本更加匹配的anchor预选框,解决缺陷样本不平衡问题。
2)将SENet(Squeeze-and-Excitation Networks)中的SE模块[25]引入骨干网络中的残差单元,通过特征重标定使模型更加关注信息量大的通道特征,抑制不重要的通道特征,从而提高准确度。
3)在76×76特征图后连接RFB-s模块[26],增强对小目标特征提取的能力。
通过自建的汽车钢铁零件表面缺陷数据集分别对原始的YOLOv4算法和改进的SE-R-YOLOv4算法进行训练和测试,实验结果表明,在保证速度满足实时检测的基础上,改进的SE-R-YOLOv4算法精度较高,并且mAP50相较于原始YOLOv4算法提高4.3个百分点,验证了该算法的有效性,说明在实际应用中,能满足工业生产的精度要求。用COCO数据集对改进后的算法进行训练和测试,SE-R-YOLOv4算法在IOU阈值为0.5时的平均准确率均值mAP50达到65.9%,比原始YOLOv4高出0.2个百分点,验证了改进算法的可迁移性和泛化性。
锚框的选择影响模型的收敛性和检测精度,原始YOLOv4中的预选框是在COCO数据集上聚类得到的。而汽车钢铁零件表面缺陷图像为灰度图,相比其它数据集信息量更少;同时缺陷的边界没有统一的划分标准,大小不一,并且多为微小缺陷,增加了位置信息的检测难度。针对上述样本不平衡和小目标问题,需要根据标注的缺陷大小重新选择锚框。本文在K-means算法的基础上提出了加权K-means算法[23],即引入权重系数,为每一个样本设置权重来解决样本缺陷尺寸不平衡影响聚类结果的问题。采用聚类中心与样本之间的最大交并比来评价聚类结果,步骤如下:
1)随机选取K个聚类中心。
2)遍历所有样本与每个中心点的距离,样本属于与其最近的聚类中心所在的集合,即:
(1)
3)求出每个样本与其对应聚类中心之间的权重,构成权重矩阵,即:
(2)
(3)
4)更新聚类中心,即为各聚类集合中所有样本各个维度的平均值:
(4)
5)重复步骤2~步骤4,直到聚类中心位置不再改变。
YOLOv4网络使用特征金字塔输出3张不同比例的检测图,检测不同尺寸的目标,从而实现端到端目标检测。但它是一种基于回归的检测方法,相比两阶段算法,对小目标的检测精度不高。而汽车行业对安全性要求高,汽车零件表面缺陷检测要达到较高精度,要求检测到微小缺陷。为了使更多的小目标信息得以更充分的利用,本文调整了网络结构,进行了如下改进:
由于SENet中的SE模块和特征增强的RFB模块超轻量的特性,能与深度神经网络结合,本文将SE模块和RFB模块引入到YOLOv4网络中,在不影响模型的实时检测的情况下增强网络提取全局信息和小目标信息的能力,从而提升检测精度,满足汽车钢铁零件表面缺陷检测高精度和实时性的要求。
1.2.1 基于特征重标定的SENet
网络注意力机制是卷积神经网络中十分有效的组件,可用于增加网络的表达能力。Hu等[25]提出了SENet,通过特征重标定策略,对输入的特征图的每个通道赋予不同的权重,通过学习获得不同通道的重要程度,增大有效通道的权重,减小无效或效果小通道的权重,提取更加重要的信息,同时不会对模型的计算和存储带来更大的开销,从而提高网络的性能。具体操作为:
1)Squeeze,即通过全局平均池化压缩特征图。不改变特征图通道个数,只将特征图的每个二维通道变成一维实数,这个实数在某种程度上具有全局的感受野。若输入尺寸为W×H×C的特征图,则输出特征图尺寸为1×1×C。计算公式为:
(5)
其中,uc表示输入特征图U的第c个通道,zc为Squeeze操作得到的结果,即第c个通道压缩后得到的实数。
2)Excitation,即给每个通道生成权重构成权重矩阵,然后使用2个全连接层来学习参数。第1个全连接层将通道个数降低为C/16,激活函数为ReLU;第2个全连接层将通道个数恢复为输入通道个数,激活函数使用sigmoid()进行归一化处理,最终得到一个0~1之间的标量,即为通道的权重。其公式为:
s=Fex(z,W)=σ(g(z,W))=σ(W2·δ(W1·z))
(6)
其中,z为Squeeze操作得到的特征图,首先用W1乘以z,即为第1个全连接层操作,为了减少通道个数来降低计算量,这里W1的维度是(C/16)×C。又因为ZC的维度是1×1×C,所以第1个全连接层的结果就是1×1×(C/16),随后输入ReLU层,输出维度不变。接着将输出结果与W2相乘进行第2个全连接层操作,W2的维度是C×(C/16),输出尺寸为1×1×C;最后,经Sigmoid函数激活,得到s,即为所求的权重矩阵。
3)Reweight,即通过1个Scale操作,将得到的权重与原始的特征图在每一个通道对应相乘,完成在通道维度上的对原始特征的重标定。其公式为:
(7)
其中,uc为原始特征图中第c个通道的二维矩阵,Sc为第c个通道的权重值,因此Fscale操作就是把uc矩阵中的每个值都乘以Sc。
SENet结构简单,不会带来很大的计算和内存开销,因此容易被嵌入到其它卷积神经网络中。为了进一步增强网络提取钢铁零件表面缺陷特征的能力从而提升检测的精度,本文将SE模块嵌入到YOLOv4主干网络的ResUnit中,只改变单个残差单元的结构,不改变残差模块中ResUnit的连接方式,形成新的SE-ResUnit模块,如图1所示,增加网络感受野,对特征进行自适应细化处理,提高网络性能。
图1 SE-ResUnit模块
1.2.2 增强特征提取的RFB-s模块
为了增强轻量级CNN网络的深层特征,创造快而精准的检测器,Liu等[26]受人类视觉系统RF结构的启发,通过模拟人类视觉的感受野加强网络的特征提取能力而提出了RFB模块。本文中涉及小目标检测问题,小目标在图片中所占像素较小,RFB模块中的5×5卷积对小目标来说显得太大,RFB-s模块用2个3×3的连续卷积层代替5×5卷积层,可以加强对小目标信息的特征提取能力;此外,RFB-s模块用1×3和3×1卷积层代替3×3卷积层,减少了参数从而减小了计算量。
RFB-s是一个多分支卷积模块,包含多分支卷积层和膨胀卷积层2个部分。多分支卷积层用不同尺寸的卷积核模拟不同大小的人眼感受野。膨胀卷积层在原始卷积核各值之间填充0,在保持参数数量不变的同时扩大感受野。填充0的个数称为卷积核的扩张率,本质是模拟人眼感受野与视网膜折射率之间的关系。RFB-s网络结构如图2所示。
图2 RFB-s模块
首先,在每个分支中用大小为1×1,步长为2的卷积核构成瓶颈结构,以减少特征映射中的通道数量和进行跨通道的信息融合。其次,连接n×n卷积。RFB-s模块中为了减少参数和使用更深的非线性层,用2个堆叠的3×3卷积代替RFB模块中的5×5卷积,用堆叠的1×3加3×1卷积替换原始的3×3卷积。随后将各分支的输出contact连接后,与一个不带非线性激活的1×1卷积直连层进行Add操作,形成新的特征。
RFB-s模块在保持参数数量不变的同时,在更大的区域提取特征,捕获更多上下文信息,生成更高分辨率的特征图,增强神经网络的特征提取能力。并且RFB-s使用了较多的小卷积核,更适合应用于较浅的层关注局部信息。因此,为了利用浅层特征图丰富的小目标信息,本文在76×76特征图后连接一个RFB-s模块。
1.2.3 SE-R-YOLOv4网络结构
改进后的网络名为SE-R-YOLOv4,如图3所示,由输入、主干、颈部与预测4个部分组成。主干网络提取图像的特征图,并将特征图输入到Neck网络层进行特征融合,融合后的特征图传递到Head端,生成边界框并预测类别。主干网络可以分为5个CSP_SEResN模块,每个模块包含3个部分:一个大小为3×3,步长为2的卷积核,N个SE-ResUnit顺序连接组成的残差模块,1个CSP结构。其中步长为2的卷积核起到下采样的作用。Neck网络添加了SPP模块、RFB-s模块、FPN+PAN2模块。SPP模块通过融合4种形式的最大池化层来获得鲁棒的特征表示,扩大主干特征的感受野,分离最重要的上下文特征。RFB-s模块用来增强小目标特征提取能力。FPN+PAN2模块对输入的不同尺寸的特征图进行合理的优化,构成特征金字塔,提高网络性能。Head最终输出含有网格个数为76×76、38×38、19×19的3种尺度的特征图,分别预测小、中、大目标。
图3 SE-R-YOLOV4网络模型
1.3.1 输出特征向量
对于Head部分,本文采用一种基于先验框的预测办法,本质是一个分类回归网络。将输出特征图分别分割为76×76、38×38、19×19的网格,每个网格预测3个边界框,输出特征向量为以下3个部分:
1)边界框。
包含边界框的中心点坐标和边界框的宽、高信息,如图4所示,其计算方式如下:
图4 预测边界框
bx=σ(tx)+Cx,by=σ(ty)+Cy
(8)
bw=pwetw,bh=pheth
(9)
σ(x)=1/(1+e-x)
(10)
其中,(Cx,Cy)为目标中心点所在的网格单元格左上角的坐标,(bx,by)为实际预测框的中心点坐标,(σ(tx),σ(ty))为卷积神经网络预测的偏移值。pw、ph分别为anchor先验框的宽度和高度,bw、bh分别为实际预测框的宽度和高度,(tw,th)是神经网络的预测值。在获取的特征图中,每个单元格的宽度和高度为1,所以(Cx,Cy)=(1,1),使用Sigmoid函数将预测偏移量限制在0~1之间。
2)每个边界框的置信度Confidence。
置信度反映了边界框含有目标的可能性和边界框预测的准确度2个方面信息。计算公式为:
(11)
3)每个网格预测的类别。
对于本文的单分类问题,输出特征向量维度为3×(4+1)+1=16维,因此得到76×76×16、38×38×16、19×19×16这3个特征向量。
1.3.2 损失函数
将输出特征向量送入回归网络对目标位置和种类进行回归训练,用损失函数来计算训练过程中产生的损失量,通过反向传播,不断更新权值来最小化损失函数。本文采用的损失函数包含边界框损失、置信度损失、分类损失3个部分。其中,置信度损失和分类损失仍然使用交叉熵损失。边界框损失采用CIOU损失函数,将重叠面积、中心点距离、长宽比这3个重要几何因素考虑进去,相比均方误差损失函数,边界框回归速度更快,精确度更高。
置信度损失表示预测框对被检测对象的置信度,计算公式为:
(12)
边界框损失是指真实框与预测框之间的误差,计算公式为:
(13)
其中,C和D分别为真实框和预测框,IOU为目标框和真实框的交并比,IOU是衡量预测框准确性的指标。IOU越大,预测框的位置越准确。d()是欧氏距离,l为预测框与真实框的最小外接框的对角线距离。c、w和h分别表示预测框的中心坐标、宽度和高度。cgt、wgt和hgt分别表示真实框的中心坐标、宽度和高度。
分类损失表达式为:
(14)
因此,总的损失函数为:
L=Lciou+Lconf+Lcls
(15)
在实际工业生产中,由于生产设备及生产工艺的提升,大量的缺陷样本往往难以获取,而深度学习模型的训练需要大量数据做支撑,为了提高缺陷检测的性能,以防止少量样本训练造成的过拟合现象,影响模型的泛化能力,本文采用4种方式(见表1)对缺陷数据进行扩增,将原始的400张缺陷图像扩充至7倍并且按4∶1随机分为训练集和测试集,然后利用LabelImg软件进行标注,记录所有缺陷的位置、类别信息,作为训练模型的输入。
表1 数据扩充方法
实验计算机设备配置:Ubuntu18.04操作系统,Intel i7-7700 CPU, NVIDIA GTX 1080Ti GPU,软件环境为Pytorch框架,Python版本3.6.10,Pycharm2020。
实验图像尺寸为608×608,采用批次迭代训练法,批次大小设置为16,迭代2000次,学习率设置为0.001,学习率衰减为0.1,使用SGD随机梯度下降优化算法,momentum动量值设为0.9。此后,将整个数据集遍历2000次,所得到的表面缺陷检测网络训练损失函数曲线如图5所示。
图5 损失函数收敛曲线
图5中横坐标表示迭代次数,纵坐标表示Loss损失值。其中,Box、Objectness、Classification分别为为边界框GIoU Loss均值、置信度Loss均值、分类Loss均值。val Box、val Objectness、val Classification分别为验证集边界框GIou Loss均值、验证集置信度Loss均值、验证集分类Loss均值。因为本文自建数据集中只有defect一个类别,故在对自建数据集训练时类别损失值为0。由测试结果可以看出,无论是训练集还是验证集,损失值都随着迭代次数的增加不断收敛,在迭代2000次后,模型各类损失值都趋于稳定。其中训练集的损失值在1000次之前下降快速,在1000~2000次区间下降趋势缓慢,在2000次以后损失值收敛,达到0.005以下,验证集的损失值相对训练集收敛更快,损失值达到0.04。
本文选用目标检测算法常用的FPS(Frame Per Second)、精度(Precision)、平均准确率AP,平均准确率均值mAP作为试验评价指标。
FPS用来评估算法的检测速度。它表示每秒可以处理的帧数。模型在不同的硬件配置下有不同的处理速度。因此,本文在比较检测速度时使用相同的硬件环境。分类结果混淆矩阵表示方法如表2所示。
表2 混淆矩阵
表2中,TP表示正确预测的正样本数,FP表示错误预测的负样本数,FN为错误预测的正样本数,TN为正确预测的负样本数。精度(Precision)是指正确预测为正的占全部预测为正的比例;召回率(Recall)指正确预测为正的占全部实际为正的比例;召回率的反面是漏检率,其值为1-召回率,表示未被检测到的正样本。精度和召回率的计算公式如下:
(16)
(17)
平均准确率AP是精度的平均值,表示模型在某一类别中的准确率,AP值为以召回率为x轴,以精度为y轴的P-R曲线下的面积;mAP表示所有类别的平均准确率,可以衡量网络模型在所有类别中的性能,N为类别个数。计算公式如下:
(18)
(19)
本文使用自建的汽车钢铁零件表面缺陷数据集分别对原始的YOLOv4算法和改进的SE-R-YOLOv4算法进行训练和测试。首先分别使用K-means算法和加权K-means算法对数据集聚类,均得到9个anchor预选框,分配给3个不同尺度的特征图。为了节约时间,先使用原始YOLOv4在COCO数据集上的预训练模型,再在自己的数据集上训练得到新的模型。利用新的模型对汽车钢铁零件表面缺陷数据集中的测试集进行测试,得到实验结果。
图6为SE-R-YOLOv4模型和原始YOLOv4模型的汽车钢铁零件表面缺陷检测P-R曲线图,其中纵坐标表示精度,横坐标表示召回率,平均准确率AP值为P-R曲线下的面积。此数据集中只有defect单一类别,故mAP值与AP值相等。可以看出,SE-R-YOLOv4网络模型mAP较高,达到90.5%,比原始的YOLOv4提高了4.3个百分点。
图6 汽车钢铁零件表面缺陷检测P-R曲线
图7(a)和图7(b)分别为SE-R-YOLOv4模型和原始YOLOv4模型的混淆矩阵图,从中可以看出,SE-R-YOLOv4模型的检测精度Precision为0.93,比原始YOLOv4提高了0.05;漏检率为0.07,比原始YOLOv4降低了0.05,说明SE-R-YOLOv4模型能检测出更多缺陷,对小目标缺陷的检测能力更好。
图7 混淆矩阵图
为了进一步验证改进后的SE-R-YOLOv4算法的精度以及对小目标和多目标的检测效果,将原始YOLOv4、Faster R-CNN、SSD作为横向对比算法,与改进后的SE-R-YOLOv4网络模型进行对比实验,检测结果如表3所示,部分检测图像如图8和图9所示。
图8 小目标检测示例
图9 多目标检测示例
从表3中的数据可以看到,SE-R-YOLOv4模型检测准确率最高,其检测精度达到了90.5%,比原始的YOLOv4提高了4.3个百分点,比双阶段目标检测算法Faster R-CNN高出7.9个百分点。由于增加了注意力模块和特征增强模块,其中,SE模块嵌入主干网络的残差单元ResUnit中,形成新的SE-ResUnit模块。而主干网络中有5个CSP_SEResN模块,每个模块中分别包含1、2、8、8、4个SE-ResUnit模块,故整个主干网络中共嵌入1+2+8+8+4=23个SE结构,模型体积略微增大,导致FPS从56.4下降至53.1,但仍高于单阶段目标检测算法SSD,满足实时检测的要求。本文提出的SE-R-YOLOv4算法模型在检测精度上明显优于YOLOv4与Faster R-CNN,且速度仍满足生产实时性要求,这表明本文提出的方法更适合应用在实际生产过程中。
表3 不同算法在自建数据集上的检测结果
图8中SE-R-YOLOv4算法的预测边界框更加贴合缺陷的形状,置信度更高,说明微小缺陷检测精度较高,在小目标检测方面表现良好。图9中SE-R-YOLOv4算法检测出了所有缺陷,并且预测边界框置信度在0.9以上,而其余3种算法均存在漏检情况,验证了SE-R-YOLOv4算法对多目标图像的检测效果。
为了验证改进SE-R-YOLOv4算法在其他数据集上的有效性,本文在公开的COCO数据集上对SE-R-YOLOv4模型进行训练与测试,并与YOLOv4的实验结果进行对比分析。由于COCO数据集中含有多个类别,mAP是所有目标类别检测精度的均值,所以COCO数据集检测任务采用IOU阈值设置为0.5的mAP值进行评价,结果如表4所示。由表4可知,改进的YOLOv4算法与原始YOLOv4算法相比,精度提高了0.2个百分点,速度略有下降,FPS值从23下降到20,但仍满足实时监测。说明SE-R-YOLOv4算法能够执行多分类任务,且分类精度高于原始YOLOv4算法,验证了该算法的可迁移性。
表4 COCO数据集测试结果
汽车钢铁零件表面缺陷检测技术对于提高汽车制造行业的安全性和精密性具有重要意义。为了提高汽车钢铁零件表面缺陷检测的精度,本文提出了改进的SE-R-YOLOv4目标检测模型。首先采用加权K-means算法,重新确定更符合表面缺陷数据集的预选框。然后借鉴SENet思想,在残差单元中连接SE模块,通过对特征图通道加权,使神经网络更加关注包含重要信息的目标区域,抑制无关信息,提高检测精度。为了解决网络层数过多导致小目标信息丢失的问题,在包含更多小目标信息的76×76特征图后连接RFB特征增强模块,保证小目标识别的准确度。实验结果表明,改进的YOLOv4模型在钢铁汽车零件表面缺陷检测任务中比原始YOLOv4精度更高,速度也满足实时检测的要求,具有更好的检测效果。改进后的SE-R-YOLOv4算法在COCO数据集精度上也比原始YOLOv4略有提高,验证了该算法的迁移性和普适性,为进一步的实际应用提供了理论参考。