基于 YOLOv8 的输电线路异物识别算法应用

输电线路作为电力系统的重要一环,保证其安全稳定运行是十分必要的。由于长期暴露于室外,线路所面临的不安全因素繁多,异物入侵便是其中之一。异物可能会引起线路短路甚至诱发火灾,因此要加强输电线路的日常运维工作。然而受地理、环境等诸多条件限制,传统的人工巡检方式存在效率低、准确性差、覆盖面小等问题。 常见的输电线路入侵异物包含鸟巢、风筝和悬挂的气球等。输电线路的巡检是排除异物干扰、保证线路稳定运行的重要手段,因此对巡检质量提出了较高要求。 目前我国大多数地区的巡检主要依靠人工,但人工巡检存在着不小的隐患。首先,传统的巡检方式主要是依靠运维人员凭借肉眼或者借助望远镜等工具进行观察,并排查输电线路是否有异常,要求运维人员有较高的经验水平,增加了巡检质量的不确定性。 无人机巡检的覆盖面更广。其搭载的飞行模块、GPS 技术、数字地球等融合技术更为高效,较于人工拥有着无可比拟的优势。在一些偏远险峻、人工难以到达的危险性较高的地区,或是由于突发状况人员不便巡检时,无人机便可代替人工,快速准确地捕获数据并进行智能处理及分析,提升数十倍的效率。并且无人机还可以依靠网络将数据实时传回,有利于数据整合,使数据的管理更为高效。其次,无人机巡检的准确性更高。传统的地面巡检主要依托肉眼,但高压输电线往往距人较远,有时异物会由于遮挡或角度问题处在视线盲区不易被发现,此类问题通过无人机便可轻而易举地解决。无人机可以飞至线路上空,近距离多角度对线路进行拍摄,一定程度上可以实现全方位无死角的排查监测,提高识别的准确率。最重要的是无人机具有较高的安全性。传统的巡检有时需要人员爬杆走线进行高空作业,存在着较高的危险性。常因环境干扰、运维人员操作不规范、劳动强度过高等问题发生伤害,应用无人机便可规避这一风险,使得巡检工作更加安全。 在进行边缘检测时,便设计出 Sobel、Prewitt、Canny 等算子用于检测。但这种方式比较依赖分类器的设计,且针对具体任务所开发的算法往往不具有普适性。一阶导数的边缘算子:通过模板作为核与图像的每个像素点做卷积和运算,然后选取合适的阈值来提取图像的边缘。常见的有Roberts算子、Sobel算子和Prewitt算子。二阶导数的边缘算子:依据于二阶导数过零点,常见的有Laplacian 算子,此类算子对噪声敏感。Roberts算子的模板分为水平方向和垂直方向,从其模板可以看出,Roberts算子能较好的增强正负45度的图像边缘。 Prewitt算子是一种图像边缘检测的微分算子,其原理是利用特定区域内像素灰度值产生的差分实现边缘检测。由于Prewitt算子采用 3×3 模板对区域内的像素值进行计算,而Robert算子的模板为 2×2,故Prewitt算子的边缘检测结果在水平方向和垂直方向均比Robert算子更加明显。Prewitt算子适合用来识别噪声较多、灰度渐变的图像 Sobel算子是一种用于边缘检测的离散微分算子,它结合了高斯平滑和微分求导。该算子用于计算图像明暗程度近似值,根据图像边缘旁边明暗程度把该区域内超过某个数的特定点记为边缘。Sobel算子在Prewitt算子的基础上增加了权重的概念,认为相邻点的距离远近对当前像素点的影响是不同的,距离越近的像素点对应当前像素的影响越大,从而实现图像锐化并突出边缘轮廓。Sobel算子根据像素点上下、左右邻点灰度加权差,在边缘处达到极值这一现象检测边缘。对噪声具有平滑作用,提供较为精确的边缘方向信息。因为Sobel算子结合了高斯平滑和微分求导(分化),因此结果会具有更多的抗噪性,当对精度要求不是很高时,Sobel算子是一种较为常用的边缘检测方法。

