張勁松,鄧元實,常政威,吳 杰,陳明舉
(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的角度預測任務。該算法可以為電力施工現場中電力作業車的預警工作提供參考,避免安全事故的發生。