應 斌,唐 斌,潘俊杰,郭 震
(1.國網浙江省電力有限公司臺州供電公司,浙江 臺州 318000;2.臺州宏達電力建設有限公司,浙江 臺州 317000)
電力桿塔作為支撐輸電線的塔架結構,是輸電線路中必不可少的關鍵設備,同時也是輸電線路巡檢的重要監測對象。電力設備長期暴露在野外,容易出現各種安全隱患,定期巡檢輸電線路是確保電力安全的重要保障。其中,桿塔檢測是輸電線路巡檢的重要環節。目前無人機技術的高速發展為輸電線路巡檢帶來了新的前景。相比較人工巡檢,使用無人機進行巡檢具有很多優勢。無人機體積小,成本低,操控方便,可以在人工徒步到達不了的艱苦惡劣環境下飛行,適用于在不同位置和不同角度拍攝圖像和視頻,具有優良的機動性和靈活性。在出現自然災難時,無人機仍然可以工作,受環境和天氣限制少,其飛行速度較快,具有較高的輸電線路巡檢效率[1]。
近年來,隨著深度學習在計算機視覺方面的迅速發展,使得無人機航拍巡檢輸電線路的桿塔成為現實[2-4]。卷積神經網絡在計算機視覺領域上表現得尤為出眾,已經廣泛應用于計算機視覺的各個領域,包括圖像分類、目標檢測和語義分割等[5-8]。卷積神經網絡利用組合低層特征得到更加抽象的高層特征或屬性,具有優良的檢測精度和速度[9]。特別是YOLO 算法憑借優良的識別效果和檢測速度,在端到端的目標檢測領域取得了重要的成果[10]。
電力桿塔由寬度、長度、方向各異的金屬鋼條構成,每個金屬鋼條相互交錯,交叉點多,形成網狀結構。可以采用計算機視覺的方法來提取電力桿塔的有效特征信息,實現對電力桿塔的檢測。文獻[11]采用基于Faster R-CNN 目標檢測模型構建特征融合算法處理特征信息,對桿塔關鍵位置進行檢測,該算法檢測精度較高,但是檢測的速度較慢,不利于對桿塔的實時監測。文獻[12]分析了電力桿塔的特征后,對桿塔提取的線段進行膨脹處理,尋找線與線之間的交叉點并統計其角度,角度值個數超過閾值的區域可判斷為電力桿塔,但該方法不適用于很多復雜背景下的檢測,精確度不高。文獻[13]采用LSD 算法直線段檢測和Harris 角點檢測,實現桿塔的初定位,最后通過HOG(方向梯度直方圖)特征進行SVM(支持向量機)分類器的訓練,用訓練好的分類器去除偽目標,實現電力桿塔的最終定位,具有較好的識別效果。
本文針對電力桿塔實時檢測的現狀,提出了一種基于YOLOv3 檢測模型的電力桿塔檢測算法。該算法可以實現無人機在航拍巡檢數據中實時檢測出電力桿塔,檢測速度快、精度高,對無人機輸電線路巡檢具有重要意義。
YOLO 是一種單階段檢測器,直接給出最終的檢測結果,沒有顯示生成候選區域的步驟,檢測速度較快,檢測精度高,在檢測過程中使用整個圖像的特征,減少了因為背景產生的錯誤。
YOLOv3 在結構上,采用了特征提取網絡Darknet-53,Darknet-53主要由53個卷積層組成,使用了大量的3×3 和1×1 卷積核[14]。它主要借鑒殘差網絡的設計思想,在層與層之間加入了一種快捷鏈路,加強了對小目標的檢測能力。Darknet-53 中的殘差卷積就是進行一次3×3、步長為2 的卷積,然后保存該卷積layer,再進行一次1×1 的卷積和一次3×3 的卷積,并把這個結果加上layer 作為最后的結果。殘差網絡的特點是容易優化,并且能夠通過增加相當的深度來提高準確率,其內部的殘差塊使用了跳躍連接,緩解了在深度神經網絡中增加深度帶來的梯度消失問題。Darknet-53 的每一個卷積部分使用了特有的DarknetConv2D 結構,每一次卷積的時候進行L2正則化,完成卷積后進行BatchNormalization 標準化與Leaky Relu。BN 標準化就是通過將該層特征值分布重新拉回標準正態分布,特征值將落在激活函數對于輸入較為敏感的區間,輸入的小變化可導致損失函數較大的變化,使得梯度變大,避免梯度消失,同時也可加快收斂。普通的Relu 是將所有的負值都設為零,當Relu 的輸入值為負的時候,輸出始終為0,其一階導數也始終為0,這樣會導致神經元不能更新參數,從而不再學習。Leaky Relu 則是給所有負值賦予一個非零斜率,輸出對負值輸入有很小的坡度,解決了Relu函數進入負區間后,導致神經元不學習的問題,以數學的方式可以表示為:

