掌桥专利:专业的专利平台
掌桥专利
首页

一种基于改进YOLOv5的PCB板表面缺陷检测方法

文献发布时间:2023-06-19 18:37:28


一种基于改进YOLOv5的PCB板表面缺陷检测方法

技术领域

本发明属于模式识别技术领域,具体涉及一种PCB板表面缺陷检测方法。

背景技术

印刷电路板是组成电子产品的重要部分,其质量检测成为满足电子产品能否长期正常运作的前提。印刷电路板(Printed Circuit Board,PCB)主要由绝缘基材和导体两类材料组成,在各种电子产品中起到支撑和互连的作用。在印刷电路板出现之前,早期电子元器件之间的互连依靠普通导线直接连接完成,存在尺寸大、装配工艺复杂和电路稳定性差等问题。但是,随着工业自动化制造技术的迅速发展,电子产品的制造开始朝着多功能、集成化和智能化的方向发展。其中,印刷电路板作为电子产品的基础部件,其质量直接影响电子产品的性能。然而,PCB的制作工艺非常复杂,在整个生产制造过程中不可避免受到各种因素的影响,对其质量检测是一项非常重要的工作。虽然深度学习目标检测方法在PCB表面缺陷检测领域中取得了极大的发展,但是依旧存在标签样本数据缺乏、特征学习能力有限、深度网络训练困难以及检测精度和速度不均衡等问题。目标小,难以发现,前景和背景太接近,借鉴COD伪装目标检测和小目标检测的优点去融合,attention有助于更好的定位和识别小目标缺陷。

发明内容

为了克服现有技术的不足,本发明提供了一种基于改进YOLOv5的PCB板表面缺陷检测方法,改进YOLOv5的特征融合网络PANet为BiFPN结构,且添加了SimAM注意力机制,对空间金字塔池化模型SPPF优化后为SPPFCSPC模型,并且缩减了head中用于检测中、大目标的P4、P5结构,使其能够更加准确提取并检测小目标的缺陷,来弥补缺陷检测尺度不足的问题,同时为了进一步解决小目标缺陷检测,优化了训练方法,采用迁移学习的方法,对训练网络的训练权重和参数进行多重迁移化处理,使得短期训练的程度更加充分。

本发明解决其技术问题所采用的技术方案包括如下步骤:

步骤1:获取数据集并进行数据预处理;

步骤1-1:对获取的PCB板表面缺陷原始数据集进行截取、翻转、映射,将数据集进行标签转换并对数据集进行划分;将数据集划分为训练、验证和测试集;

步骤1-2:采用mosaic数据增强方式,使用4张图片的数据,经过随机缩放、随机裁剪、随机分布的方式进行拼接,将4张图片组合成一张图片;

步骤1-3:将数据集图像统一缩放到同一个尺寸,然后送入检测网络YOLOv5s_BSSs中;

所述检测网络YOLOv5s_BSSs具体描述如后;

步骤2:在YOLOv5主干中,将原来的Focus操作替换成一个卷积层,增加了SimAM注意力机制,并且对空间金字塔池化结构SPPF进行优化,改为SPPFCSPC,具体流程为:

步骤2-1:对于第0层,[-1,1,Conv,[64,6,2,2]]的模块参数args[64,6,2,2]被解析成[3,32,6,2,2],64代表卷积核的数量,最终的卷积核数量乘以width_multiple,为64×0.5=32即第0层输出的维度;6为卷积核大小,2为卷积核的步长,3是本层的输入维度因为输入的图像是彩色的RGB 3通道;

步骤2-2:对于第1层,[-1,1,Conv,[128,3,2]]的模块参数[128,3,2]被解析成[32,64,3,2],32为通道数即上一层输出的维度;128代表卷积核的数量,最终的卷积核数量为128×0.5=64即第1层输出的维度;

步骤2-3:对于第2层,[-1,3,C3,[128]]的模块参数[128]被解析成[64,64,1],64为通道数即上一层输出的维度;128代表卷积核的数量,最终的卷积核数量为128×0.5=64即第2层输出的维度;

