改进的轻量型YOLOv5绝缘子缺陷检测算法研究
2021-12-05王书坤伏德粟
王书坤,高 林,伏德粟,刘 威
(湖北民族大学 信息工程学院,湖北 恩施 445000)
输电线路的稳定运行对电网的安全至关重要,输电线路部件的故障类型主要包括:绝缘子故障、均压环故障、防震锤故障、输电线故障等[1].其中,绝缘子是输电线路中用量最多的部件,也是引起线路故障的主要原因之一,因此需要对其进行定期巡检.传统的线路巡检主要靠人工,需要巡检人员登上杆塔去检查,这样的方法费时费力,且有一定的危险性.随着无人机以及深度学习技术的发展,搭载目标检测算法的无人机巡检逐渐成为主流.
目前基于深度学习的目标检测算法主要分为两类:一类是基于区域提取的两阶段目标检测模型,如R-CNN(Regions Convolutional Neural Networks)、Fast R-CNN、Faster R-CNN等,将目标检测分为特征提取和特征分类两步;另一类是直接进行位置回归的单阶段目标检测模型,如SSD(Single Shot MultiBox Detector)、YOLO(You Only Look Once)系列等,将目标检测转换成回归问题[2].随着目标检测算法发展地日趋成熟,人们开始思考将目标检测算法应用到线路巡检中.虢韬等[3]使用Faster-RCNN模型来解决绝缘子中的自爆缺陷识别,最终绝缘子检测精度为95%,但每张图片的平均检测时间却需要320 ms,检测的实时性有待提高.李伟性等[4]使用ResNet(Residual Network)替代VGGNet(Visual Geometry Group Network)的SSD算法来实现输电线路上绝缘子缺陷检测,也取得了不错的效果.赖秋频等[5]使用YOLOv2网络并结合边缘检测、直线检测、图像旋转等方法来实现输电线路绝缘子的缺陷诊断,最终平均识别精确率达到了90.1%,且识别速度达到了30帧/s.吴涛等[6]使用轻量级的YOLOv3进行绝缘子的缺陷诊断,结果也取得了近90%的平均精确率,速度也达到了26.1帧/s.高健宸等[7]使用K-means++改进先验框的YOLOv4来实现绝缘子爆裂故障识别,最终平均精确率为92.6%,速度为46帧/s.
由此可见,两阶段目标检测算法精度高,但检测速度慢,不能满足实时性的要求;而单阶段的目标检测算法速度虽然提升了,但精度却降低了.为了减小模型,提升检测速度,同时还要保证较高的精确率,本文提出了一种改进的轻量化YOLOv5来检测绝缘子缺陷的算法模型.
1 基于YOLOv5的绝缘子检测模型
1.1 YOLO算法
YOLO算法是Joseph Redmon于2015年提出的单阶段目标检测算法,其核心思想是把目标检测任务当作单一的回归任务[8].而后作者又对其进行了改进,分别于2017年提出YOLOv2[9],2018年提出YOLOv3[10],2020年Alexey Bochkovskiy提出了YOLOv4[11],YOLOv4在原来的YOLO目标检测架构的基础上,采用了很多优化策略,例如在输入端使用了Mosaic数据增强,将主干网络改为CSPDarknet53,在原来FPN(Feature Pyramid Networks)的基础上增加PAN(Path Aggregation Network)等.而后不久Glen Jocher又提出YOLOv5算法,其在性能与YOLOv4不相伯仲的同时,在速度上进一步提升.按照官方发布的数据,现版本的YOLOv5每个图像的推理时间最快仅需0.007 s,即可达140帧/s(FPS),而且YOLOv5的模型大小只有YOLOv4的1/9.
1.2 YOLOv5模型
YOLOv5有s、m、l、x 4个不同大小的网络模型,其中YOLOv5s是最小的网络模型,其他模型均为在其基础上不断增加网络深度和宽度的产物.表1是各个版本的YOLOv5模型在COCO2017验证集与测试集上的各项指标,可以看出随着网络模型的加深,虽然其检测性能不断增强,但是模型尺寸越来越大,检测速度越来越慢.为了实现模型的轻量化,使其更易于移植到嵌入式设备中,选择YOLOv5s作为基础模型.
表1 YOLOv5各版本性能分析
YOLOv5从发布以来,已经更新到5.0版本,其激活函数已经从早期的LeakyReLU和Hardswish统一都变成了SiLU激活函数.并且采用了C3模块代替了原来的BottleneckCSP模块,C3模块比BottleneckCSP模块少了瓶颈结构中的一个卷积层,使得整体模型的尺寸变小,推理速度也有所提升.虽然相比于3.0版本,精度有0.8%的下降,但是相比于其速度的提升,这点精度损失还在接受范围内,本次实验是以5.0版本模型为基础进行的改进.
YOLOv5的模型主要由Backbone和Head两部分组成,其中Backbone作为特征提取模块主要由Focus、C3、SPP模块组成,Head部分主要包括提取融合特征的颈部(Neck)和Detect模块,其网络模型如图1所示.
图1 YOLOv5网络结构
在Backbone部分,主要由3种模块组成.① Focus模块.这是YOLOv5独有的结构,其主要思想是通过切片操作来对输入图片进行裁剪,从高分辨率图像中,周期性的抽出像素点重构到低分辨率图像中,即将图像相邻的4个位置进行堆叠,将w、h维度信息聚集到c通道空间,在减少计算量的同时提高了每个点的感受野,避免了原始信息的丢失.② CSP(Cross Stage Partial network)模块.其主要通过将基础层的特征图分割成两部分,然后用跨阶段分层结构进行合并的方式来实现更丰富的梯度组合.而YOLOv5的作者同样借鉴了这种结构,不过相比于YOLOv4只在Backbone主干部分使用了CSP结构,v5的作者设计了两种CSP结构,分别运用于主干部分和颈部,而后作者又对其进行了改进,通过去除瓶颈结构中的一个卷积层,将其改成了C3模块.③ SPP(Spatial Pyramid Pooling network)模块.该模块是借鉴了何凯明于2014年提出的SPPNet[12],又称空间金字塔池化网络,通过k=(1×1、5×5、9×9、13×13)的最大池化的方式将不同尺度的特征图进行拼接,实现了不同尺度特征的融合,进而提升了感受野,提取出了重要的特征.
在Head部分,YOLOv5使用了特征金字塔FPN+PAN的结构,FPN层通过上采样的方式将高层与低层的特征信息进行传递融合,而PAN层则将低层特征与高层特征进行拼接,使低层分辨率高的特征传到上层去.通过FPN+PAN的结构,从不同的主干层对不同的检测层进行特征聚合,有效解决了多尺度问题.
1.3 损失函数
目标检测任务的损失函数由分类损失和回归损失两部分构成.分类损失又包括置信度损失和类别损失,这两种损失都比较简单,主要使用交叉熵损失作为损失函数;回归损失又称为坐标位置损失,且随着目标检测算法的发展在不断改进,从2016年的IOU_ Loss到 2019年的GIOU_ Loss再到2020年的DIOU_Loss,到现在最新的CIOU_ Loss.其中IOU_Loss只考虑了检测框和目标框重叠面积.GIOU_Loss多考虑了边界框不重合时引起的问题.DIOU_Loss增加了边界框中心点距离的信息.而CIOU_Loss又多考虑了边界框宽高比的尺度信息.本文在经过大量实验后,选择了CIOU_loss作为坐标位置损失.
2 改进的轻量型YOLOv5模型
改进的轻量型YOLOv5相对于原版算法主要有三方面改进,一是使用了轻量型的Ghost卷积,二是使用了GhostBottleneck模块,三是用了改进的K-means算法修改先验框.
2.1 Ghost卷积
Ghost卷积来自GhostNet[13],GhostNet是为了降低卷积神经网络的计算量,使之轻量化,更易于在终端部署而提出的一种卷积模块.它是通过“少量传统卷积”+“轻量的冗余特征生成器”的方式代替传统的卷积层,在减少网络整体计算量的同时,又保证了网络的精度.该模块的实现分为两个部分,一是少量普通卷积,二是简单的线性操作.先通过少量的普通卷积得到一部分特征图,然后将得到的特征图通过线性操作生成更多特征图,最后将两组特征图在指定维度拼接起来,其原理如图2所示.
图2 普通卷积与Ghost卷积图3 GhostBottleneck模块 Fig.2 General convolution and Ghost convolution
GhostBottleneck的基本结构与C3模块类似,只是将原本的卷积用Ghost卷积代替,其具体结构如图3所示.
2.2 改进后的YOLOv5网络结构
改进的轻量型YOLOv5网络整体结构如表2所示.表中输入列的-1是指输入来自上一层输出,参数列的值为本模块的参数量,模块列表示模块类型,张量信息列则分别代表该模块的输入通道数、输出通道数、卷积核大小和步长.
表2 改进的YOLOv5整体网络结构
改进前后模型参数的对比如表3所示.由表3可知,改进后模型总共373层,模型总参数4 163 887个.相比于改进前的7 066 239个参数,参数总量减少了41.1%,计算量也从原来的16.4GFLOPS变为了9.2GFLOPS,减少了43.9%.实现了对原模型较大程度的压缩,使之更加轻量化.
表3 改进前后模型参数对比
2.3 改进距离标准的K-means算法
利用K-means算法来确定先验框,已经成为目标检测不可缺少的一个步骤.YOLOv5自带的K-means算法,可以在自己的数据集上聚类新的先验框,但它是以样本框之间的欧式距离作为距离度量,这样会导致在计算损失时,大的先验框占比更大.如图4所示,红色代表真实框,蓝色代表先验框,如果用欧式距离度量的话,左侧(8-6)2=4,右侧(4-3)2=1(此处数字为单位长度,无实际单位),很明显左侧较大框占比更大.但是聚类的目的是使先验框和临近的真实框有更大的IOU值,下面两种情况明显IOU值相同,故在损失计算时,应占比相同.因此,使用了新的度量公式.
图4 不同尺度的先验框
d=1-IOU(box,centroid),
(2)
改进后K-means算法得到的先验框的平均IOU为85.68%,比改进前提升了3.1%,使用改进后的K-means算法得到9个先验框,分别对应不同尺度的特征图,先验框分布如表4所示.
表4 聚类后的先验框分布
3 实验及结果分析
3.1 实验数据集及实验环境
实验数据来自中国电力线路绝缘子数据集(CPLD),包含由无人机拍摄的和合成缺陷的绝缘子图像共848张,其中,正常绝缘子图像600张,有缺陷的绝缘子248张.因为没有收集到足够有缺陷的绝缘子图像,所以大部分缺陷绝缘子是通过合成图像来构建的.目标检测任务需要大量的数据,故利用Albumentations工具对原本的848张图像进行扩充,通过旋转、裁剪、擦除像素点以及调整图像的亮度饱和值等方式将图像扩充至4 200余张,使用4 000张进行训练,余下的200多张进行验证,部分图像数据扩充效果如图5所示.
(a) 原图(b) 绕y轴旋转(c) 擦除像素点(d) 随机裁剪(e) 修改对比度
并使用Labelme图片标注工具对所有图像进行标注,将绝缘子标注为insulator,缺陷位置标注为defect,具体如图6所示.通过上述工作,完成数据集制作.
图6 数据集标注
实验采用的操作系统为Windows10,GPU型号为GeForceRTX1070,显存大小8GB,内存大小16GB,CPU型号为Intel(R)Core(TM)i7-7700kCPU@4.2GHz.所有模型基于Pytorch1.9,并使用Cuda11.0和Cudnn8.0.4对GPU进行加速.
3.2 实验结果分析
为了实现模型的最佳性能,使用了SGD(StochasticGradientDescent)和Adam(adaptivemomentestimation)优化器做对比,使用不同优化器的结果如表5所示.
表5 改进前后在不同优化器下的结果对比
由表5可知使用SGD优化器的平均准确率普遍比Adan高,因此在后续实验中默认选择SGD作为优化器.之后又通过调整学习率,使用Mosaic数据增强以及增加矩形训练等方式不断进行网络训练,最终改进后YOLOv5模型的各个参数指标随训练周期的变化如图7所示.由图7可知,随着模型的不断训练,训练集的位置损失和类别损失不断下降.验证集的位置损失在50个训练周期之后趋于稳定,最终稳定在0.01左右,置信度损失则稳定在0.005左右,类别损失则趋近于0.000 5,模型检测的精确度和召回率稳定在0.95左右.
图7 改进后YOLOv5的参数指标
为检验改进前后模型的性能优劣,通过使用不同模型进行测试,结果如表6所示.由表6可知,改进后的绝缘子检测网络模型,在保证精度的基础上,速度大大提升,能够满足无人机电力巡检的任务需求.
表6 不同模型的检测性能
改进后的网络模型可以准确地定位绝缘子和缺陷位置,是一种可行的绝缘子缺陷检测算法,其中绝缘子位置用insulator标出,缺陷位置用defect标出.最终模型在面对不同场景时的具体检测效果如图8所示.
(a) 缺陷绝缘子 (b) 误检 (c) 漏检
4 结论
本文提出了一种改进的轻量型YOLOv5绝缘子缺陷检测算法.使用轻量型的Ghost卷积代替一般卷积以提高检测速度,用GhostBottleneck代替C3以减少模型参数,并使用1-IOU距离代替原本的欧氏距离以改进K-means算法生成先验框.通过大量实验,改进后的网络模型在保证绝缘子检测精度的前提下,大幅减少了模型参数,提升了网络的检测速度,更易于在嵌入式终端部署.