拉普拉斯(Laplacian) 算子是 n 维欧几里德空间中的一个二阶微分算子,常用于图像增强领域和边缘提取。它通过灰度差分计算邻域内的像素。Laplacian算子分为四邻域和八邻域,四邻域是对邻域中心像素的四个方向求梯度,八邻域是对八个方向求梯度。当邻域内像素灰度相同时,模板的卷积运算结果为0;当中心像素灰度高于邻域内其他像素的平均灰度时,模板的卷积运算结果为正数;当中心像素的灰度低于邻域内其他像素的平均灰度时,模板的卷积为负数。对卷积运算的结果用适当的衰弱因子处理并加在原中心像素上,就可以实现图像的锐化处理。 边缘检测算法主要是基于图像强度的一阶导数和二阶导数,但导数通常对噪声很敏感,因此需要采用滤波器来过滤噪声,并调用图像增强或阈值化算法进行处理,最后再进行边缘检测。下面是采用高斯滤波去噪和阈值化处理之后,再进行边缘检测的过程,并对比了四种常见的边缘提取算法。

# -*- coding: utf-8 -*-

import cv2

import numpy as np

import matplotlib.pyplot as plt

#读取图像

img = cv2.imread('zxp.jpg')

img_RGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) #转成RGB 方便后面显示

#灰度化处理图像

grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

#高斯滤波

gaussianBlur = cv2.GaussianBlur(grayImage, (3,3), 0)

#阈值处理

ret, binary = cv2.threshold(gaussianBlur, 127, 255, cv2.THRESH_BINARY)

#Roberts算子

kernelx = np.array([[-1,0],[0,1]], dtype=int)

kernely = np.array([[0,-1],[1,0]], dtype=int)

x = cv2.filter2D(binary, cv2.CV_16S, kernelx)

y = cv2.filter2D(binary, cv2.CV_16S, kernely)

absX = cv2.convertScaleAbs(x)

absY = cv2.convertScaleAbs(y)

Roberts = cv2.addWeighted(absX, 0.5, absY, 0.5, 0)

#Prewitt算子

kernelx = np.array([[1,1,1],[0,0,0],[-1,-1,-1]], dtype=int)

kernely = np.array([[-1,0,1],[-1,0,1],[-1,0,1]], dtype=int)

x = cv2.filter2D(binary, cv2.CV_16S, kernelx)

y = cv2.filter2D(binary, cv2.CV_16S, kernely)

absX = cv2.convertScaleAbs(x)

absY = cv2.convertScaleAbs(y)

Prewitt = cv2.addWeighted(absX,0.5,absY,0.5,0)

#Sobel算子

x = cv2.Sobel(binary, cv2.CV_16S, 1, 0)

y = cv2.Sobel(binary, cv2.CV_16S, 0, 1)

absX = cv2.convertScaleAbs(x)

absY = cv2.convertScaleAbs(y)

Sobel = cv2.addWeighted(absX, 0.5, absY, 0.5, 0)

#Laplacian算子

dst = cv2.Laplacian(binary, cv2.CV_16S, ksize = 3)

Laplacian = cv2.convertScaleAbs(dst)

# #效果图

# titles = ['Source Image', 'Binary Image', 'Roberts Image',

# 'Prewitt Image','Sobel Image', 'Laplacian Image']

# images = [lenna_img, binary, Roberts, Prewitt, Sobel, Laplacian]

# for i in np.arange(6):

# plt.subplot(2,3,i+1),plt.imshow(images[i],'gray')

# plt.title(titles[i])

# plt.xticks([]),plt.yticks([])

# plt.show()

# 用来正常显示中文标签

plt.rcParams['font.sans-serif'] = ['SimHei']

# # 显示图形

plt.subplot(231),plt.imshow(img_RGB),plt.title('原始图像'), plt.axis('off') #坐标轴关闭