步骤2-4:对于第3层,[-1,1,Conv,[256,3,2]]的模块参数[256,3,2]被解析成[64,128,3,2],64为通道数即上一层输出的维度;256代表卷积核的数量,最终的卷积核数量为256×0.5=128即第3层输出的维度;

步骤2-5:对于第4层,[-1,6,C3,[256]]的模块参数[256]会被解析成[128,128,2],128为通道数即上一层输出的维度;256代表卷积核的数量,最终的卷积核数量为256×0.5=128即第4层输出的维度;

步骤2-6:对于第5层,[-1,1,Conv,[512,3,2]]的模块参数[512,3,2]被解析成[128,256,3,2],128为通道数即上一层输出的维度;512代表卷积核的数量,最终的卷积核数量为512×0.5=256即第5层输出的维度;

步骤2-7:对于第6层,[-1,9,C3,[512]]的模块参数[512]被解析成[256,256,3],256为通道数即上一层输出的维度;256代表卷积核的数量,最终的卷积核数量为512×0.5=256即第6层输出的维度;

步骤2-8:对于第7层,[-1,1,Conv,[1024,3,2]]的模块参数[1024,3,2]被解析成[256,512,3,2],256为通道数即上一层输出的维度;1024代表卷积核的数量,最终的卷积核数量为1024×0.5=512即第7层输出的维度;

步骤2-9:对于第8层,[-1,3,C3,[1024]]的模块参数[1024]被解析成[512,512,1],512为通道数即上一层输出的维度;1024代表卷积核的数量,最终的卷积核数量为1024×0.5=512即第8层输出的维度;

步骤2-10:对于第9层,[-1,1,SimAM,[1024]]的模块参数[1024]会被解析成[512,512],512为通道数即上一层输出的维度;1024代表卷积核的数量,最终的卷积核数量为1024×0.5=512即第9层输出的维度;

步骤2-11:对于第10层,[-1,1,SPPFCSPC,[1024,5]]的模块参数[1024,5]被解析成[512,512,5],512为通道数即上一层输出的维度;1024代表卷积核的数量,最终的卷积核数量为1024×0.5=512即第10层输出的维度;

步骤3:在YOLOv5的Neck中,将原来的Concat替换成BiFPN,并且将P4、P5结构去掉以减少网络规模,具体流程为:

步骤3-1:对于第11层,[-1,1,Conv,[512,1,1]]的模块参数[512,1,1]被解析成[512,256,1,1],512为通道数即上一层输出的维度;512代表卷积核的数量,最终的卷积核数量为512×0.5=256即第11层输出的维度;

步骤3-2:对于第12层,[-1,1,nn.Upsample,[None,2,nearest]]的模块参数不变;

步骤3-3:对于第13层,[[-1,6],1,BiFPN_Add2,[256,256]]的模块参数[256,256]不变;

步骤3-4:对于第14层,[-1,3,C3,[512,False]]的模块参数[512,False]被解析成[256,256,1,False],256为通道数即上一层输出的维度;512代表卷积核的数量,最终的卷积核数量为512×0.5=256即第14层输出的维度;

步骤3-5:对于第15层,[-1,1,Conv,[256,1,1]]的模块参数[256,1,1]被解析成[256,128,1,1],256为通道数即上一层输出的维度;256代表卷积核的数量,最终的卷积核数量为256×0.5=128即第15层输出的维度;

步骤3-6:对于第16层,[-1,1,nn.Upsample,[None,2,nearest]]的模块参数不变;

步骤3-7:对于第17层,[[-1,4],1,BiFPN_Add2,[128,128]]的模块参数[128,128]不变;

步骤3-8:对于第18层,[-1,1,C3,[256,False]]的模块参数[256,False]被解析成[128,128,1,1],125为通道数即上一层输出的维度;256代表卷积核的数量,最终的卷积核数量为256×0.5=128即第18层输出的维度;

步骤4:将18层的输出作为Detect层的输入,推理得到预测框;

目标框回归,计算公式如下:

b

b

b

b

