廖晓辉, 谢子晨, 路铭硕
(郑州大学 电气与信息工程学院,河南 郑州 450001)
变电站内电气设备的可靠运行对电力系统是至关重要的。及时、准确地完成各种电气设备识别,有利于对变电设备进行巡检保护,同时可以取代传统的人工巡检方式,满足变电站电气设备实时检测的需求[1]。此外,开发设计变电站电气设备识别APP,有助于变电站工作人员以及参观学习人员对变电站设备进行快速准确识别,对变电站电气设备的实时识别与设备学习具有重要意义。
为了满足变电站巡检智能化与高效化的要求,要对变电站电气设备进行快速、准确的识别。传统的目标检测算法有SIFT算法、HOG算法、LBP算法等[2-4],这些算法虽然可以很好地进行特征提取,但在变电站复杂背景下设备识别效果较差、精确率不高。基于深度学习的目标检测算法有RCNN系列、YOLO系列、SSD系列等。Girshick等[5]在2014年设计了R-CNN模型,该模型识别过程中需要对每个候选区域都做特征提取,存在着训练速度慢等问题。在R-CNN和SPP的基础上,Girshick[6]又提出了Fast R-CNN模型。李文璞等[7]使用Faster RCNN模型识别变电设备缺陷,识别的平均精度可达90%以上。但这些算法的网络参数量较大,识别速度难以满足要求,部署在Android端上很难实现电气设备的实时检测。Redmon等[8]提出YOLO算法,该算法与SSD算法都是单阶段算法,目前已有多个版本,其中的YOLOv5模型具有体积小、检测速度快、实时性好等优点,更加适用于此类实时的视频检测。YOLOv5模型中的YOLOv5s版是深度最小、特征图的宽度也最小的算法,体积较小,便于实现Android端的部署。
本文以变电站常见6种电气设备为例,采用改进后的YOLOv5s算法对设备数据集进行训练,训练完成的模型能实现变电站电气设备的图片识别和视频识别,同时将训练好的电气设备识别网络模型通过TensorFlow Lite框架进行部署,在Android上实现电气设备准确快速的识别。
YOLOv5s是YOLO系列中性能较好的算法,相较于以往版本有很大的提升,目前在电力系统的各类图像识别中也被广泛应用。YOLOv5s算法主要由输入端、Backbone、Neck和输出端4部分组成。
在输入端部分,YOLOv5s采用了Mosaic数据增强技术、自适应锚框计算以及自适应图片缩放技术,提高了模型对小目标的检测能力,对不同训练集的最佳锚框尺寸进行自动计算,同时解决了黑边填充过多造成的信息冗余问题,提高了模型的推理速度[9]。
在Backbone部分,采用快速空间金字塔池化(spatial pyramid pooling-fast, SPPF),将不同感受野的特征图融合,以提高特征图的表达能力,同时采用C3结构来增加网络的深度和感知能力,提高特征提取的能力。
在Neck部分,采用特征金字塔网络(feature pyramid network,FPN)与路径聚合网络(path aggregation network,PAN)相结合的结构[10-11],通过FPN结构的上采样操作与PAN结构的下采样操作相结合,输出预测的特征图,大大提高了特征提取能力。
在输出端部分,YOLOv5s采用CIOU_Loss作为损失函数。该损失函数可以同时考虑重叠面积、目标框中心点距离、长宽比等因素,同时采用非极大值抑制操作来对检测框进行筛选。
为了解决目前变电站电气设备识别过程中存在的问题、提高变电站中小目标检测的能力、减少漏检和误检的情况,对YOLOv5s网络模型进行改进,改进后的YOLOv5s网络结构如图1所示。
图1 改进后的YOLOv5s网络结构图Figure 1 Structure of the improved YOLOv5s network
YOLOv5s主要通过网络中的C3模块来增加网络的深度和感受野、提高特征提取的能力,C3模块的结构图如图2所示,模块中使用了3个卷积模块CBS以及n个Bottleneck。Bottleneck结构主要是为了降低参数量,减少网络的复杂度,同时也是梯度流主分支。C3模块将输入通道分为两部分:一部分经过一个卷积模块后连接到输出端;另一部分经过若干个Bottleneck层后输出。
图2 C3模块结构图Figure 2 C3 module structure diagram
为了提高电气设备识别精确度,在YOLOv5s算法中引入梯度流更丰富的C2f模块,模块结构如图3所示,C2f将输入通道分为两部分:一部分直接连接到输出端;另一部分经过若干个Bottleneck层后再与输出端拼接。C2f减少了卷积操作,同时将不同阶段的特征进行拼接和融合,梯度流相比C3模块更加丰富,识别效果较好。在YOLOv5s代码的common.py文件中对C2f模块进行定义,同时更改配置文件中对应参数,即可对原C3模块进行更改。
图3 C2f模块结构图Figure 3 C2f module structure diagram
在对检测框进行筛选的过程中,需要进行非极大值抑制(non-maximum suppression,NMS)操作[12-13]。由于变电站中设备种类较多且较为密集,因此收集到的电气设备数据集中同一类型的设备容易出现重叠现象。NMS在对目标框进行筛选的过程中直接对IOU大于设定阈值的框进行删除处理,容易出现漏检和误检的情况,因此采用改进的Soft-NMS目标框筛选方法。Soft-NMS将IOU大于阈值的框的得分降低:将获得的IOU取高斯指数后与原得分相乘,之后重新排序,不断循环。公式如下:
(1)
式中:M为预测框中得分最大的边框;bi为第i个预测的边框;Si为第i个边框的得分。
由式(1)可以看出,IOU越大,预测框得分越低,可以更准确地选择目标框,适用于重叠程度较高的预测框的筛选。在YOLOv5s代码的general.py文件中对Soft-NMS进行定义,调用Soft-NMS函数来进行训练与验证即可改进原NMS操作。
在对变电站电气设备识别过程中,搭建的模型训练环境配置:Windows10系统、R5 5600 H处理器、GTX 1650显卡、16 GB内存、Python3.7.3、CUDA11.3。Android端运行环境配置:realme GT大师探索版机型,运行内存12 GB;高通骁龙870八核处理器。
3.2.1 几何变换与像素变换
如图4所示,对电气设备数据集通过水平及垂直翻转、缩放等几何变换操作,以及改变亮度、调节对比度、高斯模糊等像素变换操作来进行数据增强。同时,在采集数据的过程中,不良照明或高温容易造成传感器噪声,因此,对部分电气设备图像添加高斯噪声,进而提高模型的鲁棒性。
3.2.2 基于K-means算法的背景替换
为了避免采集的电气设备图片背景较为单一,对采集到的部分图片进行背景替换。如图5所示,利用K-means聚类算法对原图进行图像分割[14],生成对应的二值图像,也称为mask图;将mask图与原图通过OpenCV中的cv2.bitwise_and()函数进行图像的按位与运算抠出设备图像;将设备图像与新的背景图像进行背景融合,从而实现图片的背景替换。
数据集预处理后,所构建的电气设备图像数据集共有2 076张图片,按照6∶2∶2的比例将数据集随机划分成训练集、验证集和测试集。数据集构建完成之后,使用LabelImg软件标注数据集。本文共制作6个标签,分别是电力变压器(power transformer)、绝缘套管(insulating sleeve)、油枕(conservator)、风机(fan)、绝缘子串(insulator string)、隔离开关(disconnector)。标注后得到txt格式的标签文件用于模型训练。各个设备的标签数量分布如表1所示,标签数量总计5 902个。
图4 数据增强Figure 4 Data enhancement
图5 图像分割与融合Figure 5 Image segmentation and fusion
表1 数据集各标签数量分布表Table 1 Table of label quantity distribution in data set
模型的评估指标包括:精确率Precision、召回率Recall、平均精度均值mAP、帧率以及P-R曲线等。Precision和Recall两个评估指标的计算公式如下所示:
(2)
(3)
式中:TP为真阳性;FN为假阴性;FP为假阳性。
帧率是评估模型检测速度的一个重要指标,即每秒内可以处理的图片数量,通过帧率大小来评估模型是否满足实时检测的需求。P-R曲线是以召回率和精确率分别作为横纵坐标绘制出的二维图像。曲线与坐标轴围成的面积即为某一类别的AP值,对所有N个类别的AP值取平均值即为mAP值,公式如下:
(4)
本文在原有YOLOv5s算法基础上进行改进:引入C2f模块来提高设备检测尤其是小目标检测的精度;采用Soft-NMS取代原有的NMS对检测框进行筛选,来解决数据集设备重叠问题,减少漏检现象。使用评估指标对算法不同改进方法进行实验结果对比,如表2所示。由表2可知,在算法中引入C2f模块后,模型的mAP值较原算法提高了2.6百分点;采用Soft-NMS检测框筛选方法之后,模型的mAP值提高了0.8百分点,由于Soft-NMS筛选检测框相比NMS更加复杂,参数量增加,使得推理时间变慢,帧率有所降低。将两个改进方法相结合后的YOLOv5s模型的mAP值为91.6%,与原模型相比提高了3.3百分点,识别精度提高,由于模型参数量增加,使得帧率从54帧/s降到了38帧/s,但整体推理速度还保持在较高水平。
表2 算法不同改进方法的实验结果对比Table 2 Experimental results comparison of algorithm with different improved methods
如图6所示,根据算法改进前后模型的P-R曲线可知,改进后的P-R曲线与坐标轴所包围面积更大,意味着模型性能更好,各个设备的mAP值也在提高,其中识别效果最好的电力变压器的mAP稳定在97%。
YOLOv5s改进前后网络模型训练变化曲线如图7所示,经过100个Epoch后模型逐渐趋于稳定,改进后的网络模型训练结果更好,且与改进前相比更早达到收敛状态。
图6 P-R曲线对比Figure 6 Comparison of P-R curves
图7 模型训练指标变化曲线对比Figure 7 Comparison of model training index change curve
选取未参与训练图片进行测试,将YOLOv5s改进前后的电气设备识别效果进行对比,结果如图8所示,其中标签后边的数字为置信度,表示图中设备被模型正确识别的程度。可以看出,改进后的模型的识别置信度提升明显,各种电气设备的识别置信度均维持在较高水平。
图8 YOLOv5s改进前后电气设备识别效果对比Figure 8 Comparison of electrical equipment recognition effect before and after YOLOv5s improvement
将训练完成的识别网络模型部署在Android端时,往往会受到移动设备计算能力和内存占用等方面的限制,造成部署后的APP出现运行慢、卡顿等情况[15],而使用深度学习框架TensorFlow Lite (TF-Lite)可以对不同的硬件进行优化,通过量化等方式来减少模型的大小[16]。
TensorFlow Lite由模型转换器和解释执行器两个主要部件组成。其模型处理过程如图9所示[17]。模型转换器将已训练好的TensorFlow模型编译,生成可供移动设备使用的TensorFlow Lite文件格式(FlatBuffer格式)。在设备端,解释执行器读取TensorFlow Lite模型,调用不同的硬件加速器比如GPU进行执行操作[18]。TensorFlow Lite框架具有低功耗、低内存、兼容性好等优点,同时部署方式简单,适用于识别网络模型在移动设备上的部署。
Android Studio软件可以对Android进行开发与调试。TensorFlow Lite模型由模型转换器转换得到。在开发过程中,主要用到了模型中的*.tflite文件和一个label.txt的标签文件,将这两个文件加入到Android工程的Assets目录下,设置识别APP的各个界面和参数。在Android Studio软件中加载网络模型,之后连接手机进行APP调试,完成模型在Android端的部署。
图9 TensorFlow Lite模型转换过程Figure 9 TensorFlow Lite model conversion process
调试完成之后,打开电气设备识别APP进入到主界面,主界面有“变电站电气设备识别”和“常见电气设备介绍”两个按钮,选择“常见电气设备介绍”进入到设备介绍子界面可以查看设备的简介、功能及作用等内容。选择“变电站电气设备识别”进入到电气设备实时检测子界面,通过调用手机摄像头可以对电气设备进行实时视频检测,如图10所示。在移动端对常见电气设备进行识别,平均识别精确率在85%以上,且每张图片的处理速度均不超过1 s,帧率为16帧/s,具有较好的识别精度和识别速度;应用大小为90 M,内存占用较小,可在移动设备上正常使用。
图10 电气设备识别APP效果图Figure 10 APP renderings of electrical equipment identification
本文以电力变压器、绝缘套管、油枕、风机、绝缘子串、隔离开关6种常见电气设备为研究对象,设计了一个基于改进YOLOv5s的变电站电气设备识别系统以及基于Android系统的电气设备识别APP。YOLOv5s网络模型较小,便于在移动端进行部署,同时引入C2f和Soft-NMS对算法进行改进,使用改进后的网络模型YOLOv5s对设备进行识别,利用精确率、召回率、mAP、帧率、P-R曲线等模型评估指标对训练好的变电站电气设备识别模型进行评估,mAP值稳定在91.6%,与原模型相比提高了3.3百分点,具有较好的识别效果。同时,利用TensorFlow Lite框架对训练好的网络模型进行Android端部署,部署后的APP占用内存较小、兼容性好,对移动设备要求不高,可满足变电站电气设备实时检测的需求。所设计的APP还具有设备学习功能,对于变电站参观学习人员学习了解电气设备起到很好的辅助作用。