王書坤,高 林,伏德粟,劉 威
(湖北民族大學(xué) 信息工程學(xué)院,湖北 恩施 445000)
輸電線路的穩(wěn)定運行對電網(wǎng)的安全至關(guān)重要,輸電線路部件的故障類型主要包括:絕緣子故障、均壓環(huán)故障、防震錘故障、輸電線故障等[1].其中,絕緣子是輸電線路中用量最多的部件,也是引起線路故障的主要原因之一,因此需要對其進(jìn)行定期巡檢.傳統(tǒng)的線路巡檢主要靠人工,需要巡檢人員登上桿塔去檢查,這樣的方法費時費力,且有一定的危險性.隨著無人機以及深度學(xué)習(xí)技術(shù)的發(fā)展,搭載目標(biāo)檢測算法的無人機巡檢逐漸成為主流.
目前基于深度學(xué)習(xí)的目標(biāo)檢測算法主要分為兩類:一類是基于區(qū)域提取的兩階段目標(biāo)檢測模型,如R-CNN(Regions Convolutional Neural Networks)、Fast R-CNN、Faster R-CNN等,將目標(biāo)檢測分為特征提取和特征分類兩步;另一類是直接進(jìn)行位置回歸的單階段目標(biāo)檢測模型,如SSD(Single Shot MultiBox Detector)、YOLO(You Only Look Once)系列等,將目標(biāo)檢測轉(zhuǎn)換成回歸問題[2].隨著目標(biāo)檢測算法發(fā)展地日趨成熟,人們開始思考將目標(biāo)檢測算法應(yīng)用到線路巡檢中.虢韜等[3]使用Faster-RCNN模型來解決絕緣子中的自爆缺陷識別,最終絕緣子檢測精度為95%,但每張圖片的平均檢測時間卻需要320 ms,檢測的實時性有待提高.李偉性等[4]使用ResNet(Residual Network)替代VGGNet(Visual Geometry Group Network)的SSD算法來實現(xiàn)輸電線路上絕緣子缺陷檢測,也取得了不錯的效果.賴秋頻等[5]使用YOLOv2網(wǎng)絡(luò)并結(jié)合邊緣檢測、直線檢測、圖像旋轉(zhuǎn)等方法來實現(xiàn)輸電線路絕緣子的缺陷診斷,最終平均識別精確率達(dá)到了90.1%,且識別速度達(dá)到了30幀/s.吳濤等[6]使用輕量級的YOLOv3進(jìn)行絕緣子的缺陷診斷,結(jié)果也取得了近90%的平均精確率,速度也達(dá)到了26.1幀/s.高健宸等[7]使用K-means++改進(jìn)先驗框的YOLOv4來實現(xiàn)絕緣子爆裂故障識別,最終平均精確率為92.6%,速度為46幀/s.
由此可見,兩階段目標(biāo)檢測算法精度高,但檢測速度慢,不能滿足實時性的要求;而單階段的目標(biāo)檢測算法速度雖然提升了,但精度卻降低了.為了減小模型,提升檢測速度,同時還要保證較高的精確率,本文提出了一種改進(jìn)的輕量化YOLOv5來檢測絕緣子缺陷的算法模型.
YOLO算法是Joseph Redmon于2015年提出的單階段目標(biāo)檢測算法,其核心思想是把目標(biāo)檢測任務(wù)當(dāng)作單一的回歸任務(wù)[8].而后作者又對其進(jìn)行了改進(jìn),分別于2017年提出YOLOv2[9],2018年提出YOLOv3[10],2020年Alexey Bochkovskiy提出了YOLOv4[11],YOLOv4在原來的YOLO目標(biāo)檢測架構(gòu)的基礎(chǔ)上,采用了很多優(yōu)化策略,例如在輸入端使用了Mosaic數(shù)據(jù)增強,將主干網(wǎng)絡(luò)改為CSPDarknet53,在原來FPN(Feature Pyramid Networks)的基礎(chǔ)上增加PAN(Path Aggregation Network)等.而后不久Glen Jocher又提出YOLOv5算法,其在性能與YOLOv4不相伯仲的同時,在速度上進(jìn)一步提升.按照官方發(fā)布的數(shù)據(jù),現(xiàn)版本的YOLOv5每個圖像的推理時間最快僅需0.007 s,即可達(dá)140幀/s(FPS),而且YOLOv5的模型大小只有YOLOv4的1/9.
YOLOv5有s、m、l、x 4個不同大小的網(wǎng)絡(luò)模型,其中YOLOv5s是最小的網(wǎng)絡(luò)模型,其他模型均為在其基礎(chǔ)上不斷增加網(wǎng)絡(luò)深度和寬度的產(chǎn)物.表1是各個版本的YOLOv5模型在COCO2017驗證集與測試集上的各項指標(biāo),可以看出隨著網(wǎng)絡(luò)模型的加深,雖然其檢測性能不斷增強,但是模型尺寸越來越大,檢測速度越來越慢.為了實現(xiàn)模型的輕量化,使其更易于移植到嵌入式設(shè)備中,選擇YOLOv5s作為基礎(chǔ)模型.
表1 YOLOv5各版本性能分析
YOLOv5從發(fā)布以來,已經(jīng)更新到5.0版本,其激活函數(shù)已經(jīng)從早期的LeakyReLU和Hardswish統(tǒng)一都變成了SiLU激活函數(shù).并且采用了C3模塊代替了原來的BottleneckCSP模塊,C3模塊比BottleneckCSP模塊少了瓶頸結(jié)構(gòu)中的一個卷積層,使得整體模型的尺寸變小,推理速度也有所提升.雖然相比于3.0版本,精度有0.8%的下降,但是相比于其速度的提升,這點精度損失還在接受范圍內(nèi),本次實驗是以5.0版本模型為基礎(chǔ)進(jìn)行的改進(jìn).
YOLOv5的模型主要由Backbone和Head兩部分組成,其中Backbone作為特征提取模塊主要由Focus、C3、SPP模塊組成,Head部分主要包括提取融合特征的頸部(Neck)和Detect模塊,其網(wǎng)絡(luò)模型如圖1所示.
圖1 YOLOv5網(wǎng)絡(luò)結(jié)構(gòu)
在Backbone部分,主要由3種模塊組成.① Focus模塊.這是YOLOv5獨有的結(jié)構(gòu),其主要思想是通過切片操作來對輸入圖片進(jìn)行裁剪,從高分辨率圖像中,周期性的抽出像素點重構(gòu)到低分辨率圖像中,即將圖像相鄰的4個位置進(jìn)行堆疊,將w、h維度信息聚集到c通道空間,在減少計算量的同時提高了每個點的感受野,避免了原始信息的丟失.② CSP(Cross Stage Partial network)模塊.其主要通過將基礎(chǔ)層的特征圖分割成兩部分,然后用跨階段分層結(jié)構(gòu)進(jìn)行合并的方式來實現(xiàn)更豐富的梯度組合.而YOLOv5的作者同樣借鑒了這種結(jié)構(gòu),不過相比于YOLOv4只在Backbone主干部分使用了CSP結(jié)構(gòu),v5的作者設(shè)計了兩種CSP結(jié)構(gòu),分別運用于主干部分和頸部,而后作者又對其進(jìn)行了改進(jìn),通過去除瓶頸結(jié)構(gòu)中的一個卷積層,將其改成了C3模塊.③ SPP(Spatial Pyramid Pooling network)模塊.該模塊是借鑒了何凱明于2014年提出的SPPNet[12],又稱空間金字塔池化網(wǎng)絡(luò),通過k=(1×1、5×5、9×9、13×13)的最大池化的方式將不同尺度的特征圖進(jìn)行拼接,實現(xiàn)了不同尺度特征的融合,進(jìn)而提升了感受野,提取出了重要的特征.
在Head部分,YOLOv5使用了特征金字塔FPN+PAN的結(jié)構(gòu),F(xiàn)PN層通過上采樣的方式將高層與低層的特征信息進(jìn)行傳遞融合,而PAN層則將低層特征與高層特征進(jìn)行拼接,使低層分辨率高的特征傳到上層去.通過FPN+PAN的結(jié)構(gòu),從不同的主干層對不同的檢測層進(jìn)行特征聚合,有效解決了多尺度問題.
目標(biāo)檢測任務(wù)的損失函數(shù)由分類損失和回歸損失兩部分構(gòu)成.分類損失又包括置信度損失和類別損失,這兩種損失都比較簡單,主要使用交叉熵?fù)p失作為損失函數(shù);回歸損失又稱為坐標(biāo)位置損失,且隨著目標(biāo)檢測算法的發(fā)展在不斷改進(jìn),從2016年的IOU_ Loss到 2019年的GIOU_ Loss再到2020年的DIOU_Loss,到現(xiàn)在最新的CIOU_ Loss.其中IOU_Loss只考慮了檢測框和目標(biāo)框重疊面積.GIOU_Loss多考慮了邊界框不重合時引起的問題.DIOU_Loss增加了邊界框中心點距離的信息.而CIOU_Loss又多考慮了邊界框?qū)捀弑鹊某叨刃畔?本文在經(jīng)過大量實驗后,選擇了CIOU_loss作為坐標(biāo)位置損失.
改進(jìn)的輕量型YOLOv5相對于原版算法主要有三方面改進(jìn),一是使用了輕量型的Ghost卷積,二是使用了GhostBottleneck模塊,三是用了改進(jìn)的K-means算法修改先驗框.
Ghost卷積來自GhostNet[13],GhostNet是為了降低卷積神經(jīng)網(wǎng)絡(luò)的計算量,使之輕量化,更易于在終端部署而提出的一種卷積模塊.它是通過“少量傳統(tǒng)卷積”+“輕量的冗余特征生成器”的方式代替?zhèn)鹘y(tǒng)的卷積層,在減少網(wǎng)絡(luò)整體計算量的同時,又保證了網(wǎng)絡(luò)的精度.該模塊的實現(xiàn)分為兩個部分,一是少量普通卷積,二是簡單的線性操作.先通過少量的普通卷積得到一部分特征圖,然后將得到的特征圖通過線性操作生成更多特征圖,最后將兩組特征圖在指定維度拼接起來,其原理如圖2所示.
圖2 普通卷積與Ghost卷積圖3 GhostBottleneck模塊 Fig.2 General convolution and Ghost convolution
GhostBottleneck的基本結(jié)構(gòu)與C3模塊類似,只是將原本的卷積用Ghost卷積代替,其具體結(jié)構(gòu)如圖3所示.
改進(jìn)的輕量型YOLOv5網(wǎng)絡(luò)整體結(jié)構(gòu)如表2所示.表中輸入列的-1是指輸入來自上一層輸出,參數(shù)列的值為本模塊的參數(shù)量,模塊列表示模塊類型,張量信息列則分別代表該模塊的輸入通道數(shù)、輸出通道數(shù)、卷積核大小和步長.
表2 改進(jìn)的YOLOv5整體網(wǎng)絡(luò)結(jié)構(gòu)
改進(jìn)前后模型參數(shù)的對比如表3所示.由表3可知,改進(jìn)后模型總共373層,模型總參數(shù)4 163 887個.相比于改進(jìn)前的7 066 239個參數(shù),參數(shù)總量減少了41.1%,計算量也從原來的16.4GFLOPS變?yōu)榱?.2GFLOPS,減少了43.9%.實現(xiàn)了對原模型較大程度的壓縮,使之更加輕量化.
表3 改進(jìn)前后模型參數(shù)對比
利用K-means算法來確定先驗框,已經(jīng)成為目標(biāo)檢測不可缺少的一個步驟.YOLOv5自帶的K-means算法,可以在自己的數(shù)據(jù)集上聚類新的先驗框,但它是以樣本框之間的歐式距離作為距離度量,這樣會導(dǎo)致在計算損失時,大的先驗框占比更大.如圖4所示,紅色代表真實框,藍(lán)色代表先驗框,如果用歐式距離度量的話,左側(cè)(8-6)2=4,右側(cè)(4-3)2=1(此處數(shù)字為單位長度,無實際單位),很明顯左側(cè)較大框占比更大.但是聚類的目的是使先驗框和臨近的真實框有更大的IOU值,下面兩種情況明顯IOU值相同,故在損失計算時,應(yīng)占比相同.因此,使用了新的度量公式.
圖4 不同尺度的先驗框
d=1-IOU(box,centroid),
(2)
改進(jìn)后K-means算法得到的先驗框的平均IOU為85.68%,比改進(jìn)前提升了3.1%,使用改進(jìn)后的K-means算法得到9個先驗框,分別對應(yīng)不同尺度的特征圖,先驗框分布如表4所示.
表4 聚類后的先驗框分布
實驗數(shù)據(jù)來自中國電力線路絕緣子數(shù)據(jù)集(CPLD),包含由無人機拍攝的和合成缺陷的絕緣子圖像共848張,其中,正常絕緣子圖像600張,有缺陷的絕緣子248張.因為沒有收集到足夠有缺陷的絕緣子圖像,所以大部分缺陷絕緣子是通過合成圖像來構(gòu)建的.目標(biāo)檢測任務(wù)需要大量的數(shù)據(jù),故利用Albumentations工具對原本的848張圖像進(jìn)行擴充,通過旋轉(zhuǎn)、裁剪、擦除像素點以及調(diào)整圖像的亮度飽和值等方式將圖像擴充至4 200余張,使用4 000張進(jìn)行訓(xùn)練,余下的200多張進(jìn)行驗證,部分圖像數(shù)據(jù)擴充效果如圖5所示.
(a) 原圖(b) 繞y軸旋轉(zhuǎn)(c) 擦除像素點(d) 隨機裁剪(e) 修改對比度
并使用Labelme圖片標(biāo)注工具對所有圖像進(jìn)行標(biāo)注,將絕緣子標(biāo)注為insulator,缺陷位置標(biāo)注為defect,具體如圖6所示.通過上述工作,完成數(shù)據(jù)集制作.
圖6 數(shù)據(jù)集標(biāo)注
實驗采用的操作系統(tǒng)為Windows10,GPU型號為GeForceRTX1070,顯存大小8GB,內(nèi)存大小16GB,CPU型號為Intel(R)Core(TM)i7-7700kCPU@4.2GHz.所有模型基于Pytorch1.9,并使用Cuda11.0和Cudnn8.0.4對GPU進(jìn)行加速.
為了實現(xiàn)模型的最佳性能,使用了SGD(StochasticGradientDescent)和Adam(adaptivemomentestimation)優(yōu)化器做對比,使用不同優(yōu)化器的結(jié)果如表5所示.
表5 改進(jìn)前后在不同優(yōu)化器下的結(jié)果對比
由表5可知使用SGD優(yōu)化器的平均準(zhǔn)確率普遍比Adan高,因此在后續(xù)實驗中默認(rèn)選擇SGD作為優(yōu)化器.之后又通過調(diào)整學(xué)習(xí)率,使用Mosaic數(shù)據(jù)增強以及增加矩形訓(xùn)練等方式不斷進(jìn)行網(wǎng)絡(luò)訓(xùn)練,最終改進(jìn)后YOLOv5模型的各個參數(shù)指標(biāo)隨訓(xùn)練周期的變化如圖7所示.由圖7可知,隨著模型的不斷訓(xùn)練,訓(xùn)練集的位置損失和類別損失不斷下降.驗證集的位置損失在50個訓(xùn)練周期之后趨于穩(wěn)定,最終穩(wěn)定在0.01左右,置信度損失則穩(wěn)定在0.005左右,類別損失則趨近于0.000 5,模型檢測的精確度和召回率穩(wěn)定在0.95左右.
圖7 改進(jìn)后YOLOv5的參數(shù)指標(biāo)
為檢驗改進(jìn)前后模型的性能優(yōu)劣,通過使用不同模型進(jìn)行測試,結(jié)果如表6所示.由表6可知,改進(jìn)后的絕緣子檢測網(wǎng)絡(luò)模型,在保證精度的基礎(chǔ)上,速度大大提升,能夠滿足無人機電力巡檢的任務(wù)需求.
表6 不同模型的檢測性能
改進(jìn)后的網(wǎng)絡(luò)模型可以準(zhǔn)確地定位絕緣子和缺陷位置,是一種可行的絕緣子缺陷檢測算法,其中絕緣子位置用insulator標(biāo)出,缺陷位置用defect標(biāo)出.最終模型在面對不同場景時的具體檢測效果如圖8所示.
(a) 缺陷絕緣子 (b) 誤檢 (c) 漏檢
本文提出了一種改進(jìn)的輕量型YOLOv5絕緣子缺陷檢測算法.使用輕量型的Ghost卷積代替一般卷積以提高檢測速度,用GhostBottleneck代替C3以減少模型參數(shù),并使用1-IOU距離代替原本的歐氏距離以改進(jìn)K-means算法生成先驗框.通過大量實驗,改進(jìn)后的網(wǎng)絡(luò)模型在保證絕緣子檢測精度的前提下,大幅減少了模型參數(shù),提升了網(wǎng)絡(luò)的檢測速度,更易于在嵌入式終端部署.