式中:ai是1 至正無窮區間內的固定參數。
YOLOv3 采用3 個不同尺度進行目標檢測,其基礎尺度特征圖大小為輸入分辨率的1/32,另外2 個尺度為1/16 和1/8。例如,輸入圖像像素為416×416,其基礎尺度特征圖大小為13×13,它在輸入圖像中的感受野較大,因此適合檢測圖像中尺寸較大的目標。通過上采樣并與前面卷積層輸出的特征圖融合,再經過多個卷積后得到了第2 個尺度的特征圖26×26。在第2 個尺度特征圖的基礎上,采用同樣的方法得到第3 個尺度的特征圖52×52,它的感受野較小,因此適合檢測圖像中尺寸較小的目標。隨著輸出特征圖尺度和數量的變化,YOLOv3 中錨框也需要進行相應的調整。YOLOv3 為每個尺度輸出特征圖設定了3種錨框,一共包括9 種不同尺寸。在感受野比較大的特征圖13×13 上,采用較大的錨框(116×90)(156×198)(373×326),適合檢測大型目標;在感受野中等的特征圖26×26 上,采用中等的錨框(30×61)(62×45)(59×119),適合檢測中型目標;在感受野比較小的特征圖52×52 上,采用較小的錨框(10×13)(16×30)(33×23)來檢測小型目標,YOLOv3 結構如圖1 所示。

圖1 YOLOv3 網絡結構
通過無人機拍攝和互聯網收集整理,收集了1 200 張電力桿塔數據樣本,采用如圖2 所示的labelImg 工具對數據樣本進行標注。在圖中用矩形框框出電力桿塔,并標記對應的類別標簽,本文將電力塔桿件從各圖片中找出來,標記為tower(桿塔),軟件自動保存標記數據(矩形框的坐標位置和對應的類別),保存的數據選擇不同的存儲格式,可以保存成標準VOC 數據集格式的xml文件和YOLO 模型的指定格式txt 文件。

圖2 數據集標注
數據集的大小影響著深度學習目標檢測的效果,由于收集整理得到的樣本有限,為了提高模型的魯棒性,增強泛化能力,本文采用水平鏡像、旋轉變換、顏色變換和圖像錯切等方法完成數據集擴增,如圖3 所示。最終搭建的桿塔數據庫訓練集共有6 000 張圖像樣本,另外拍攝整理了600 張不同于訓練集的桿塔圖像作為測試集。

圖3 數據擴增
在Faster R-CNN 算法中的先驗錨框機制啟發下,YOLOv3 算法引入同樣的機制。早期的先驗錨框大小是在經驗的影響下確定的,而在YOLO系列算法中使用了K-means 聚類算法獲取先驗錨框。在目標檢測中,先驗錨框取值是否合適關系著檢測精度與速度。YOLOv3 使用的先驗錨框是根據VOC 數據集[15]和COCO 數據集聚類所得[16],如表1 所示。