plt.subplot(232),plt.imshow(binary, cmap=plt.cm.gray ),plt.title('二值图'), plt.axis('off')

plt.subplot(233),plt.imshow(Roberts, cmap=plt.cm.gray ),plt.title('Roberts算子'), plt.axis('off')

plt.subplot(234),plt.imshow(Prewitt, cmap=plt.cm.gray ),plt.title('Prewitt算子'), plt.axis('off')

plt.subplot(235),plt.imshow(Sobel, cmap=plt.cm.gray ),plt.title('Sobel算子'), plt.axis('off')

plt.subplot(236),plt.imshow(Laplacian, cmap=plt.cm.gray ),plt.title('Laplacian算子'), plt.axis('off')

plt.show()

1)Robert算子对陡峭的低噪声图像效果较好,尤其是边缘正负45度较多的图像,但定位准确率较差; 2)Prewitt算子对灰度渐变的图像边缘提取效果较好,而没有考虑相邻点的距离远近对当前像素点的影响; 3)Sobel算子考虑了综合因素,对噪声较多的图像处理效果更好。 4)Laplacian算子对噪声比较敏感,由于其算法可能会出现双像素边界,常用来判断边缘像素位于图像的明区或暗区,很少用于边缘检测; 随着无人机研发技术提高、GPS 定位技术优化及 5G 网络的开发,无人机的硬件性能水平更高、定位更准,信息传输及整合速率也得到大幅度提升,使无人机巡检愈发智能。 我国的线路巡检发展可分为三个阶段。2010 年前主要依靠人工,借助望远镜和相机等工具完成线路巡检。巡检人员大多需沿着巡检路径步行,目测线路故障。2010 年到 2020 年为第二阶段,随着旋翼飞行器、红外遥感等技术的出现,巡检进入了“机巡时代”。机巡主要通过人工操作直升机等工具进行现场巡检,但对操作人员的门槛要求较高。2005 年开始陆续对东北、华北等试点地区采用直升机进行巡检。近几年网络技术更迭,深度学习算法也取得了重大进展,凭借这些我国也正在迈入“智巡”时代。2019年我国首次采用无人机对藏中电力联网工程 500 千伏朗许线等线路进行了全自主智能化巡检,在没有人员操作控制的条件下完成了对线路的精细巡查,保障了“电力天路”的稳定运行。 何俊等人(2022 年)提出了一种基于深度卷积神经网络 EF⁃YOLO 的检测方法对输电线路的鸟类进行识别,通过借鉴 EfficientNet⁃lite 轻量网络的特征提取部分提出了 EF⁃YOLO 模型,又选用适当的损失函数使其具备良好的检测精度及实时性。邹辉军等人(2022 年)提出了一种基于改进 YOLOv5 的输电线路小目标异物检测方法,通过对原有的 YOLOv5 网络结构进行优化,将原本的 FPN 结构更换为 BiFPN,减小了计算量,并且运用场景增强、加入噪声等方式扩充数据集,使网络更有利于排查小异物造成的安全隐患。杨剑锋等人(2021年)通过优化 YOLOv3 网络,提出了一种基于改进的 Dense-YOLOv3 网络模型来对输电线路异物进行入侵识别,运用条件生成对抗网络算法对含有目标异物的图像数据进行扩充,解决了异物图像数据样本较少的问题,并且将 DenseNet 网络引入,使得该网络有很好的识别效果。陈嘉琛等人(2021 年)提出了一种基于 YOLOv3 网络的输电线路缺陷识别方法,在YOLOv3 原结构内将空间金字塔池化模块引入,提高了对不同尺寸图片检测的准确性,并且减少了新模型的网络通道将其进一步轻量化,降低了对服务器的硬件需求,不仅减少了迭代时间,更提升了整体性能。邱志斌等人(2021 年)提出了一种基于迁移学习的危害鸟种图像识别方法来检测线路涉鸟故障危害的鸟种,通过类激活映射去除复杂的背景噪声,并且采用 ImageNet 图像数据集对网络模型进行预训练,搭建了融合多卷积的神经网络模型,有效地对渉鸟故障鸟种进行识别,为此类故障防治提供参考。郝艳捧等人(2022 年)提出了一种基于 Mask R-CNN 的图像识别方法用于检测输电线路覆冰导线,通过图像数据清洗和人工标注建立了南方输电线路覆冰数据集,并改进了 Mask R-CNN 使其面对背景复杂的数据图像也有良好的检测效果,识别与分割的准确率达 92%以上。谢伟等人(2022 年)提出了一种基于 PSO-BP 的特征识别方法对输电线路外力破坏进行检测,针对人为撞击威胁,通过采集目标的三维特征量建立数据集,采用粒子群优化算法为神经网络选取初值,实验表明该算法具有较高的检测精度。王杨杨等人(2023 年)提出了一种基于改进型 YOLOv4 的输电线路鸟巢检测方法,在骨干特征提取网络中引入深度可分离卷积提高了网络的检测速度,并基于K-means++算法对锚框的大小和比例进行改进,建立了基于最小凸集的回归损失函数,使小目标的检测能力提升,该方法在拥有较高准确度的同时有效降低了运算开销。吴军等人(2021 年)针对异物缠绕在输电线路上的问题提出了一种适用于移动端的 YOLO 算法,通过将 CSPDarknet-tiny 选作主干网络并对 SPP、PAN 做出改进,使改进后的 YOLO 算法具备较好的精度及更快的检测速度,更适用于移动端检测。沈茂东等人(2019 年)提出了一种新的网络结构 TLFOD Net 来识别输电线路上的悬挂异物,通过端对端的联合训练方式提高性能,有着较好的检测能力。张亚婉等人(2023 年)提出了一种基于改进 YOLO 的绝缘子缺陷检测方法,采用 K-means++算法对图像数据集进行聚类分析,并运用 NMS 剔除多余检测框,有效地提高了对绝缘缺陷识别的准确率。庞博等人(2022 年)提出了一种基于改进 YOLOv5的图像识别算法用于检测电力线路缺陷,在原有 YOLOv5 的基础上,将 CIoU Loss 作为边界框的损失函数,并且选用 DIoU NMS 进行非极大值抑制处理,除此之外还通过冻结部分网络层权重的方式训练网络模型,使得该算法在识别电力巡检图像缺陷时有着更高的准确率。 针对复杂的识别任务,只借助卷积层进行特征提取是远远不够的。卷积本质上属于线性变换,因此无法处理非线性问题。例如在提取音频特征时,往往需要引入非线性函数使模型能够尽可能拟合数据。因此需要加入激活函数对其进行非线性处理,增加整个网络的非线性特性。常见的激活函数有 Sigmoid、Tanh、Relu、LeakyRelu、SiLU 等。 自 YOLOv4 后,YOLO 系列算法陆续加入了 Mosaic、Mixup 等图像混叠增强技术,丰富了图像的检测背景、增加目标个数以及图像数据的多样性。Focus 通过切片操作,将原输入图像分成四个独立的特征层并进行堆叠,将通道的维数扩大了四倍,保留了更多的原始信息。虽然 Focus 结构减轻了信息丢失,但是增加了计算量,而且提高了对 GPU 硬件性能的要求。因此,在 YOLOv8 中,将原先的 Focus 结构替换为一个 3×3 大小的卷积层。不仅可以取得相同的效果,而且对一些 GPU 而言,使用卷积核会更加友好且高效。 CSPNet 不单是一种网络结构,更是一种优化思想。一般与 ResNet、DenseNet 等网络进行结合,通过优化网络结构从而减少计算量和内存耗费。以DenseNet为例,通过CSPNet,底层特征图按通道被分成两个部分,一部分经过原 DenseNet 等模块输出,另一部分直接与刚才输出的结合,这样以来不仅减少了网络计算量,更提升了速度和准确率。

