张劲松,邓元实,常政威,吴 杰,陈明举
(1.四川轻化工大学人工智能四川省重点实验室,四川 宜宾 644000;2.国网四川省电力公司电力科学研究院,四川 成都 610041)
近些年在变电站中进行电力作业时,常有安全事故发生,经过研究分析[1],发现管理责任缺失、检修监管不严和安全意识薄弱为事故发生的主要原因。目前,大多数电力作业的安全监测研究都是针对电力施工人员开发的监测系统。文献[2]提出使用方向梯度直方图技术(histogram of oriented gradient,HOG)提取电力现场作业人员的特征,对现场人员的危险行为进行警告。随着人工智能的飞速发展,深度学习算法在目标检测领域已成为目前的主流算法。文献[3]使用OpenPose算法检测人体关键点,并提出基于人体关键点坐标的人员行为分类方法,对存在危险行为的人员进行警告。这些方法在很大程度上解决了电力施工人员穿戴不规范和操作违规的问题。但是在变电站的作业环境中,不仅有电力工作人员,还有常用的电力作业车,在不同的电力施工现场和执行不同施工任务时,为保障作业的安全性,对电力作业车的作业姿态[4]都有着不同的要求,然而目前却缺乏监测电力作业车安全作业的相关研究。
目前,大多数关于旋转目标的检测方法[5]都来源于遥感领域,主要检测卫星图片中的目标。文献[6]提出了旋转区域卷积神经网络(rotatable region convolutional neoral network,RRCNN)旋转目标检测算法,添加了旋转感兴趣区域(rotation region of interest,RROI)加强对目标的特征提取,提高了检测精度。文献[7]提出旋转目标检测网络(rotatable object detection network,R3-Net)算法,设计了一种边界感知旋转锚框(boundary-aware rotatable anchor,BAR),引入旋转区域敏感(rotatable position sensitive,RPS)池化,保留了目标位置信息和方向信息。文献[8-9]提出了一种针对小、杂乱和旋转物体检测算法(detection for small,cluttered and rotated objects,SCRDet)和精练单阶段检测算法(refined single stage detector,R3Det),SCRDet算法改进Soomth L1损失函数应用于边界框的回归问题,但是仍然未能解决目标旋转角度的边界问题;R3Det算法以RetinaNet为基础,增加了一个特征精炼模块(feature refinement module,FRM),提高了对目标的检测性能。文献[10]提出了新的精练单阶段检测算法(refined single stage detector,R4Det),设计了一个递归特征金字塔模块 (recursive feature pyramid,RFP) ,增加了递归连接块(recursive connection block,RCB),在一定程度上提高了检测性能。
以上提到的算法都存在着检测精度不高和检测速度慢的问题。近年来,YOLO系列算法不断更新迭代,已经从YOLOv1发展到了YOLOv5,在检测速度和精度上都有更好的表现。不少学者也开始将YOLO算法应用到旋转目标检测中。文献[11]在YOLOv5的基础上采用八参数标记方法标记数据,引入了Pixels-IoU(PIoU)函数,提高了网络的检测精度。文献[12]提出了一种基于R-YOLO的检测方法,采用五参数标记方法标记数据,重新设计了边框的回归方式、角度损失函数,并将主干网络更换为MobileNet,提升了网络的检测速度。
下面以电力作业车的机械臂作为研究对象,采用长边定义法与环形平滑标签结合的数据标注方法,使用改进的YOLOv5算法对电力作业车的机械臂进行作业角度检测,实现对电力作业车的危险操作预警。
YOLOv5结合了先前4个版本的优点,在检测速度和精度上都有更好的表现。YOLOv5网络可以分为Input、Backbone、Neck、Prediction 4个部分,网络结构如图1所示。
图1 YOLOv5 V6.0网络结构
Input即输入端,其作用是对输入网络的数据进行增强以及自适应锚框计算。数据增强的操作主要有HSV(调节图像的色调、饱和度和亮度)、degrees(对图像进行旋转)、translate(对图像进行平移)、scale(缩放图像)、shear(剪切图像)、flipud和fliplr(对图像上下翻转和水平翻转)、moscaic(将4张图像拼接在一起)。在YOLO算法中,针对不同的数据集都有初始设定的锚框anchor,在进行网络训练的时候,YOLO算法会在初始锚框的基础上输出预测框,然后和目标的真实框进行对比,通过计算差距,更新锚框参数。
BackBone主要结构为CSP-DarkNet结构,YOLOv5 V6.0网络设计了两种CSP结构以及SPPF结构。CSP1_X结构用于Backbone中,以加强网络的特征提取能力,CSP2_X用于Neck中。SPPF结构在SPP结构的首尾各增加了1个CBS模块,虽然两种结构的作用一样,但是SPPF结构的运行效率更高,消耗的时间更少。
Neck的主要结构为特征金字塔网络+判别器结构,其中的CSP2_X结构加强了网络的特征融合能力。
Prediction部分完成对大、中、小3种不同尺度的目标预测。
一般来说,基于深度学习的一阶段和二阶段目标检测算法采取的都是水平anchor。但是在检测一些带有角度的大横纵比目标时,水平anchor对检测目标的框选不够准确,在anchor中会出现多余的语义信息,导致主干网络不能精确地提取目标特征或者提取出多余的目标特征,最后使检测的精度下降。针对电力作业车机械臂这种横纵比较大的检测对象,采用旋转anchor对进行框选,可以有效地提高网络的检测精度。水平检测框与旋转检测框框选效果对比,如图2所示。
图2 水平检测框与旋转检测框检测效果
对原网络中的anchor进行重新设置,将其改用五参数方法[13]表示。五参数分别为x、y、w、h、θ,其中(x,y)为旋转矩形框的中心坐标,w和h分别为矩形框的短边和长边,采用长边定义法表示θ,即长边h与x轴的夹角为θ,如图3所示,θ的范围为[-90°,90°)。
图3 长边定义法
通常情况下要想降低检测模型的拟合难度,需要使用设定好的anchor对目标的真实框进行拟合,该操作会使大量增加anchor的数量,增加整个网络的训练时间。为了让anchor与真实框的拟合更快速,对自制的电力检修车数据集中标注的真实框采用K-means聚类[14]的方法重新生成anchor大小。查阅官方的YOLOv5源代码得到YOLOv5算法的初始anchor设置为[10,13,16,30,33,23]、[30,61,62,45,59,119]、[116,90,156,198,373,326],通过K-means聚类方法重新生成的anchor大小为[315,45,381,53,315,75]、[488,49,499,81,732,76]、[620,118,772,191,923,163],将重新生成的anchor大小写入到yaml文件中。
损失函数部分主要为class分类损失、θ角度损失、bbox边框回归损失、置信度损失。其中θ角度损失中角度θ的边界问题是关键。由于用于训练的数据目标参数具有周期性,在周期改变的边界处会使损失值突然变大,导致整个网络的训练难度加大。例如,在常规情况下,预测得到的θ为78°,目标旋转角度θ的真实值为79°,那么网络得到的角度距离为1°;在边界情况下,预测得到的θ为79°,目标旋转角度θ的真实值为-80°,那么网络得到的角度距离为179°,然而在真实情况下预测值与真实值的角度距离仅相差1°。
参考了文献[15]提出的环形平滑标签(circular smooth label,CSL)方法,CSL的示意图见图4,将角度θ的边界回归问题转化为分类问题,在定义的角度范围内划分类别,把连续的问题进行离散化处理,回避了边界问题。
图4 CSL结构
CSL的表达式如式(1)所示。
(1)
式中,g(x)为窗口函数,窗口的大小由半径r来决定。窗口函数g(x)需要满足周期性、对称性、单调性、有最大值的必要条件。窗口函数能够估计预测标签与真实标签之间的角度距离信息,在一定的角度范围内,网络得出的预测值越接近真实值,角度信息的损失值就越小。这里选用高斯函数作为窗口函数,半径r设置为6。
总体的损失函数设计如下:class分类损失不需要改变;θ角度损失设置为角度分类损失,采用和分类损失相同的二元交叉熵损失函数BCEWithLogitsLoss;由于将角度θ当做分类来处理,旋转框的角度信息与边框参数信息不再关联,旋转框的损失可以分为角度损失和水平框损失,边框的损失函数仍然采用IOU/GIOU/CIOU/DIOU损失函数。置信度分支的权重系数可以选择水平框IOU/GIOU/CIOU/DIOU,也可以选择旋转框IOU。通过实验对比,选择水平框的IOU进行网络训练时速度较快,并且预测框的置信度较高,所以采用水平框IOU/GIOU/CIOU/DIOU作为置信度分支的权重系数,如式(2)所示。
Ltotal=Lcls+Langle+Lbox+Lobj
(2)
式中:Ltotal为网络训练总损失;Lcls为分类损失;Langle为角度损失;Lbox为旋转框位置损失;Lobj为置信度损失。
所使用的服务器参数为:CPU为Intel(R) Xeon(R)CPU E5-2695 v4 @ 2.10 GHz;RAM大小为256 GB;操作系统为Windows 10专业版;GPU为Nvidia TITAN Xp 12 GB。软件配置为CUDA 10.2、Anaconda 3、PyCharm Community、Python 3.8、Microsoft Visual Studio 2017等,深度学习框架为Pytorch。
由于未能查找到电力作业车相关的数据集,采用自制的电力作业车数据集,数据集的格式参考遥感目标检测数据集DOTA。首先,采用RoLableImg软件对电力作业车机械臂进行标注;然后,将标注好的xml文件转化为DOTA数据集的txt格式,转化公式如式(3)—式(9)所示;最后,转化为YOLO网络训练数据的格式。
(x,y,w,h,-θ)→(xi,yi)
(3)
(x0,y0)=
(4)
(x1,y1)=
(5)
(x2,y2)=
(6)
(x3,y3)=
(7)
式中,(xi,yi)为转化后的坐标,最终得到的标签文件格式为
(class_idxywhθ)θ∈[0,180)
所自制的数据集共包含1200张折臂式电力作业车图片,共有两个分类类别:arma和armb,其中arma为电力作业车的上机械臂;armb为电力作业车的下机械臂,具体标识如图5所示。
图5 机械臂标识
将数据集按照4∶1∶1划分为训练集、验证集、测试集。为了使训练集和验证集中arma和armb的类别数量处于相对平衡的水平,避免数据过少产生的过拟合问题,使用YOLOv5算法中的数据增强方法,对数据集中的训练集合验证集进行扩充。扩充前的训练集数量为800张图片,验证集的数量为200张图片;扩充后的训练集数量为2979张图片,验证集的数量为762张图片。
为了检验所提YOLOv5旋转目标检测算法的检测效果,设置了3组对比实验,将主干网络分别更换为GhostNet、MobileNetV3、ShuffleNetV2。设置训练次数为300次,优化器选择adam,angle loss gain设置为0.8,angle BCELoss positive_weight设置为1.0,初始学习率设置为0.001,momentum设置为0.937。
实验得到的损失函数图像和评价指标得分见图6和表1。
图6 损失函数
通过损失函数的曲线图可以得出,以CSP-DarkNet作为特征提取的主干网络,网络的收敛速度更快,在训练后20次左右开始趋于平缓;训练的损失值下降也更快,并且损失值始终低于GhostNet、MobieleNetV3、ShuffleNetV2作为主干网络时的损失值。表1是各个网络在测试集上单个目标平均精度(average precision,AP)和总目标平均精度(mean average precision,mAP)的值。
表1 各网络测试结果
由表1可知,CSP-DarkNet-YOLOv51模型在电力作业车测试集上对机械臂arma和armb的平均检测精度分别达到了80.55%和79.47%,相较于检测精度较差的MobieleNetV3-YOLOv51,检测的总体平均精度提高了9.15%。各网络的检测效果如图7所示。
由图7可知,CSP-DarkNet-YOLOv51模型的检测效果最好,能够准确地完成对机械臂arma和armb的检测,而其余的模型对机械臂arma和armb均存在漏检情况。以图8为例,各网络对机械臂arma和armb的角度预测结果见表2。
图7 YOLOv5在各网络的检测效果
图8中的电力作业车进行标注后的机械臂arma和armb真实旋转角度分别为19°和76°。由表2可知CSP-DarkNet-YOLOv51模型对电力作业车机械臂的角度预测更符合真实角度。
图8 角度检测样本
表2 各网络角度预测结果
上面设计了一种基于YOLOv5的电力作业车机械臂旋转检测算法。在YOLOv5网络的基础上,修改了样本数据的标注方法,采用环形平滑标签+长边定义的方式对样本进行标注,将角度θ的边界回归问题转化为分类问题,解决了网络在训练时角度θ周期性变化产生的较大损失值问题。通过实验证明,修改后的CSP-DarkNet-YOLOv5模型在自制的电力作业车数据上有着较高的检测精度,并且能够准确地完成对电力作业车机械臂arma和armb的检测任务,以及机械臂arma和armb的角度预测任务。该算法可以为电力施工现场中电力作业车的预警工作提供参考,避免安全事故的发生。