表1 原始先驗錨框
電力桿塔形狀特征大多比較細長,不適合用YOLOv3 的原始先驗錨框尺寸進行檢測,因此針對電力桿塔的檢測需要重新進行維度聚類,選取合適的先驗錨框參數,進而得到更好的檢測精度和速度[17]。針對本文搭建的桿塔數據集,采用Kmeans 重新聚類數據集的真實標注框,最終得到適合電力桿塔的先驗錨框,如表2 所示。

表2 改進后的桿塔先驗錨框尺寸
將這些改進后的先驗錨框均分到不同尺度的特征金字塔上。小尺寸的先驗錨框針對高分辨率特征圖,用于檢測小目標;大尺寸的先驗錨框針對低分辨率特征圖,用于檢測大目標。將原始先驗錨框尺寸和改進后的先驗錨框尺寸進行歸一化,如圖4 所示,可以看出改進后的先驗錨框尺寸更符合電力桿塔的形狀和比例。

圖4 不同錨框尺寸比較
YOLOv3 中的損失函數由三部分組成,包括邊界框回歸損失、置信度損失和類別的分類損失[18]。其中,邊界框回歸損失函數采用的是均方誤差損失函數,而評估性能采用的是IoU(交并比)。
如圖5 所示,細線框表示預測框,右上角處于圓心的粗線框表示真實框,從圖中可知,損失相同的時候,可能會發生IoU 值相差較大的情況。所以采用均方誤差計算損失函數還存在一定的缺陷,而IoU 更能體現預測框回歸的質量,且具有尺度不變性。但是如果直接采用IoU 作為損失函數,當預測框和真實框沒有交集時,不管兩者之間的距離有多遠,對應的IoU 都為零,這就導致了模型無法度量這種情況下的預測框和真實框的距離,并且損失函數此時不存在梯度,無法通過梯度下降進行訓練。因此,本文采用一種新的度量預測框和真實框擬合程度的方法,即GIoU。

圖5 損失相同時比較
如圖6 所示,通過預測框A 和真實框B,可以算出兩者的最小包圍框C。最小包圍框C 包括預測框和真實框的并集和d1,d2 區域[19]。通過最小包圍框C,可以計算GIoU。IoU 和GIoU 的計算公式如下:


圖6 預測框A 和真實框B 的最小包圍框

式中:減數部分分子為最小包圍框C 中不包含A或者B 的部分。
GIoU 是IoU 的下界,小于等于IoU,IoU 的取值范圍是[0,1],GIoU 的取值范圍是(-1,1]。當2個邊界框不重合時,IoU 始終為0,而對GIoU 來說,A 和B 的距離越遠,GIoU 越趨近于-1。IoU關注了A 和B 及其交集區域,而GIoU 在此基礎上還關注了d1 和d2 區域,更好地反映出了預測框和真實框關系[20]。因此,可以使用GIoU 計算邊界框回歸損失,公式如下:

預測框和真實框的重合度越大,損失值越小,GIoU 的取值范圍是(-1,1],所以Coordloss的取值范圍為[0,2)。相較于采用均方誤差作為邊界框回歸的損失函數,基于GIoU 的邊界框回歸損失具有尺度不變性,更能反映出預測框和真實框的距離,提升目標定位的準確性。
置信度損失和類別的分類損失如下所示:
最后總體的損失函數Loss 值如下所示:

本文實驗的環境為Intel Pentium G4560 的處理器,內存為16GB,GPU 為NVIDIA GeForce GTX 1050Ti,內存為4GB,cuda9.0,cuDNN7.0,OpenCV3.1.0。訓練數據集為自行搭建的桿塔數據集,包括6 000 張圖片。測試數據集為另外整理的600 張桿塔圖片,都不存在于訓練集中。
在YOLOv3 提供的Darknet53.conv.74 權重的基礎上進行實驗,采用GPU 訓練模型,使用CUDA 和cuDNN 對訓練過程進行加速[21]。訓練采取mini-batch SGD(小批量隨機梯度下降法)將網絡的權重不斷優化,表3 給出了實驗過程中訓練所使用的參數,迭代訓練每個batch 樣本更新一次參數,到達max_batches 后停止學習,初始的學習率設置為0.001,學習率調整策略選擇“step”,將“stepsize”設置為1 500,即迭代次數達到1 500時,學習率調整為之前的0.1 倍。

