韩钰,郑金亮,王磊,蔡培君,王晨旸,王紫玉
(安徽大学 江淮学院,安徽 合肥,230031)
太阳能电池片的表面质量直接影响光能的吸收效率[1],在太阳能电池片的生产过程中,由于机械或人为因素等会对电池片表面造成各种缺陷,这些缺陷会对电池片转换效率和寿命产生较大影响,因此,检测电池片表面缺陷是非常必要的。
目前,对电池片表面检测的方法主要分为人工检测方法、机器视觉检测方法[2]和深度学习检测方法[3]。常见的有高光谱成像技术[4]、发光成像对比方法[5]、声波法[6]、均值漂移法[7]、多特征区域融合法[8]、频域法[9]和深度学习法[10]等。采用平均法[7]进行检测是一种简单且容易实现的方法,但如果检测目标较少,它的检测效率将较低。而频域法擅长对分布比较散乱的缺陷进行检测,但其对刮伤不能进行有效识别[11]。近年来,目标检测算法YOLOv3[12]已应用于多种目标检测场景[13-14],但是对于高清图像中微小目标的检测,依然存在检测精度不高的问题。由于在深度学习检测方法中,对图像边缘的检测十分重要,Sobel算子作为边缘检测中的重要算子之一,可以优化图像边缘检测效果并提升处理图像的效率[15-16]。李雪梅等[17]将加权核范数最小化图像去噪算法与索贝尔(Sobel)边缘检测算法相结合,大大提高了Sobel算子检测的准确度,使得在高噪声水平下能够获得清晰连续的边缘信息。本文在前人的研究基础上,提出通过添加Sobel算子改进PPYOLO模型来进一步提升电池片表面微小缺陷检测效率[18]。
本实验训练数据集来源于安徽慧视金瞳科技有限公司提供的二维高清太阳能电池片图像。训练集一共有300张图片,每张图片的分辨率为5 800×3 504,由6(行)×24(列)个电池片组合而成,图片中可能会存在一种或多种缺陷。缺陷包括5种:电池片破碎、电池片有明显亮斑、电池片有形状规则黑边或灰边、电池片有划痕以及电池片不上电呈现黑色。将训练集中这5种缺陷进行标记,以便进行模型的训练,对应的数字为0~4,见表1。
表1 电池片缺陷分类
训练集中缺陷的标注由5个数组成,分别为缺陷对应的数字,矩形框左上角点横、纵坐标,右下角点横、纵坐标,标注结果保存在对应的训练集CSV文件中。
训练集中的缺陷图片只有300张,样本量少,同时数据集图片尺寸过大并且缺陷分布稀疏(一张图片上可能只有一两个缺陷),其中,有的缺陷尺寸极小,最小只有8×12像素,使得该缺陷在图片中的面积占比也极小,增加了检测难度。因此,如果只用这300张图片进行训练,可能出现大部分缺陷无法被检测出来。为使训练数据更加丰富,提高模型训练效果和精度,实验时采用了如下几种增强方案。
1)混合[19](MixUp)和随机切片等。在训练时对每轮epoch选择出来的数据进行随机旋转、镜像和亮度调节等处理,再将扩增后的数据送入模型进行训练,这样,操作模型在训练过程中可实时对数据进行扩增。
2)粘贴增强。将数据的缺陷裁剪下来,随机等概率地选取缺陷图片粘贴到无缺陷的图片上去,提高图片中缺陷数量和面积占比,这样模型在训练时相比于之前的稀疏缺陷将更快速且更容易学到缺陷特征。通过该方法将数据集扩充到800张图片。如图1所示,相比于图1(a)稀疏的缺陷分布,图1(b)具有更多缺陷特征。
图1 粘贴增强方案Fig.1 Paste the enhancement scheme
3)尺寸增强(resize)。由于目前常用显存设备(GPU)的显存资源无法对高清图片进行计算处理,因此,不得不降低图片尺寸以满足训练的基本要求。但是如果降低图片尺寸,缺陷也会随之变小,导致小缺陷难以被检测出来,出现缺陷漏检,模型检测效果会降低。例如,将图片resize到(960,960)(像素宽,像素高),部分缺陷会缩小到(2,3)左右的像素点大小,使检测模型几乎失效。因此,本次实验在特定的显存设备下(Tesla T4,16G)将图片resize到合适的大小(2 880,1 280)或(3 200,3 200),以适配不同的算法模型。
电池片数据集制作是最基础的步骤,同时也是实验前最重要的步骤。由于本实验所用的模型无法识别训练集标注的CSV文件,需要将该文件转换为适配模型的COCO格式数据[20]。读取CSV文件,对每张训练集图片对应的标注框数据(标注框面积、左上点的横和纵坐标、宽和高、对应的缺陷类型等)进行简单地计算,生成标准的COCO格式数据集。划分数据集结果见表2。
表2 数据集数量分布
PPYOLO[18]采用YOLOv3[12]的架构骨干网络(backbone)+瓶颈(neck)+检测头(head)框架。backbone部分使用残差网络,neck用特征金字塔网络,head部分是YOLOHead。PPYOLO backbone使用ResNet(残差网络)。残差网络通过残差层的连接将网络层数变深,使得网络提取特征能力变得更强。neck部分采用了图像金字塔网络(feature pyramid network,FPN),将局部与整体信息进行结合。由于存在不同层级提取特征图尺寸不同的情况,例如,高语义内容的特征图(深层网络提取的特征图)尺寸小,含小目标的信息少,而低语义内容的特征图(浅层网络提取的特征图)尺寸大,含大目标的信息小,FPN可以将高层信息提取传递给低层,同时,低层信息也可以传递进高层,将信息进一步融合,弥补了大物体的细节,也补充了小物体的周边环境,从而进一步提高精度。
PPYOLO使用了DropBlock、IoU[21]aware等策略。dropout会使一部分神经元失活,从而减少网络对某些特征的依赖,在线性变换中对一些特征具有较好的抑制效果,防止过拟合,因此,被广泛地用在全连接层,但是在卷积层,通常不太有效。卷积在局部之间具有较强的相关性,仅仅使用dropout,只是丢弃了不连续的点,而卷积依然可以得到大部分信息。因此,针对卷积神经网络就需要整体丢弃dropout结构形式,也就是把大部分连续的点一整块进行丢弃,这样可以让逼迫网络观察该物体其他的细节特征进行推导,防止过拟合,使网络具有更好的泛化能力。
Sobel算子常用在边缘检测上[15-16],它使用了高斯滤波器平滑噪声,再通过水平垂直方向的两个算子计算图像亮度函数的像素梯度值[22]。算法原理如下:
(1)
式中:G(x,y)为二维高斯分布;σ为高斯滤波器参数标准差,影响去噪质量。
原始图像f(x,y)与高斯滤波器卷积得到图像I(x,y)。
I(x,y)=G(x,y)×f(x,y)
(2)
Sobel算子的3×3卷积模板如式(3)所示。
(3)
将gx和gy与I(x,y)进行计算,也就是对图像I(x,y)分别在x和y方向求导,得到Gx和Gy。最后,计算图像每一点的近似梯度,得到G。
(4)
G矩阵对应原图像每个像素点的近似梯度值,如果某点值越高,说明该点为边缘点的概率就越高。当设置合适的阈值后,如果该点值大于阈值则认为是边缘点,反之则不是。在电池片图片上进行Sobel算子计算,结果见图2。
图2 Sobel算子处理后缺陷细节Fig.2 Defect details after Sobel operator processing
图2(a)为正常图片,图2(c)为缺陷图片,图2(b)、图2(d)分别为图2(a)、图2(c)进行Sobel算子处理后得到的计算结果图片展示,图2(e)、图2(f)为图2(d)的放大部分。观察Sobel算子处理图像前后,前者缺陷虽然比较明显,但是正常部分特征干扰较大,黑白相交。后者正常部分整体脉络明朗,规律明显,较容易识别。图2(e)和图2(f)能更加容易地显示缺陷边缘特征,缺陷部分与正常部分有较大的特征冲突,这种冲突对网络学习具有一定的帮助。
在图像缺陷检测领域,早期一般通过传统的图像处理技术,如先通过二值化方法分割图片,再对分割后的图片进行划分,从而找到缺陷所在的地方。该类传统图像处理方法利用了人的常识及推理能力。而神经网络算法并不具备这种能力,只能通过数据学习到一些相关的特征,使用网络参数保存并记住特征。当样本量多时,可能会具备上述的推理能力(实际是因为模型记住了特征),但样本量较少时,神经网络模型则难以学到一些关键特征,并且容易产生过拟合。
基于上述两种算法结构,本文提出将Sobel算子与PPYOLO算法相结合的方法,先使用Sobel算子对图片进行处理,再将经过Sobel算子处理后的图片和原始图片拼接到一起,输入到网络模型中,提高了对电池片缺陷检测的准确性。整合后网络结构见图3。
图3 Sobel+PPYOLO结构图Fig.3 Sobel+PPYOLO structure diagram
模型选用Resnet50作为backbone、neck部分使用金字塔自注意力网络(pyramid attention network,PAN),在backbone部分,输入的图片数据先经过Sobel算子处理后,再与自己拼接(concat)得到新的输入数据,经过ConvBN(卷积和批量标准化层)和最大池化层,进入4个stage模块,这4个主要由残差卷积组成。从第二个Stage层开始将特征提取的结果输出到neck部分。Neck部分借用跨阶段局部网络[22](cross stage partial network,CSPnet)的思想,先分为conv_left和conv_right两块,将通道缩小,conv_left再通过conv_module后与conv_right进行concat,再经过conv3输出。这种处理方式相比于FPN直接使用conv_module进行处理,在检测实验中精度略有提升并且计算量少了很多。conv3的输出既通过Head部分进行结果输出又与前一个stage的输出进行concat后继续输入PAN的前一个部分,重复进行,最后得到多个不同尺度输出的结果。
本实验的训练平台采用的CPU为Intel(R)Core(TM)i7—11700@2.5 GHz、内存64 GB、GPU为Tesla T4(16 GB)。实验操作系统为Ubuntu 18.04.6 LTS,环境为Python 3.6;GPU加速包为CUDA 10.1 API和cudnn 7.1。网络模型训练框架采用paddle 2.2.2。
初始化电池片数据集中的类别、类别名称和训练路径等相关参数。部分网络训练参数见表3。
表3 网络训练参数
本实验训练模型对高清电池片图片中微小缺陷区域进行检测,模型性能采用精度均值(average precision,AP)、平均精度均值(mean average precision,mAP)及检测速度(FPS)来进行评估,FPS即每秒内可以处理的图片数量或者处理一张图片所需时间,AP由电池片数据集上预测结果的精确率P和召回率R决定,如式(5)所示:
(5)
(6)
P(r)=maxr′:r′≥rP(r′)
(7)
(8)
(9)
式中:P为预测结果中正确的比例;R为正类样本被正确预测的比例;TP为被正确划分的正类样本的数量;FP为被正确划分的负类样本的数量;FN为没有检测到的正类样本的数量;C为总类别数量;APi为第i类的AP值;P(r)为某一召回率时精确率的大小。
计算AP,首先需要绘制准确率-召回率(P-R)曲线,对P-R曲线按照式(7)进行平滑处理后再按照式(8)计算即可。按照上述方法计算其他所有类的AP,最后取平均值即视为mAP,如式(9)所示。在图像分类任务中,mAP就是类识别准确率,由于回归框预测难以被衡量是否识别准确,其准确率的划分一般由预测框与真实框进行IoU(交并比)计算来决定,当大于阈值时,则识别准确,反之不准确。为了能更好体现模型对微小缺陷的检测能力,还使用小(small)、中(medium)、大(large)3种尺寸的mAP值进行评价,见表4。
表4 评价方式
为验证网络模型的性能,本文首先使用PPYOLO[18]算法、Faster-RCNN[23]和YOLOv3[12]算法,分别在电池片缺陷图片数据集上进行训练,并将训练结果进行多项性能指标对比,对比结果见表5。
表5 实验结果
由表5可知,Faster-RCNN为两阶段检测算法,模型参数量大,可输入图片的尺寸较小(1 600×1 333),可提取图片信息不足导致mAP小于PPYOLO算法(Resnet 50);在输入尺寸相同情况下(2 880×1 280),PPYOLO算法(Resnet 50)比YOLOv3算法在small、median、large上AP值均有所提升,同时,前者的mAP值也高于后者,在小尺寸的缺陷检测上,提高了0.13,在中等尺寸上提高了0.4左右;PPYOLO(Resnet 18)主要体现在检测速度上大幅提升,相比于PPYOLO算法(Resnet 50),其FPS提高了近170%,但mAP约为PPYOLO算法(Resnet 50)的45%,并且在微小缺陷上检测效果最差,仅为0.1%,这一点也说明,检测效果与模型及输入图片大小都密切相关,图片尺寸越大其包含的信息越多,模型能接收的信息就越多,但相应也需要适合的模型大小进行检测,否则效果就不理想。
通过表5各项评估指标的对比可知,PPYOLO算法与YOLOV3及Faster-RCNN相比,总体性能更好。故选择PPYOLO算法(Resnet 50)作为后续对比实验的基础算法。
为验证PPYOLO+Sobel算子组合模型的有效性,在少量高清电池片缺陷数据作为训练数据集情况下,将该方法与原PPYOLO算法进行对比,见表6。
表6 算法结果对比表
由表6可知,将PPYOLO算法与Sobel算子相结合的方法,在最终检测效果上有进一步的提升,mAP提升了1.4%,而FPS值差异较小,即对推理速度影响不大。说明在少样本的情况,使用Sobel算子与深度学习方法(PPYOLO)相结合,对模型检测精度有一定的提升作用。分析以上两种算法的损失函数,见图4。采用PPYOLO+Sobel算子方法改进模型后,在模型训练迭代过程中,得到的loss比原PPYOLO算法更低,收敛速度更快。
图4 增加Sobel算子与原算法的损失值对比实验Fig.4 Comparison experiment of loss value between adding Sobel operator and original algorithm
PPYOLO+Sobel算子相结合的模型对电池片检测的整体效果图,见图5。
图5 PPYOLO检测结果图Fig.5 PPYOLO detection results
由于图片过大,不便观测,将检测图的缺陷部分放大,见图6。通过框住的缺陷位置和置信度,可以看出,PPYOLO+Sobel相结合的模型对于5种不同的缺陷具有良好的检测效果。
图6 检测放大图Fig.6 Enlarged view of detection
神经网络感知机模型只能从大量数据中学到缺陷信息特征,而无法像人类一样在少量样本上进行思考并总结出一部分特征。为了满足实际场景需求,本文基于PPYOLO模型作出了一些改进,为此,将人脑判别缺陷时所用的一种信息特征(边缘信息特征)输入到PPYOLO神经网络算法中,能使得网络直接获得边缘信息,即将Sobel算子与PPYOLO算法相结合,使其能根据边缘信息更好的定位识别缺陷。在高清电池片数据集上进行仿真实验。实验结果表明,添加Sobel算子后的改进PPYOLO模型检测效率有所提升,mAP提升1.4%,并且mAP相比于其他不同输入尺寸和模型大小的算法,提升效果超过20%。在此基础上,后续工作将继续探索Sobel或其他算子与模型组合,持续优化算法,提高目标检测效果。