YOLOv5 不仅在骨干网络使用了 CSPNet 结构,也在 C3 模块中运用。YOLOv8 沿用 CSPNet思想,但将 YOLOv5 中原有的 C3 模块改为 C2f 模块。C2f 模块作为全新提出的模块,融入了 C3和 ELAN 模块的思想。因此,在介绍 C2f 模块之前,先讲解其组成部分、C3 模块及 ELAN 模块。C2f 本质上就是在结合了 C3 模块及 ELAN 模块的思想。将原本串接的 Bottleneck 模块运用梯度分流的思想连接,优化了模块结构,有效的避免了在深度过深时收敛性的恶化。在优化网络结构获得轻量化的同时,又可以获取到丰富的梯度流信息,提升了 YOLOv8 模型的整体性能。 YOLOv8 的 Neck 层中,使用 SPPF 模块(Spatial Pyramid Pooling-Fast)替代原本的 SPP 模块(Spatial Pyramid Pooling),并且延续了 YOLOv5 中 FPN+PAN 模块,但在结构上稍作修改,进一步提高网络的特征提取能力。SPP 模块在 YOLOv5 最初的版本中使用。SPP 全称空间金字塔池化。通过使用 13×13、9×9、5×5、1×1 四种大小的卷积核,对特征图像进行多个特征提取。SPP 模块在一定程度上解决了多尺度问题,提高了算法检测的精度。

