陈学仕,苏 通,漆为民
(江汉大学 人工智能学院,湖北 武汉 430056)
现代电子设备的质量靠的不仅是电子组件的质量和性能,而且很大程度上取决于印刷电路板(printed circuit board,PCB)的质量。不可避免的是,电路板由于外观不整洁、阻焊膜在板上分布不均、机器工作中故障等原因,会使得电路板印刷过程中PCB上电路线和焊盘中出现一些瑕疵,需要在生产过程中将瑕疵检测出来。目前,印刷电路板瑕疵检测方面的技术还不能实现多类别瑕疵点的判别,也达不到精准检测出是哪种瑕疵的要求。谢骐阳等[1]提出机器视觉方法检测PCB板瑕疵,首先对图像进行预处理,然后通过图像的对比确定PCB瑕疵的位置,进行瑕疵点的检测,再结合形态学的腐蚀与膨胀算法去除噪声和杂质的干扰,找出图像的不同之处并使用矩形框标记出来,最终实现PCB板检测。陈梦雅等[2]提出一种基于参考法和非参考法结合的图像边缘检测方法。陈灿等[3]提出基于RCNN的印刷电路板检测,使用选择性搜索、卷积神经网络提取特征和SVM进行分类。上述方法存在着模型较为复杂、不能够长足学习到图像特征的不足,使得PCB板瑕疵检测精度不高、速度慢,不能够检测出是哪种瑕疵,不能正确分类到对应的瑕疵,还会存在漏检误检的情况。
目前,目标检测算法分为One Stage和Two Stage两大类。Faster RCNN算法[4]是两步检测方法中最具有代表性的目标检测算法,它的主要贡献是提出了一个区域推荐网络(region propos⁃al network,RPN)。图像从输入到检测分为两个步骤,第一步是识别出目标的前景框,第二步是对前景框进行细分,确定目标类别。与单步检测方法相比,Faster RCNN首先使用标记框对区域建议网络进行训练,然后使RPN能够区分前景和背景,并为下一个特定类别检测网络提供多个建议框。由于Faster RCNN是将区域生成、特征提取、网络训练、目标分类和位置回归于一体,与其他算法相比,Faster RCNN的精度有了显著提高。本文基于改进的Faster RCN算法对印刷电路板进行学习,高效检测出瑕疵点,并应用于工业生产车间检测。将检测出的不同瑕疵进行分类,计算出每类瑕疵检测的准确率,并采取相应的处理措施。检测到的照片是离线保存的,没有实时性要求,这是为了尽可能保证检测的准确性。
Faster RCNN是两阶段检测模型典型代表,融合了区域生成网络RPN与Fast RCNN网络模型,它们是并列关系,各自都可以进行端到端的训练,从而可以检测出分类置信度和定位回归框。Faster RCNN主要由特征提取网络框架、RPN网络和Fast RCNN网络模型构成。
Faster RCNN工作流程是将一张图片输入网络之前,对图片长宽进行调整,将长度调整到608,长宽比不会发生改变,图片上下加灰色条,得到输入网络图片大小(608*608*3),因此图片输入到网络中不会发生失真。之后特征提取网络对图片进行特征提取,得到共享特征图大小(38*38*1 024),然后进行3*3卷积,再进行两个1*1卷积,分别进行分类和回归预测,得到融合区域生成网络RPN。RPN得到建议框对画面物体进行粗略的筛选,并非完全准确预测,接下来还需要进一步调整。RPN的建议框大小并不是一样大,通过传入RoI Pooling层进行调整,然后在共享特征图进行截取,再经过分类预测和回归预测网络进行预测。Faster RCNN整体结构如图1所示。
图1 Faster RCNN网络结构Fig.1 Faster RCNN network structure
Faster RCNN的整个过程是将特征提取网络提取到的特征输入到RPN中,生成前景和背景建议框,用于训练RPN本身。此外,RPN的输出被输入到最终的检测网络中,以确定建议框中目标的具体类别。在测试阶段,RPN确定是否属于前景,然后进行最终的目标检测以确定类别。在目标特征映射上,RPN首先用3*3卷积核对特征图进行卷积,然后将得到结果分成两个分支,连接多个完整的连接层分别进行分类和回归。分类采用softmax函数和线性回归进行坐标调整。通过RPN判断是前景的建议框,然后在RoIPooling调整下,使其为一样的尺寸输入到最终的检测网络。检测网络负责目标分类和修正位置,并输出最终的目标检测结果。
特征提取网络主要是由卷积层、下采样层、Dropout层、全连接层等组成的卷积神经网络[5]。不同层组成方式提取的特征也不同,从而会对检测的精度和时间等指标造成不同的影响。
本文采用Faster RCNN作为PCB缺陷检测的基本框架,其骨干网络采用多种经典的卷积神经网络模型AlexNet、VGG16和残差网络ResNet作为实验的骨干网络。第一个实验的特征提取网络是AlexNet,并首次使用Dropout层,避免了模型过拟合的问题。第二个实验的特征提取网络VGG16是一个卷积神经网络CNN模型,采用连续的几个小卷积核代替较大的卷积核。第三个特征提取网络残差网络ResNet是一个深层的CNN模型,由于其独特的残差模,解决了深层网络训练中梯度消失的问题,可以训练更深层网络。目前常用的是ResNet50和ResNet101,本文采用ResNet101结构(见图2)。
图2 ResNet101网络结构Fig.2 ResNet101 network structure
区域建议网络分为两个步骤。第一步是将图像输入网络后,由特征提取网络对图像进行特征提取。每个像素作为特征图上的定位点,由此生成3种比例、3种尺寸的建议框,所以一个定位点对应9个不同的建议框,这些建议框也被称为anchors[6]。用anchors代替选择性搜索算法来提取候选框,然后选择包含目标的anchors,将筛选出的anchors输入到RoI Pooling层提取特征,按照前景的概率从高到低排序。第二步对候选区域进行分类,预测目标位置。
人工手动校准的目标框被定义为真实框(ground truth)。计算出每一个anchors与真实框的面积,并定义了交并比(intersection over union,IoU)。如果A是真实的样本框,B是候选区域框,则
Faster RCNN设定IoU>0.7的建议框用于正样本训练,IoU<0.3的建议框用于负样本(背景)训练,忽略IoU在0.3到0.7之间的建议框,不用于训练。确定若干正样本与负样本后,这些样例被用于训练RPN识别前景和背景[7],RPN对建议框图片进行一个简单的3*3卷积后经全连接层划分为分类分支和回归分支,分类分支用于判定该建议框是属于前景或背景的概率,回归分支用于对该建议框的中心点和长宽4个参数进行修正。假设一个anchor产生K个建议框,则分类别产生2K个scores,4K个坐标偏移量用来学习分类和坐标回归。RPN结构如图3所示。
图3 RPN结构Fig.3 RPN structure
Faster RCNN中的多任务损失函数由分类损失函数与回归损失函数[8]组成,具体表达式为
式中,i表示第i个建议框;pi表示第i个建议框为前景的概率,前景时p i=1,背景时p i=0;ti表示预测的anchors坐标值,是对应的真实样例框坐标值。Ncls和Nreg分别表0示分类和回归项的权重。Lcls表示前景和背景的对数损失,即
Lreg表示边框回归损失,即
式中,smoothL1是一种损失函数,笔者使用一个分段函数来作为RPN网络的损失函数。此函数在0点附近使用平方损失函数,这样使得它更加平滑,因此被称为平滑L1损失函数,
在Faster RCNN基础上,首先将特征提取网络ResNet101进行改变,然后使用特征金字塔网络(feature pyramid network,FPN)、多尺度训练、锚点框、聚类作为基础改进措施,改进损失函数。
AlexNet提取特征网络一般前面若干层都是由卷积层、池化层等组成,末端是由几层全连接层组成。卷积层能够知道哪个位置有哪些东西,但是不知道他们之间的关联关系,因此不采用AlexNet网络。由于印刷电路板上的瑕疵较小,如果直接采用VGG16,虽然卷积提取到的特征图尺寸不会发生变化,但是下采样会使得特征丢失,从而会直接影响最后的检测精度,故此特征网络不是最佳选择。本文采用的特征提取网络对ResNet中的残差块结构进行了小改进,在原有的残差单元结构中增加小的残差块,使网络能够在更细粒度上表示多尺度特征,并增加每一层网络的感受野,解决网络深度增加时带来的梯度消失问题,实现单位映射之间连接路线,能够提取目标更深层次的特征,实现较好的识别效果。这样改进的本质就是分组卷积,使算法能更好地对瑕疵进行分类。
此步骤主要变化是修改anchor尺寸以适配PCB数据集,采用的方法是聚类算法。
在原来Faster RCNN算法中,锚框的纵横比包括1∶2、1∶1和2∶1三种比例,3种尺寸大小,所以每个像素点有9个锚框,这些比例是从标准VOC数据集中获得的。由于不同数据集的宽高比不同,如果直接使用默认锚框比例,则有些目标无法准确识别。因此,本文采用K-means聚类方法来提高锚框的纵横比,K-means[9]算法是一种多迭代的聚类方法。首先选取K个值作为聚类中心,然后计算其他对象到每个聚类中心的距离,将对象加入离它最近的聚类中心,经过多次添加形成聚类。本文采用聚类的方法来重新生成9个簇点,达到给定的训练次数或者给定的阈值就停止训练,9个锚框的比例和尺寸大小都是通过训练得到。
FPN主要解决目标检测中的多尺度问题。通过简单改变网络连接,在不增加原模型计算量的前提下,大幅度提高了小目标检测的性能[10]。高阶特征用于上采样,低阶特征用于自顶向下连接,并对每一层进行预测。每层金字塔网络输出相应比例尺的目标分类和定位盒。顶部的金字塔特征图对较大的目标有较好的检测效果,而底部的金字塔特征图可以增强对小目标的检测效果。在嵌入金字塔特征网络后,分别对各层的RPN进行训练和回归。金字塔每层的RPN将不同尺度目标的候选盒输入细分检测网络,得到目标回归盒和缺陷分类。
构造多尺度金字塔,期望模型能够具备检测不同大小尺度物体的能力。FPN将不同的特征进行融合再分级预测。输入为骨干网络每一层的输出:将特征进行上采样,再与上一层特征相加得到FPN结构每一层的输出,FPN结构和骨干网络是相互独立的。在bottom-up路径中,取ResNet网络最后4个残差块生成的4个特征图,它们相对于原图的尺度缩小倍数为{4,8,16,32}。尺寸缩小32倍的特征图经过1*1卷积得到M 5,M 5一边经过3*3卷积得到P5,一边经过2倍上采样(尺寸放大一倍),再与尺寸缩小16倍的特征图进行堆叠,依次下去,得到融合后不同尺度的特征图P4、P3、P2。FPN网络结构如图4所示。
图4 FPN网络结构Fig.4 FPN network structure
IoU损失函数只考虑检测框和目标框重叠面积,没有解决边界框不重合时的问题[11],没有考虑边界框的中心距离信息,没有考虑边界框宽高比的尺度信息。因此,IoU存在以下缺点:第一,如果两个框没有相交,则IoU=0,这时无法反映两个框的距离(相似程度),并且损失函数此时不存在梯度,无法通过梯度下降进行训练;第二,即使相同的IoU也不能代表检测框的定位效果相同[12]。
同时考虑到框回归的3个几何因素:重叠区域、中心点距离、宽高比,采用下面的损失函数,
式中,R(B,BGT)表示预测框与GT框的惩罚项(在IoU损失函数中,R(B,BGT)=0),即
式中,b和bgt表示预测框与GT框的中心点,p2表示欧式距离,c表示预测框B与真实框的最小外接矩阵的对角线距离,如图5所示,绿色框表示真实框,黑色框表示预测框,c和d分别表示最小外接矩形的对角线距离和两个框中心点的欧氏距离。
图5 参数c和d的示意图Fig.5 Schematic diagram of parameters c and d
改进后的Faster RCNN总损失函数由分类损失函数和回归损失函数两部分组成,
本次数据集总共有漏孔、缺口、断路、短路、毛刺、余铜6种类别,加上背景类,总共7个类别。各类别之间框的数量相对较平均。
本文的实验环境配置:在百度AI Studio平台下,RAM为32 G,GPU为v100,显存为16 G,实验所用深度学习框架为百度公司开发的PaddlePaddle 1.8.0,训练迭代次数设置为15 000轮。
PCB瑕疵数据集:来自工业生产线上工业相机拍摄PCB裸板,其中包含3 860张图像以及6种缺陷(漏孔、缺口、断路、短路、毛刺、余铜),用于检测、分类和配准任务。随机选择2 260张图像作为训练集,1 000张图像作为验证集,600张图像作为测试集。检测前电路板样例如图6所示。
图6 电路板图Fig.6 Circuit board diagram
目前常用的目标检测评价方法有平均精度(average precision,AP)、平均精度均值(mean average precision,mAP)、准确率(P)和召回率[13]。设TP表示在正样本集中被预测为正样本的个数;FN表示在正样本集中被预测为负样本的个数;FP表示在负样本集中被预测为正样本的个数;FN表示在负样本集中被预测为负样本的个数,则P、召回率、AP和mAP分别为
特征提取网络模型是Faster RCNN的核心部分,卷积神经网络提取的特征好坏影响后续训练质量的好坏。因此,选取AlexNet、VGG16、ResNet101三个卷积神经网络作为骨干网络分别进行实验,骨干网络再结合FPN网络和锚框聚类方法为基础训练策略。结合迁移学习思想,在有预训练基础模型上进行训练,这样可以大大减少训练时间。增大训练轮数有助于网络收敛得更好,可提高mAP。设置训练轮数为15 000,IoU的阈值分别为0.5和0.75进行比较,IoU为0.5时训练结果更好,所以最终IoU阈值设置为0.5,初始学习率0.000 1,实验结果见表1。
表1 使用不同骨干网络效果对比Tab.1 Comparison of effects of using different backbone networks
表1的实验数据显示,以ResNet深残差网络作为骨干网时,模型在电路板上的瑕疵检测平均精度最高,说明深度残差网络能更好地拟合目标函数。由于深度残差网络使用残差模块来增加模型的深度,这样就避免了梯度消失的问题,因此模型的学习能力和检测速度均得到了显著提高,与其他网络模型相比,深度残差网络的搭建层数比较多,因此提高精度的同时,也导致检测速度略有下降。
在选取深度残差网络作为骨干网络基础上,对损失函数smoothL1和DIoU再进行对比,得出最优的一个损失函数性能。采用ResNet101作为骨干网络,融合FRP网络和锚框聚类方法为基础训练策略[14],使用改进后的损失函数替换原损失函数,实验结果见表2。
表2 使用不同损失函数检测效果对比Tab.2 Comparison of detection effects using different loss functions
表2的数据显示,在以IoU=0.5的mAP作为评价指标时,训练相同轮数条件下,当损失函数DIoU作为边界框回归损失函数时,模型在PCB检测中的mAP值达到92.6%,比原来损失函数smoothL1在平均精度上提高了5.4%,在平均精度均值评价指标上提高了4.9%,在速度上也有小幅提高。结果表明,以DIoU为边界框回归损失函数可以有效地改善模型的训练过程,并促进模型收敛到最优值。
将原始Faster RCNN算法和改进后的算法进行对比,Faster RCNN在骨干网络、融合金字塔特征、损失函数、锚点框聚类[15]等改进后,训练相同轮数,结果见表3。
表3 Faster RCNN算法和改进Faster RCNN算法对比Tab.3 Comparison between the Faster RCNN algorithm and the improved Faster RCNN algorithm
表3的实验数据表明,采用改进后的Faster RCNN算法对PCB板瑕疵进行检测,每一个类别瑕疵点AP比Faster RCNN都上升了约20%。每张图片瑕疵点平均有3.88个,而原Faster RCNN算法平均检测出3.61个瑕疵点,故还存在漏检的情况,改进后的算法平均每张图检测出3.86个瑕疵点,漏检情况得到改善。YOLO系列属于单阶段目标检测算法,在YOLO9000上也训练了对应的瑕疵检测模型,经过对比的实验后精度远高于单阶段目标检测算法,精度和速度要求可满足工业界的需要。但是改进后的Faster CRNN在速度上还有提升空间,实验数据见表4。
表4 改进后Faster RCNN算法与YOLO9000算法检测效果对比Tab.4 Detection effect comparison of improved Faster RCNN algorithm and YOLO9000 algorithm
本文算法检测出电路板的瑕疵点及其标注结果见图7。
图7 检测出不同瑕疵点图Fig.7 Different defect points detected
本文在原Faster RCNN算法的基础上进行优化,通过3种骨干网络实验对比,选取了效果最好的ResNet101,边框回归函数使用了损失函数DIoU。不再使用原来anchors的每个定位点3个默认尺寸和默认比例,而是直接用聚类方法训练9个锚框给每一个定位点。损失函数DIoU和聚类方法使得目标定位更加准确,大幅提高了PCB板瑕疵检测的平均精度和模型整体平均精度均值,但在速度上还有待进一步改进。