其中(b

使用Sigmoid函数处理偏移量,将预测框的中心点约束到当前网格中,使预测的偏移值保持在(0,1)范围内,再根据目标框回归计算公式,预测框中心点坐标的偏移量保持在(-0.5,1.5)范围内;

步骤5:正负样本匹配;

YOLOv5的每个检测层上的每个网格都预设了多个anchor先验框,对anchor先验框进行筛选,将其划分为正样本和负样本;采用基于宽高比例的匹配策略,具体步骤如下:

步骤5-1:对于每一个人工标注的真实框Ground Truth,分别计算它与9种不同anchor的宽与宽的比值(w

步骤5-2:找到Ground Truth与anchor的宽与宽的比值(w

步骤5-3:若Ground Truth与anchor的比值小于设定的比值阈值,则anchor就负责预测此Ground Truth,即anchor所回归得到的预测框就被称为正样本,剩余所有的预测框都是负样本;

步骤6:损失计算;

步骤6-1:总损失;

YOLOv5的损失包括三个方面:矩形框损失bbox

Loss=box

其中,box

步骤6-2:边界框损失;

使用CIoU计算边界框损失,CIoU的惩罚项为:

其中,ρ

α是权重参数,它的表达式为:

v是用来衡量宽高比的一致性,它的表达式为:

其中,w

所以CIoU的损失计算公式为:

步骤6-3:分类损失;

使用二元交叉熵函数计算分类损失,二元交叉熵函数的定义为:

其中y为输入样本对应的标签,正样本为1,负样本为0,p为模型预测该输入样本为正样本的概率;假设

L=-log p

步骤6-4:置信度损失;

YOLOv5使用二元交叉熵函数计算置信度损失;对于不同尺度的检测层上得到的置信度损失,YOLOv5分配了不同的权重系数,按照检测层尺度从大到小的顺序,对应的权重系数分别为4.0、1.0、0.4;

步骤7:采用迁移学习训练方法,对训练网络的训练权重和参数进行多重迁移化处理,增强短期训练的程度。

优选地,所述box

优选地,所述迁移学习方法,具体步骤为:

(1)先将网络在COCO数据集上进行训练,得到最优的训练权重;

(2)然后将所得最优权重当作PCB板缺陷检测的预训练权重,对网络进行训练。

本发明的有益效果如下:

1.本发明与原始YOLOv5模型相比,改进了特征融合网络PANet为BiFPN,加权双向金字塔结构的加入,融合机制可以提升网络对不同尺度的目标的检测效果;

2.本发明在Backbone C3模块后,加入SimAM注意力检测机制,使网络对于小目标缺陷的关注提升,使得PCB板表面缺陷检测的精确度有所提高;

3.由于检测的对象为PCB板表面缺陷,都是小目标,所以本发明将head中用以检测中、大目标的P4、P5结构去掉,调整了多尺度预测层的个数,裁剪掉冗余网络层,以缩小模型的规模,减少了参数量和计算量,提高检测速度;

4.本发明在SPPF的结构基础上引入优化模型SPPFCSPC,可以有效避免对图像区域裁剪、缩放操作导致的图像失真等问题,同时解决了卷积神经网络对图相关重复特征提取的问题,大大提高了产生候选框的速度,且节省了成本;

5.本发明使用迁移学习方法训练模型,深度迁移网络要比随机初始化权重效果好,提升检测效果的同时,加速了网络的学习和优化。

附图说明

图1是本发明PCB板缺陷检测流程图。

图2是本发明YOLOv5s_BSSs结构图。

图3是本发明实施例检测结果图。

图4是本发明实施例P-R曲线图。

图5是本发明实施例检测评价指标图。

具体实施方式

下面结合附图和实施例对本发明进一步说明。

本发明的目的是解决现有目标检测技术中对小目标检测识别率不够高的问题,提供一种在YOLOv5原始模型基础上进行图像增强,并加入BiFPN结构、SimAM注意力机制和优化的SPPF结构,且缩减P4、P5结构并利用迁移学习方法训练进而提高PCB板表面缺陷识别率的目标检测方法;通过对加入不同机制的模型进行横向对比,对模型的检测识别率都带来提升,最后得到识别效果最好的YOLOv5s_BSSs模型。

如图1所示,一种基于改进YOLOv5的PCB板表面缺陷检测方法,包括以下步骤:

(1)对获取的原始数据集进行截取、翻转、映射,获得更丰富的数据集,将数据集进行标签转换并对数据集进行划分;

(2)在输入端输入数据集,训练时采用mosaic数据增强方式,load_mosaic将随机选取4张图片组合成一张图片,输出的img_size为self.img_size*self.img_size,重新选取4张图像mosaic增强,将mosaic增强后的图像与之前mosaic增强后的数据进行mixup数据增强;

(3)在网络训练中,网络在初始锚框的基础上输出预测框,预设了输入图像为640×640分辨率对应的anchor尺寸。由于是对小目标的检测,所以初始锚框只设定小目标检测框[10,13,16,30,33,23],其中包含三种尺寸(长、宽)的锚框,进而和真实groundtruth进行比对,计算两者差距,再反向更新,迭代网络参数;每次训练时,自适应的计算不同训练集中的最佳锚框值;

(4)将原始图像统一缩放到一个标准尺寸,然后送入检测网络中;

(5)如图2所示,在主干(Backbone)中,将原来的Focus操作替换成一个卷积层,增加了SimAM注意力机制,并且对空间金字塔池化结构SPPF进行优化,改为SPPFCSPC,具体流程为:

S1对于第0层来说,[-1,1,Conv,[64,6,2,2]]的模块参数args[64,6,2,2]会被解析成[3,32,6,2,2],64代表卷积核的数量,最终的卷积核数量要乘以width_multiple,也是就64×0.5=32(也就是第0层输出的维度);6为卷积核大小,2为卷积核的步长,3(本层的输入维度)因为输入的图像是彩色的RGB 3通道的;

S2对于第1层来说,[-1,1,Conv,[128,3,2]]的模块参数[128,3,2]会被解析成[32,64,3,2],32为通道数(来自上一层输出的维度);128代表卷积核的数量,最终的卷积核数量为128×0.5=64(也就是第1层输出的维度);

S3对于第2层来说,对于第2层来说,[-1,3,C3,[128]]的模块参数[128]会被解析成[64,64,1],64为通道数(来自上一层输出的维度);128代表卷积核的数量,最终的卷积核数量为128×0.5=64(也就是第2层输出的维度);

S4对于第3层来说,[-1,1,Conv,[256,3,2]]的模块参数[256,3,2]会被解析成[64,128,3,2],64为通道数(来自上一层输出的维度);256代表卷积核的数量,最终的卷积核数量为256×0.5=128(也就是第3层输出的维度);

S5对于第4层来说,[-1,6,C3,[256]]的模块参数[256]会被解析成[128,128,2],128为通道数(来自上一层输出的维度);256代表卷积核的数量,最终的卷积核数量为256×0.5=128(也就是第4层输出的维度);

S6对于第5层来说,[-1,1,Conv,[512,3,2]]的模块参数[512,3,2]会被解析成[128,256,3,2],128为通道数(来自上一层输出的维度);512代表卷积核的数量,最终的卷积核数量为512×0.5=256(也就是第5层输出的维度);

S7对于第6层来说,[-1,9,C3,[512]]的模块参数[512]会被解析成[256,256,3],256为通道数(来自上一层输出的维度);256代表卷积核的数量,最终的卷积核数量为512×0.5=256(也就是第6层输出的维度);

S8对于第7层来说,[-1,1,Conv,[1024,3,2]]的模块参数[1024,3,2]会被解析成[256,512,3,2],256为通道数(来自上一层输出的维度);1024代表卷积核的数量,最终的卷积核数量为1024×0.5=512(也就是第7层输出的维度);

S9对于第8层来说,[-1,3,C3,[1024]]的模块参数[1024]会被解析成[512,512,1],512为通道数(来自上一层输出的维度);1024代表卷积核的数量,最终的卷积核数量为1024×0.5=512(也就是第8层输出的维度);

S10对于第9层来说,[-1,1,SimAM,[1024]]的模块参数[1024]会被解析成[512,512],512为通道数(来自上一层输出的维度);1024代表卷积核的数量,最终的卷积核数量为1024×0.5=512(也就是第9层输出的维度);

S11对于第10层来说,[-1,1,SPPFCSPC,[1024,5]]的模块参数[1024,5]会被解析成[512,512,5],512为通道数(来自上一层输出的维度);1024代表卷积核的数量,最终的卷积核数量为1024×0.5=512(也就是第10层输出的维度)。

(6)在Neck中,将原来的Concat替换成BiFPN,并且将原本用来检测中、大尺寸的P4、P5结构减去以减少网络规模,具体流程为:

S1对于第11层来说,[-1,1,Conv,[512,1,1]]的模块参数[512,1,1]会被解析成[512,256,1,1],512为通道数(来自上一层输出的维度);512代表卷积核的数量,最终的卷积核数量为512×0.5=256(也就是第11层输出的维度);

S2对于第12层来说,[-1,1,nn.Upsample,[None,2,nearest]]的模块参数不变;

S3对于第13层来说,[[-1,6],1,BiFPN_Add2,[256,256]]的模块参数[256,256]不变;

S4对于第14层来说,[-1,3,C3,[512,False]]的模块参数[512,False]会被解析成[256,256,1,False],256为通道数(来自上一层输出的维度);512代表卷积核的数量,最终的卷积核数量为512×0.5=256(也就是第14层输出的维度);

S5对于第15层来说,[-1,1,Conv,[256,1,1]]的模块参数[256,1,1]会被解析成[256,128,1,1],256为通道数(来自上一层输出的维度);256代表卷积核的数量,最终的卷积核数量为256×0.5=128(也就是第15层输出的维度);

S6对于第16层来说,[-1,1,nn.Upsample,[None,2,nearest]]的模块参数不变;

S7对于第17层来说,[[-1,4],1,BiFPN_Add2,[128,128]]的模块参数[128,128]不变;

S8对于第18层来说,[-1,1,C3,[256,False]]的模块参数[256,False]会被解析成[128,128,1,1],125为通道数(来自上一层输出的维度);256代表卷积核的数量,最终的卷积核数量为256×0.5=128(也就是第18层输出的维度)。

(7)将18层的输出作为Detect层的输入,推理得到预测框;

(8)目标框回归,计算公式如下:

b

b

b

b

其中(b

为了将预测框的中心点约束到当前网格中,使用Sigmoid函数处理偏移量,使预测的偏移值保持在(0,1)范围内。这样一来,根据目标框回归计算公式,预测框中心点坐标的偏移量保持在(-0.5,1.5)范围内;

(9)正负样本匹配,YOLOv5的每个检测层上的每个网格都预设了多个anchor先验框,但并不是每个网格中都存在目标,也并不是每个anchor都适合用来回归当前目标,因此需要对这些anchor先验框进行筛选,将其划分为正样本和负样本。本文的正负样本指的是预测框而不是Ground Truth(人工标注的真实框)。YOLOv5采用的是基于宽高比例的匹配策略,它的大致流程如下:

S1对于每一个Ground Truth(人工标注的真实框),分别计算它与9种不同anchor的宽与宽的比值(w

S2找到Ground Truth与anchor的宽与宽的比值(w

S3若Ground Truth与anchor的比值小于设定的比值阈值(超参数中默认anchor_t=4.0),那么这个anchor就负责预测这个Ground Truth,即这个anchor所回归得到的预测框就被称为正样本,剩余所有的预测框都是负样本。

通过上述方法,不仅筛选了正负样本,同时对于部分Ground Truth在单个尺度上匹配了多个anchor来进行预测,总体上增加了一定的正样本数量。除此以外,YOLOv5还通过跨网格扩充、跨分支扩充方法增加正样本的个数,从而加快收敛速度。

(10)损失计算:

S1总损失:YOLOv5对特征图上的每个网格进行预测,得到的预测信息与真实信息进行对比,从而指导模型下一步的收敛方向。损失函数的作用就是衡量预测信息和真实信息之间的差距,若预测信息越接近真实信息,则损失函数值越小。YOLOv5的损失主要包含三个方面:矩形框损失(bbox

Loss=box

其中,box

S2边界框损失:使用CIoU来计算边界框损失。CIoU是在DIoU的基础上,进一步考虑了Bounding Box的宽高比。CIoU是在DIoU的惩罚项基础上添加了一个影响因子α

其中,ρ

其中α是权重参数,它的表达式为:

v是用来衡量宽高比的一致性,它的表达式为:

所以CIoU的损失计算公式为:

S3分类损失:使用二元交叉熵函数来计算分类损失。二元交叉熵函数的定义为:

其中y为输入样本对应的标签(正样本为1,负样本为0),p为模型预测该输入样本为正样本的概率。假设

L=-log p

S4置信度损失:每个预测框的置信度表示这个预测框的可靠程度,值越大表示该预测框越可靠,也表示越接近真实框。根据网格对应的预测框与真实框的CIoU作为该预测框的置信度标签,与计算分类损失一样,YOLOv5默认使用二元交叉熵函数来计算置信度损失。除此以外,对于不同尺度的检测层上得到的置信度损失,YOLOv5分配了不同的权重系数,按照检测层尺度从大到小的顺序,对应的默认的权重系数分别为4.0、1.0、0.4,即用于检测小目标的大尺度特征图上的损失权重系数更大,从而使得网络在训练时更加侧重于小目标。

(11)同时为了进一步解决小目标缺陷检测,优化了训练寻方法,采用迁移学习的方法,对训练网络的训练权重和参数进行多重迁移化处理,使得短期训练的程度更加充分。

改进YOLOv5的PCB板表面缺陷检测模型,改进特征融合网络为BiFPN结构,且添加了SimAM注意力机制以及减去P4、P5结构的方法,具体步骤为:

(1)加入加权双向金字塔结构(BiFPN),提升检测效果:

S1.在common.py构建Concat_BiFPN;

S2.在yolo.py注册BiFPN模块;

S3.修改yaml文件,需要修改head(特征融合网络);

S4.将train.py中改为本文的yaml文件即可。

(2)添加SimAM注意力机制,可以让网络更加关注待检测目标:

S1.在common.py构建SimAM模块;

S2.在yolo.py注册SimAM模块;

S3.修改yaml文件,在backbone中,在C3模块后加入ECA模块(第9层)。

(3)减去head中的用以检测中、大目标的P4、P5模块,从而减小了模型的规模,可以减少参数量和计算量。

迁移学习训练方法的具体步骤为:

(1)先将网络在COCO数据集上进行训练,得到最优的训练权重;

(2)然后将所得最优权重当作PCB板缺陷检测的预训练权重,对网络进行训练。

具体实施例:

1、缺陷检测方法的数据集准备具体步骤为:

(1)数据集获取及增强,数据来源于北京大学智能机器人开放实验室提供的公开数据集,包含六种常见的缺陷,对数据集进行截取、翻转、映射,获得更多的数据集;

(2)数据集格式转换,通过数据集格式转换算法将数据集标签由xml格式转换成txt格式;

(3)数据集划分,通过数据集划分算法将数据集划分为训练、验证和测试集,并将相应的训练、验证和测试集标签划分开。

2、缺陷检测方法网络结构为:

(1)输入端:数据增强、自适应锚框计算、自适应图片缩放;

S1 Mosaic数据增强:因为小目标的AP一般比中目标和大目标低很多,但小目标的分布并不均匀,故采用4张图片的数据,随机缩放、随机裁剪、随机分布的方式进行拼接,丰富了数据集的同时,随机缩放增加了很多小目标,让网络的鲁棒性更好,而且可以减少GPU的使用数,一个GPU就可以达到比较好的效果;

S2自适应锚框计算:在YOLO算法中,针对不同的数据集,都会有初始设定长宽的锚框,在网络训练中,网络在初始锚框的基础上输出预测框,进而和真实框Groundtruth进行比对,计算两者差距,再反向更新,迭代网络参数。Yolov5中将此功能嵌入到代码中,每次训练时,自适应的计算不同训练集中的最佳锚框值;

S3自适应图片缩放:在常用的目标检测算法中,不同的图片长宽都不相同,因此常用的方式是将原始图片统一缩放到一个标准尺寸,再送入检测网络中。Yolov5代码中对此进行了改进,也是Yolov5推理速度能够很快的一个不错的trick。在项目实际使用时,很多图片的长宽比不同。因此缩放填充后,两端的黑边大小都不同,而如果填充的比较多,则存在信息冗余,影响推理速度。因此在Yolov5代码中datasets.py的letterbox函数中进行了修改,对原始图像自适应的添加最少的黑边。图像高度上两端的黑边变少了,在推理时,计算量也会减少,即目标检测速度会得到提升。算法中具体计算步骤为:计算缩放比例、计算缩放后的尺寸、计算黑边填充数值。

(2)Backbone:Conv结构、C3结构、SimAM、SPPFCSPC;

S1将原来的Focus操作替换成一个卷积层,Conv模块中封装了三个功能:包括卷积(Conv2d)、Batch Normalization和Swish激活函数,方便导出模型。将Focus替换成一个等效的Conv(kernel=6,stride=2,padding=2),同时使用autopad(k,p)实现了padding的效果,减少了参数量(params)和计算量(FLOPs),降低了CUDA显存的消耗,从而提升了前向和后向传递的速度;

S2 Bottleneck1:Bottleneck模块借鉴了ResNet的残差结构,其中一路先进行1×1卷积将特征图的通道数减小一半,从而减少计算量,再通过3×3卷积提取特征,并且将通道数加倍,其输入与输出的通道数是不发生改变的,而另外一路通过shortcut进行残差连接,与第一路的输出特征图相加,从而实现特征融合,Backbone1中的Bottleneck都默认使shortcut为True;

S3 C3模块:C3模块,替代了早期的BottleneckCSP模块,这两者结构作用基本相同,均为CSP架构,只是在修正单元的选择上有所不同,C3模块包含了3个标准卷积层以及多个Bottleneck模块。C3模块相对于BottleneckCSP模块所不同的是,经过Bottleneck模块输出后的Conv模块被去掉了。但是YOLOv4和YOLOv5的Backbone虽然借鉴了CSPNet,但实际上并没有按照CSPNet原论文中那样将输入的特征图在通道维度上划分成两个部分,而是直接用两路的1×1卷积对输入特征图进行变换;

S4引入SimAM注意力机制:已有研究BAM、CBAM分别将空间注意力与通道注意力进行并行或串行组合。然而,人脑的两种注意力往往是协同工作,因此,采用统一权值的注意力模块。为更好的实现注意力需要评估每个神经元的重要性。在神经科学中,信息丰富的神经元通常表现出与周围神经元不同的放电模式。而且,激活神经元通常会抑制周围神经元,即空域抑制。换句话说,具有空域抑制效应的神经元应当赋予更高的重要性。最简单的寻找重要神经元的方法:度量神经元之间的线性可分性。因此,定义了如下能量函数:

其中,

理论上,每个通道有M=H×W个能量函数,但上式具有如下解析解:

其中,

由于每个通道上所有神经元都遵循相同的分布,因此可以先对输入特征在H和W两个维度上计算均值和方差,最小能量如下:

上式意味着:能量越低,神经元t与周围神经元的区别越大,重要性越高。因此神经元的重要性可以通过1/

推导了能量函数并挖掘了神经元的重要性,按照注意力机制的定义,需要对特征进行增强处理,整个过程可以表示为:

S5 SPPFCSPC:在SPPF的结构基础上引入优化模型SPPFCSPC,SPP全程为空间金字塔池化结构,可以有效避免对图像区域裁剪、缩放操作导致的图像失真等问题,同时解决了卷积神经网络对图相关重复特征提取的问题,大大提高了产生候选框的速度,且节省了成本。而SPPF结构是将输入串行通过多个5x5大小的MaxPool层,简单的说,就是用2个5x5的卷积操作代替一个9x9的卷积操作,3个5x5的卷积操作代替一个13x13的卷积操作。感受野是一样的,但是计算时间快了很多;借鉴SPPCSPC的思想将SPPF优化了一下,得到了SPPFCSPC,在保持感受野不变的情况下获得速度提升。

(3)Neck:Bottleneck2、BiFPN;

S1 Bottleneck2:Backbone1中的Bottleneck都默认使shortcut为False;

S2 BiFPN结构:用BiFPN_Add加权双向金字塔结构代替部分Concat,它允许简单和快速的多尺度特征融合,提升不同尺度的检测效果;

(4)Head:Head对Neck中得到的不同尺度的特征图分别通过1×1卷积将通道数扩展,扩展后的特征通道数为(类别数量+5)×每个检测层上的anchor数量,其中5分别对应的是预测框的中心点横坐标、纵坐标、宽度、高度和置信度,这里的置信度表示预测框的可信度,取值范围为(0,1),值越大说明该预测框中越有可能存在目标。Head中原本包含3个检测层,分别对应Neck中得到的3种不同尺寸(小、中、大)的特征图。因为所用PCB板表面缺陷数据集都是相当小的目标,所以这里将Head中的检测中、大目标的P4、P5结构减去,以减少模型的模块数量,减小计算量。模型根据特征图的小尺寸在特征图上划分网格,并且给特征图上的每个网格都预设了小尺寸特征图对应宽高比的anchor,用来预测和回归目标,上述的通道维度可以理解为在特征图的通道维度上保存了所有基于anchor先验框的位置信息和分类信息。

3、缺陷检测方法迁移学习训练方法具体步骤为:

(1)YOLOv5s模型:

S1对YOLOv5s原模型进行训练,预训练权重使用在COCO数据集训练下得到的权重,得到训练结果;

S2对YOLOv5s模型缩减Head中用以检测中、大目标的P4、P5结构进行训练,预训练权重使用在COCO数据集训练下得到的权重,得到训练结果。

(2)YOLOv5s模型加入BiFPN结构:

S1对YOLOv5s模型加入BiFPN结构进行训练,预训练权重使用在COCO数据集训练下得到的权重,得到训练结果;

S2对YOLOv5s模型加入BiFPN结构且缩减P4、P5结构进行训练,预训练权重使用在COCO数据集训练下得到的权重,得到训练结果。

(3)YOLOv5s模型加入BiFPN结构和SimAM注意力机制:

S1对YOLOv5s模型加入BiFPN结构和SimAM注意力机制进行训练,预训练权重使用在COCO数据集训练下得到的权重,得到训练果;

S2对YOLOv5s模型加入BiFPN结构和SimAM注意力机制进行训练且缩减P4、P5结构进行训练,预训练权重使用在COCO数据集训练下得到的权重,得到训练果。

(4)YOLOv5s模型加入BiFPN结构、SimAM注意力机制并加入SPPF优化模型SPPFCSPC;

S1对YOLOv5s模型加入BiFPN结构、SimAM注意力机制并加入SPPF优化模型SPPFCSPC进行训练,预训练权重使用在COCO数据集训练下得到的权重,得到训练结果;

S2对YOLOv5s模型加入BiFPN结构、SimAM注意力机制并加入SPPF优化模型SPPFCSPC且缩减P4、P5结构进行训练,预训练权重使用在COCO数据集训练下得到的权重,得到训练结果。

(5)对以上模型的训练结果进行横向对比,针对每一种缺陷,计算精确度P和召回率R,画出P-R曲线,计算P-R曲线的面积可以得到平均精度AP,mAP是指所有缺陷的平均精度。

测试结果如图3到图5所示。

在具体数据集实施时:

S1对原始数据集进行截取、翻转、映射,获得共计10668张数据集,将所有数据集进行划分,其中训练集8640张,验证集961张,测试集1067张,然后将数据集标签转换成txt格式;

S2首先将COCO数据集在系统先进行训练,获得最好的训练权重当作PCB板缺陷检测的预训练权重;

S3在预训练权重下对PCB缺陷数据集进行迁移训练;

S4对几种不同模型分别进行训练,得到迁移学习训练结果以及评价指标:

针对每一种缺陷,计算精确度P和召回率R,画出P-R曲线,计算P-R曲线的面积可以得到平均精度AP,mAP是指所有缺陷的平均精度。具体计算式分别为:

式中:TP表示检测出的缺陷中判断正确的数目;FP表示判断错误数目;FN表示没有检测出的缺陷的数目;

S5在训练结束后得到最好的训练权重,用此权重对测试集进行检测,得到测试集的缺陷类型标签和置信度,并对模型进行横向对比。

技术分类

06120115637290