SPPF 模块将原有的3 种不同尺寸的卷积核,改为 3 个 5×5 的卷积核。这是因为将 2 个 5×5 的卷积核串联,其效果等价于 1 个 9×9 的卷积核。同理,3 个 5×5 的卷积核串联等效于 1 个 13×13 的卷积核。与直接使用大的卷积核相比,多个小卷积核串联后减少了网络的计算量,提高了检测效率。在实际的实验中,对于相同的输入,SPP 和 SPPF 输出结果相同,但后者的速度是前者的二倍。相较于 YOLOv5,YOLOv8 除了将前者的 C3 模块替换为 C2f 模块之外,也去掉了上采样前的卷积层,将主干特征提取网络中不同阶段的输出特征直接进行上采样。进一步优化网络结构,提高检测效率。 YOLOv8 网络结构的另一部分改进集中在 Head 层部分,将 YOLOv5 中原本的耦合检测头(coupled head)替换为解耦检测头(decoupled head),并且从 Anchor Based 变成了 Anchor Free。解耦检测头decoupledhead 将分类与回归进行解耦,将其拆分为两个独立的分支。实验表明,对于相同的检测任务,使用解耦检测头可以加速收敛,检测精度也有所提高。

锚框依赖手动设计,预设的锚框尺寸要尽可能的与真实值重叠,因此对于检测目标尺存相差大的两个检测任务,由于锚框尺寸问题很难进行迁移。其次,检测时需要生成的密集的锚框,不仅耗时,而且绝大部分锚框因未与真实框达到一定的 IoU 而变为负样本,易导致正负样本不均。最后,使用锚框会产生诸多超参数的组合问题,难以调优。YOLOv8 是 Anchor Free 网络,不再对锚框的偏移量进行预测,因此改善了锚框所带来的诸多问题。 YOLOv8 中,分类损失函数为 VFL(Varifocal Loss),回归损失采用 CIoU Loss+DFL(Distribution Focal Loss)的形式。针对正负样本不均的问题,运用 Varifocal Loss 函数,提出了非对称的加权操作。VarifocalLoss 函数公式所示:

其中,q 为 label,在正样本时 q 为 IoU 值,反之 q 为 0。即当为正样本时是一般的 BCE 损失函数,负样本时便是 Focal 损失函数。Varifocal Loss 对正负样本的处理不再是对称的,它通过考虑二者不同的重要程度,将正样本突出为主体。 在对输入图像进行检测时,往往有多个目标遮挡或重叠情况。若出现重叠情况时,此时标注框和检测框均无法真实地反映出图像语义。所以此时需要用更加准确的边界框表征方式,将狄拉克分布表征方式改为一种更加通用的概率表征方式。因为位于真实坐标附近的区间点有着更高的概率,因此提出了 Distribution Focal Loss,简称 DFL,公式所示:

其中 S 为概率输出值。由公式可看出,在 yi+1与 y 非常接近而且 S 概率输出大时,此时 DFL较小,使得分布向标注中心靠近。因此,DFL 能够让新提出的网络更快地聚焦于目标 y 附近的值,增大它们的概率,加速收敛。 人脑有一套高效的识别流程:即在面对有着复杂信息的场景时,视觉系统会迅速锁定重要物体将注意力集中在此处,并忽略其他无关区域,这极大地提高了神经计算资源分配的合理性,使视觉信息的处理更加高效。在图像检测任务中,目标物体自身和其所处环境、目标物体本身不同的特征,这些信息的重要性都是有差异的,体现在卷积神经网络中即为不同特征图之间的重要程度具备差异性。受人类视觉处理系统所启发,研究人员提出了注意力机制。通过引入注意力机制,使网络可以获取到每张特征图的重要程度并生成权重,利用检测结果对特征图的权重更新进行反向指导,使得模型在处理任务时着重强调图像中有用的空间,将注意力放在其上,同时抑制无关的特征,提高效率。 传统的卷积一般采用固定大小和比例的矩形结构,对特征图某一特定位置进行特征提取。然而,一般情况下特征层上的各位置的待测目标都是尺度不同形状各异的,因此常规卷积并不能很好的适应各目标间的形变,使得模型提取的有效信息减少,易遗漏目标的关键特征信息,使网络模型准确率下降。 为了使卷积神经网络拥有更好的识别几何变换的能力,引入可变形卷积 DCN(Deformable Convolution)代替常规卷积。可变形卷积可以依据待测对象的形状及比例自动适应并调整,通过运用不规则卷积核,解决了传统固定矩形结构采样不足的弊端,使得网络模型可以对物体的形变更好地进行模拟。

假设卷积核大小为 3×3,那么此卷积核的采样点共有 9 个,研究者将这 9 个采样点都赋予一个偏移量,因此使得卷积核的位置和尺寸都可以依据目标物体动态调整,可以在特征提取时更加贴合物体的尺寸与形状,优化网络模型对不规则及形变严重的目标的检测性能。 在对小目标检测时,经过多次特征提取和下采样操作后,它们特征信息往往容易丢失,使模型准确率下降。为了更好的获得特征信息就需要对输入图像改变尺寸,但这一操作会令模型的运算量增大且耗费更多的内存和资源。若限制下采样操作又不利于提取深层信息。为了解决这一问题,提出了 Mosaic 和 Mixup 等图像混叠类的数据增强方式,进一步扩充了数据集,只增加少部分计算量便可提高识别率。 鉴于无人机巡检有着人工不可比拟的诸多优势,对其所运用的目标检测算法进行研究具有很强的现实意义。通过分析具体任务,总结出在面对输电线异物检测任务时,需要算法有较高的实时性,并且鉴于输电线路背景干扰因素多、异物目标形状不规则等问题,要求算法有着较高的精度以及更好的识别形变物体的能力。 YOLOv8 抛弃了以往 YOLO 主体系列网络一直运用的 Anchor Based 转而改为 AnchorFree,并且将 Head 头进行解耦,一定程度上昭示了目标检测算法在未来的研究发展方向。除此之外,还将 C3 模块及 ELAN 模块的思想进行结合提出 C2f 模块,优化特征提取主干网络及特征融合网络,提升模型精度与效率。针对正负样本不均的问题,运用 Varifocal Loss 作为分类损失函数抑制负样本,突出正样本为主体部分。并且采用 CIoU Loss+Distribution Focal Loss 作为回归损失函数,进一步提升网络性能。

参考文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。