朱红艳,李泽平+,赵 勇,2,罗相好,成先镜,3,杨肖委
(1.贵州大学 计算机科学与技术学院,贵州 贵阳 550025;2.北京大学深圳研究生院 信息工程学院, 广东 深圳 518055;3.遵义师范学院 黔北信息技术研究院,贵州 遵义 563099; 4.贵州大学 机械工程学院,贵州 贵阳 550025)
随着电子行业不断发展,PCB(printed circuit board)作为电子产品的重要组件,一旦出现缺陷问题,轻则影响电子产品外观及性能,重则产生重大安全事故隐患,因此,在出厂前必须对PCB进行缺陷检测,保证产品质量[1]。
传统的PCB缺陷检测方法主要有人工目检和电气测试[2],但人工目检方法效率低,容易造成错检、误检。电气测试需要制作相应的PCB模具与夹具,成本高,不适用现在的高精度PCB检测。
自动光学检测(AOI)技术被用于检测PCB制造过程中[3-5]的缺陷,与传统的人工检测相比,具有检测速度快、成本低等优势。随着深度学习发展与应用,传统算法虽然有了较好的效果,但存在很多不足之处,比如针对性强,很难检测出缺陷的大小及形状。研究人员发现卷积神经网络可以从大规模数据中学习表征能力,李云峰等[6]通过分析缺陷区域的边界像素的梯度方向信息来进行分类与识别。Dinget等[7]提出了一种基于Faster R-CNN的PCB微小缺陷检测方法,该方法解决了深度卷积网络在检测小缺陷区域方面的不足,为我们提供了一个很好的思路。
因此,我们提出了一种基于多尺度特征融合和可变形卷积的PCB缺陷检测算法,它可以用来识别PCB生产过程中的6种常见的缺陷。
Girshick团队在2014年设计了RCNN[8]目标检测框架,首次使用了候选区域与卷积神经网络结合的思想,使目标识别取得了飞跃式的进展;2015年,Girshick R等提出了Fast R-CNN[9],利用ROI Pooling大大缩短了R-CNN特征提取时间;在RCNN和Fast RCNN积累之后,2016年提出了新的Faster R-CNN。在结构方面,Faster R-CNN将目标分类和定位放在同一个网络模型中。使用VGG16作为网络的backbone,引入了anchor,提出区域推荐网络(region proposal network,RPN)替换原始的Select Search算法,将特征提取、分类及回归都整合在一个网络中,检测速度和检测精度同时提高了一个量级,将检测识别问题看作分类问题,在2015年的ILSVRC以及COCO竞赛中获得多个项目的第一名。
Faster R-CNN目标检测大致流程主要由3个部分组成:卷积层、区域生成网络(region proposal network,RPN)和池化层,检测流程如图1所示。输入一张图像,首先经过卷积层,得到特征图,然后经过RPN生成候选框,将生成的候选框投影到特征图上得到含有特征框的特征融合图,最后特征融合图经过RoI Pooling层,经过一系列全连接层完成分类与回归,最终得到预测结果。卷积层以任意大小的图像作为输入,通过特征映射生成特征。该特征被传播到RPN(用于生成区域建议)和唯一的卷积层(用于生成高维特征)。将高维特征和区域建议作为RoI池的输入,根据区域建议将高维特征转化为统一的大小。
图1 Faster R-CNN目标检测流程
RPN作为全卷积网络,是Faster R-CNN的核心,用于生成高质量的区域,结构图如图2所示。Faster R-CNN在最后一个卷积层之后配置了一个区域建议网络(RPN)来检测目标对象中的潜在对象,是根据最后一个卷积层的特征生成区域建议。为了生成区域建议,在卷积特征映射上滑动N×N窗口,然后映射到一个较低维的特征(256-d)。该特征被送入回归层(reg layer)和分类层(cls la-yer)。锚点位于与比例和长宽比相关联的滑动窗口的中心组成的全连接层中,获取坐标和用于估计对象(前景)或非对象(背景)的概率。
图2 区域生成网络原理结构
原始的Faster R-CNN网络使用VGG 16作为骨干网络进行特征提取,VGG 16使用的是基础的卷积、激活函数、池化层对输入的图像进行特征提取。在整个模型训练过程中,需要网络不断地通过反向传播来更新权重,随着网络的加深容易产生梯度弥散甚至是消失问题。Resnet[11]是一种很好的解决深度神经网络随着网络深度的增加逐渐饱和而引起的迅速退化的一种方法,通过将网络的输入与输出叠加,构成最终的网络输出,而且还作为后续网络的输入,残差结构如图3所示。
图3 残差模块基本结构
(1)
式中:X作为网络的输入,F(X) 是网络的输出,主要包含了卷积、激活函数、池化等操作,H(X) 作为网络的最终输出。残差网络结构出现相加项,同样在计算梯度时也会有相加项的出现,梯度不容易趋向0,因而规避了梯度弥散的发生。Resnet在面对更深层次网络的时候,在训练过程中能更好保存小目标缺陷的特征,而且不会随着网络的加深引起网络退化,因此有效抑制过拟合的发生。
此外,现有网络模型对目标几何变形的适应性几乎完全是由于数据本身的多样性,模型的内部结构没有适应几何变形的机制。这是因为卷积运算本身的几何形状是固定的,而堆叠所构建的卷积网络的几何形状也是固定的,因此它没有建模几何变形的能力。因此,我们在模型中引入了可变形卷积网络结构,提高了基于卷积神经网络几何变形目标检测网络的学习能力。DCR-FRNet框架如图4所示。
图4 DCR-FRNet框架
我们提出的算法是在原始的Faster R-CNN上做了改进。首先使用Resnet-101作为骨干网络替换原来的VGG-16进行提取特征,构建多阶段输出和多尺度特征融合的FPN,将高层的语义信息与低层的几何信息充分结合,以此来解决PCB目标小的检测难题。图4中1×1卷积是为了降低通道,保持与上一层的通道数相同,上采样是保证上层与下层的进行特征融合时的大小一致,3×3卷积是为了解决1×1卷积与上采样融合的过程中产生的混叠效应。其次添加可变形卷积核的网络结构学习特征提取的位置,根据复杂环境自适应改变采样位置,从而提高变化检测的性能。在池化层内构建分层的残差连接来替代传统的池化模块,用于池化层的多尺度信息融合,提高像素级的多尺度表征能力。最后调整训练参数和卷积神经网络结构来优化模型,在原始的Faster R-CNN网络中加入了1×1的卷积核,减少层内参数的数量,使提取的特征在网络层的转移更加平滑,改进了锚的大小,可以识别出原本无法识别的小物体。
多尺度可变形卷积神经网络采用了一种新的具有两个偏移量的卷积方法来生成对物体变形信息更敏感的特征图,此外提高了对几何变形物体的检测能力。可变形卷积结构取代了普通的卷积运算来检测目标,有效地提高了卷积神经网络在不同几何变形下提取图像特征的泛化能力。同时,该网络在不浪费大量计算时间和缓存空间的情况下自动训练卷积的偏移量。其次,在最终的检测中,对多尺度特征图进行特征融合操作,同时利用不同比例特征图预测分类和位置信息,避免了多次卷积和池化操作后小目标对象信息的丢失,保证了检测速度,增强了小目标的目标信息,也提高了目标检测的准确性。
原始的Faster R-CNN在特征提取网络中RPN仅采用最后一层的特征图,该方式对于大目标的缺陷检测有很好的效果,对小目标的检测效果就很差。
特征金字塔构建主要有3个环节,自下而上、横向连接和自上而下。自下而上的过程是特征提取网络的前馈计算过程。自上而下的过程是将高层语义信息强但分辨率低的特征经过上采样来得到高分辨的特征。横向连接是把低层的位置信息自下而上与高层的语义信息自下而上进行多尺度合并。特征金字塔的思想就是将含有高层的语义信息与含有较强的低层的位置信息进行特征融合,能够实现精准定位同时还具备很强的语义信息。
根据FPN论文中的映射公式,计算映射到FPN的等级,计算公式如下
(2)
式中:k0表示RoI映射到FPN的等级,w为RoI宽度,h为RoI高度,448表示的是PCB图像的大小。
原始的FPN因为C1的分辨率高,没有对其做任何处理。本文对FPN的改进就是利用C1含有丰富的几何信息来构建特征金字塔,得到特征图P1,适合检测缺陷在原图中所占比例低于1/256。对P1进行下采样,P3进行上采样,与P2按照像素相加的方式融合在一起,最后通过一个3×3的卷积得到最终的P0,利用P0的Feature Map进行缺陷检测,特征金字塔构建流程如图5所示。
图5 特征金字塔构建流程
CNN在目标检测、分类和分割方面取得了重大进展。然而,CNN使用固定的卷积核来提取特征,导致高级神经元的接受野是固定的,无法有效编码可变形的信息。为了解决卷积过程中图像几何变换带来的影响,利用可变形卷积[14]来克服几何变换。在模块中增加空间采样位置,并从目标任务中学习偏移量,在卷积计算的过程中计算每个点的偏移,然后提取特征进行卷积。
我们首先定义输入和输出特征映射分别为x和y。p0是输出特征图中的坐标。pn是卷积核在模板中的坐标,标准的卷积过程可以表述为
y(p0)=∑pn∈Tw(pn)·x(p0+pn)
(3)
其中,p0+pn是采样点的坐标,w(pn) 是卷积核中的权值参数,T为内核模板,我们以标准的3×3核为例,则模板可定义为T3×3, 表示为
T3×3={(-1,-1),(-1,0),(-1,1),(0,-1) (0,0),(0,1),(1,-1),(1,0),(1,1)}
(4)
值得注意的是,在传统模板(T)中,点对的值都是整数。
与上面提到的基本卷积不同,可变形卷积在T上增加了一个偏移量,可以这样写
y(p0)=∑pn∈Tw(pn)·x(p0+pn+Δpn)
(5)
其中, {Δpn|n=1,…,N},N=|T| 并且Δpn为小数。
为清晰起见,我们将pn+Δpn写成Pn, 公式可表示为
y(p0)=∑pn∈T*w(pn)·x(p0+Pn)
(6)
其中,T*={P0,P1,…,Pn},N=|T*|, 应该强调的是Pn一个小数点对。由于特征图上x上的坐标均为整数,小数样本点p0+Pn没有实数。因此,我们使用插值函数来计算小数样本点的遗漏值,公式为
x(p)=∑qG(q,p)·x(q)
(7)
q是x上的坐标,G(·,·) 是插值核函数,Pn可以推导为
(8)
p0是输出特征图中的坐标,w(Pn) 是卷积核中的权值参数,因此,通过在卷积网络最后一个block中使用变形卷积取代传统卷积,使得特征的几何变化可以被提取和学习。
由于多尺度特征提取会增加模型的复杂性和参数的数量,而利用池化层提取多尺度特征的优点是非参数的,使网络尽可能的简单。因此使用残差池化[17]在更细粒度的层次上不仅提高了多尺度表示能力,而且减少时间和资源,3种2×2Max-pool操作符的池化比较如图6所示。
图6 3种以2×2 Max-pool操作符的池化比较
(9)
PCB目前还没有标准的缺陷数据集,本文用到的数据集是自行构建的。图7表示常见的6种PCB缺陷数据种类。可以看出PCB缺陷的面积相对较小,人眼很容易忽略这些小缺陷。
图7 常见的6类PCB缺陷
在本文中,我们使用从生产线上收集的真实PCB缺陷数据作为训练集和测试集,使用CCD相机对每个PCB进行拍照,并手工筛选出有缺陷的图片。我们收集了689图像,分辨率为3034×1586,其中有些PCB图像包含了多个缺陷。由于这种高分辨率可能会造成大量的计算量,所以我们将每张图片大小调整为448×448。使用labelimg对图像进行标注,生成与图像名相对应的xml文档,该文档主要是用来存储标注框的大小及位置信息。
为了平衡各种类型缺陷的数据样本,避免对训练产生不利影响,我们去掉了一些边缘处的缺陷和不清晰的图片,最终得到649张缺陷图像。但在生产过程中,由于缺陷的产生是低概率事件,收集缺陷数据的人工和时间成本较高,因此我们利用数据增强技术来增加PCB缺陷图像的数量,最终得到我们的数据集10 493张图像。
同时,为了验证DCR-FRNet的泛化性,在实验中也使用了北京大学人工智能实验室的PCB数据集[18](以下简称北大数据集),该数据集是一个合成的公开数据集,包含1386张图片,6种缺陷类型(露孔、鼠咬、断路、短路、毛刺、余铜),北大数据集与本文数据集示例图像如图8所示。
图8 北大数据集与本文数据集示例图像
由于相机本身成像条件以及在图像采集的过程中会受到外界光照的影响,采集到的图像会存在噪声,噪声的存在不利于模型提取目标特征,因此需要对PCB图像进行预处理操作,增强PCB图像边缘特征,方便后续模型训练与缺陷提取,提升模型的性能。
图像增强部分主要是对PCB图像进行灰度化处理,也可以看作是图像处理的预处理阶段,为后续的图像识别与分析做准备。由于采集到的图像是RGB图像,每个像素都是由红、绿、蓝这3种基色按照不同的比例构成,经过灰度化处理的图像不仅减少了图像的数据量,而且还能提高训练识别效果。
常见灰度化的处理方法有分量法、最大值法、平均值法、加权平均法,经过实验对比,最终采用加权平均法对本文的PCB图像进行灰度化处理。加权平均法也就是将R、G、B以不同的权值进行加权平均。
为防止噪声影响,采用中值滤波去除噪声。常用的去噪方法有高斯滤波和中值滤波,高斯滤波是二维滤波变换,在处理离散噪声时会损失细节信息。中值滤波主要是对所有领域的像素进行排序,然后取其中值为其领域中心的像素,是一种非线性滤波变换,能够保持图像的边缘信息。
实验中用到的配置:Ubuntu 16.04 64位操作系统,显卡驱动为Nvidia Driver 418. 87和CUDA 10.1,第三方函数库Anaconda3,深度学习框架为Pytorch,数据标注工具采用Labelimg,开发语言使用Python。
本文的评价指标使用的是检测任务中常用的评价指标来检测模型的性能,主要涉及4个重要的评价指标:准确率、召回率、mAP以及F1分数。根据PCB测试样本的真实类别与模型的预测类别划分为真正例(TP)、假正例(FP)、真反例(TN)、假反例(FN)。
准确率(Precision)指的是检测目标中正确个数占所有检测目标个数的比例,衡量了模型预测的准确性
(10)
召回率(Recall)指的是检测正确的目标数占整个数据集目标的比例
(11)
mAP是我们评估模型性能的主要指标,是对不同缺陷的平均精度(AP)值的平均值,反映了缺陷检测的准确性
(12)
AP值由准确率和召回率来计算。平均精度(AP)的一般定义是找到上面的Precision-Recall下的面积
(13)
F1分数(F1-Score)是用来同时兼顾模型的准确率与召回率,又称平衡F分数,是召回率与准确率的调和平均数,计算公式如下
(14)
在实验中,我们使用对比实验验证方法,旨在从有限的数据中提取尽可能多的信息,在整个过程中,尽可能多地学习训练样本和测试样本。设置对比实验,与本文的算法在评价指标上进行对比:
(1)SSD:骨干网络为VGG-16。
(2)YOLOv3:骨干网络为darknet53。
(3)FR-16:骨干网络为VGG-16的Faster R-CNN模型。
(4)FR-16F:骨干网络为VGG-16+FPN的Faster R-CNN模型。
(5)FR-101:骨干网络为Resnet 101的Faster R-CNN模型。
(6)FR-101F:骨干网络为Resnet 101+FPN的Faster R-CNN模型。
(7)DCR-FRNet:骨干网络为Resnet 101+PFN+可变形卷积网络+残差池化。
我们在每个子集中随机抽取20%的样本作为测试数据。剩下的80%的图片被平均随机分为6个部分。在每一轮的训练中,使用5个部分作为训练集,使用1个部分作为验证集。每个缺陷在数据集中的数量如表1所示。总共训练40 000次迭代,为了避免训练时间过长,当训练步骤小于5000时,我们设置学习率为0.1,当训练步骤小于20 000时,设置学习率为0.01。较大的学习速率可以加快网络早期训练的收敛速度。在剩下的20 000个训练中,我们使用0.0001作为学习率。
表1 PCB缺陷数据集中训练集和验证集中的数量
本文将DCR-FRNet、SSD、YOLOv3以及Faster R-CNN系列的改进模型进行对比,结果见表2,可以看到DCR-FRNet算法与一阶段的SSD和YOLOv3相比,准确度分别高出了12.7%和2.7%,这是由于增加可变形卷积来应对PCB同一缺陷不同形状的结果。与原始Faster R-CNN对比,由于DCR-FRNet改变了骨干网络,增加了FPN和可变形卷积加残差池化,准确率提高了30.5%,相应的F1分数增加了38.7%。对比同时改变骨干网络并且增加了特征金字塔的FR-101F网络,准确率增加了6.5%,F1分数增加到6.7%。
表2 DCR-FRNet在本文数据集上与不同模型结果对比
除此之外,DCR-FRNet与YOLO、SSD对测试集图像进行检测,结果如图9所示。可以看出本文提出的算法利用了多尺度融合和可变卷积进行提取和学习,在准确率上有很大优势。
图9 DCR-FRNet与其它模型的精确度对比
为了验证本文算法的泛化性,在北大数据集上进行实验验证,实验结果如图10所示。
图10 DCR-FRNet在北大数据集各类缺陷的mAP
测试结果可以用来推导缺陷的类别,坐标以及缺陷属于该类别的置信度。mAP是每个类别AP的平均值。mAP值越高,检测模型在整个类别中的检测性能越好。具体实验结果如图10所示,DCR-FRNet在北大数据集上各类缺陷的mAP分别为93.8%、95.2%、94.5%、94.3%、94.7%、95.6%。
将DCR-FRNet和FR-16F、FR-101FPN做了对照实验,对比结果如图11所示,FR-16F模型的mAP为74.53%,在原始的基础上加上FPN之后,mAP上升至87.93%,可以看出增加FPN可以提高对PCB缺陷检测能力。本文算法又在FPN的基础之上增加可变卷积,mAP提高至95.55%,相对于FR-101提高了21.02%,相对于增加FPN的模型增加了7.62%。可以看出,改进后的网络继承并保留了原有FR-101F网络的优点,由于融合了新的结构和理念,在PCB缺陷检测的mAP得到了提高。此外,改进后的网络对一些较小的对象类别的识别能力显著提高。
图11 与FR-101、FR-101F模型的各类缺陷mAP对比
在本研究中,专注于PCB缺陷检测任务中的6类缺陷,提出了一种基于深度学习的两阶段检测框架。在该框架的特征提取部分,利用多尺度特征金字塔进行特征提取,有利于检测缺陷较小的PCB缺陷。对于PCB缺陷几何变化的处理,使用可变卷积替代传统的卷积进行提取和学习,在主干网络输出特征时构建金字塔模块,利用分层的残差连接来替代传统的池化模块,在不增加计算量的前提下提高缺陷的检测精度。实验结果表明,改进的网络不仅能充分提取图像中的复杂信息,还能识别出原始Faster R-CNN无法识别的小缺陷,该算法在检测精度方面具有很大的优势。但是该模型在PCB检测方面还有一定的局限性,在PCB生产中,由于材料和工艺的不同,即使是同一类型的缺陷也会表现出不同的特性。在未来,我们将收集更多的缺陷样本加入训练集,并对网络进行微调,以适应更多类型的缺陷检测。