表3 訓練參數設置
為了客觀評估本文提出的桿塔檢測算法的性能,采用以下參數作為相關評估指標[22]:
(1)True Positive(TP)表示實際為電力桿塔的區域被判斷為電力桿塔區域的預測邊界框個數。
(2)True Negative(TN)表示實際為背景的區域被判斷為背景區域的預測邊界框個數。
(3)False Positive(FP)表示實際為背景的區域被判斷為電力桿塔區域的預測邊界框個數。
(4)False Negative(FN)表示實際為電力桿塔的區域被判斷為背景區域的預測邊界框個數。
(5)Precision 為精確率,又稱為查準率,其計算公式為:

(6)Recall 為召回率,又稱為查全率,其計算公式為:
通過Precision 和Recall 可以計算平均精度AP[23]。每個類別的目標都有一個對應的AP,AP越高,目標檢測算法效果越好。AP 表示以Recall為橫軸、以Precision 為縱軸的P-R 曲線所圍成的區域面積:

式中:p 表示Precision;r 表示Recall。
mAP 表示的是多類別平均精度[24],用來衡量桿塔檢測模型性能:

將訓練后的模型在桿塔測試數據集上進行測試,mAP 達到了90.8%,模型測試的P-R 曲線如圖7 所示,本改進YOLOv3 模型具有較好的桿塔檢測效果。

圖7 P-R 曲線
將Faster R-CNN[25]、傳統的YOLOv3、采用IoU 損失函數+改進的先驗錨框組合的YOLOv3、采用GIoU 損失函數+原始先驗錨框組合的YOLOv3 和改進的YOLOv3 模型進行對比實驗,每組實驗所用的數據集相同。對比不同網絡模型檢測桿塔的能力,驗證改進YOLOv3 的優越性。其中Faster R-CNN 采用的特征提取網絡為VGG16,實驗結果均是在網絡參數最優狀態得到的,表4所示為實驗結果。
從表4 可看出,two-stage 的Faster R-CNN由于其檢測過程復雜,檢測花費時間比one-stage的YOLOv3 系列算法要長,無法滿足電力桿塔實時檢測的要求,而相比傳統的YOLOv3 算法、只改進先驗錨框的YOLOv3 以及只改進GIOU 損失函數的YOLOv3 算法,改進后的YOLOv3 在相等的檢測速度下具有更高的平均準確率,mAP 達到了90.8%。

表4 不同模型性能對比
從測試集中抽取了不同樣本的電力桿塔檢測效果如圖8 所示,圖8(a)為傳統YOLOv3 的檢測效果,圖8(b)為改進YOLOv3 算法的檢測效果。改進YOLOv3 算法針對不同距離、不同背景的桿塔目標具備良好的檢測能力,同時具有相對更高的定位精度,對于單張桿塔圖片的檢測耗時僅65 ms,mAP 達到了90.8%,相比于原算法,mAP 提升了0.6%,從而提高了桿塔檢測精度。

圖8 不同算法檢測效果對比
本文提出一種基于YOLOv3 改進的目標檢測模型,并將其應用于電力桿塔檢測中。首先通過自行拍攝和網絡整理收集桿塔的圖像樣本,再利用水平鏡像、旋轉變換、顏色變換和圖像錯切等圖像處理方法擴大樣本數量,采用labelImg 工具對各圖像樣本進行標注,完成桿塔數據集的搭建。然后通過K-means 重新聚類計算得到最優的先驗錨框,更符合桿塔的形狀和比例,針對邊界框回歸不夠準確的問題,采用GIoU 計算邊界框回歸損失,使邊界框的定位更加準確。最后對比分析其他模型,認為改進后的YOLOv3 模型準確率較高,適用于多尺度的桿塔檢測,檢測速度達到了每幀65 ms,mAP 達到90.8%。