劉凱歌,王 琪,孟祥越,張祥德
(東北大學 理學院,遼寧 沈陽 110004)
隨著物質生活的改善,越來越多人喜歡出行旅游,如何保證乘客的乘坐安全是鐵路局的重要任務之一。鐵軌周邊電線桿種類繁雜且數量眾多[1],這為實地勘探帶來了困難。現今鐵路交通部門對鐵軌周邊安全檢查的方式主要是以拍照為主,實地勘察為輔。通過存儲的大量現場圖像,從中挑選有異常的電線桿,針對不同場景,派出相關專業人員去解決安全隱患[2]。由于這種人工挑選圖像的方式效率低,所以如何利用計算機圖像處理的方法高效挑選異常圖像是本文研究的核心工作。
在電線桿是否被樹枝遮擋的場景下,圖像受光照以及季節影響較大[3],例如夏天樹枝呈現的是綠色,秋天樹枝整體偏向黃色,成像場景相對來說比較復雜。在該復雜場景下,深度學習比傳統方法在定位上更具魯棒性[4],除此之外圖像中樹枝遮擋占電線桿的比重比較小,類間差異比較小,深度學習很難判斷,所以采用的思想是先定位后分類[5]。
針對樹枝遮擋電線桿的問題,分析Faster R-CNN[6-7]檢測算法存在的不足,提出基于后處理改進的Faster R-CNN被遮擋電線桿檢測算法。該算法相比于現有算法,通過后處理方式能夠獲得更高的召回率,適合檢測樹枝遮擋的電線桿。
針對電線桿的異物檢測問題,考慮雙階段精度較高的原則,本研究采用檢測召回率較高的Faster R-CNN[10-11]目標檢測算法。Faster R-CNN網絡框架如圖1所示。

圖1 Faster R-CNN網絡圖
由圖1可以看出,Faster R-CNN[5,13-15]主要由特征提取網絡(VGG16)、Region Proposal Network(RPN)[7]網絡以及檢測網絡3部分組成。
本研究采用的特征提取網絡是VGG16[12],其中VGG16特征提取網絡的細節如表1所示。

表1 VGG16實驗數據表
RPN網絡是在VGG16提取的最后一層特征圖上進行滑窗,經過2個全連接層,一個是運用softmax進行分類,另一個是目標框回歸。RPN網絡如圖2所示。

圖2 RPN檢測網絡圖
使用RPN代替原來的Selective Search[16]方法來產生建議窗口,降低了推斷時的計算量。RPN的實現方式是先遍歷整張特征圖,滑窗尺寸為3×3,在遍歷的過程中每個窗口中心會因設置的比例ratio= [0.5,1,2]和尺度scale = [8,16,32]在原圖生成K等于9個anchor,再對每個不同大小的anchor計算Intersection over Union(IoU)并通過閾值來判定每個anchor是否為正負樣本,當anchor與ground-truth box滿足最高的IoU和IoU>0.7兩個條件anchor為正樣本,anchor與ground-truth box的IoU<0.3[6]為負樣本。接著,對正負anchor進行分類(二分類)與回歸,相當于實現目標定位的功能。
RPN訓練過程中的損失函數為:
(1)

采用的分類損失:
(2)
(3)
回歸損失:

(4)
式中,smoothL1損失函數為:
(5)
框的回歸公式:
tx=(x-xa)/wa,ty=(y-ya)/ha,
(6)
tw=ln(w/wa),th=ln(h/ha),
(7)
(8)
(9)
式(6)~(9)中,x,y,w,h為預測的框的坐標和寬高;xa,ya,wa,ha為第i個像素的某個anchor的坐標和寬高;x*,y*,w*,h*為ground-truth box的坐標和寬高。
檢測網絡由Regions of Interest(ROI)池化層和2個并行的1×1卷積構成。在ROI中將不同尺寸的候選框劃分成7×7塊區域,對每塊區域使用MaxPooling,輸出的特征向量為7×7×512,對輸出向量分別進行分類與回歸。在分類層中通過softmax實現圖像分類;回歸層則是anchor與ground-truth box先進行粗略的回歸,之后對粗略框進行二次回歸。softmax的公式如下:
(10)
式中,i表示k中某個分類;gi表示該分類的值。
在實際運用場景中,針對電線桿遮擋非遮擋的情況,通過Faster R-CNN網絡檢測,發現遮擋的電線桿會存在漏檢的情況,即將遮擋判斷成不遮擋。通過原始圖片可以發現造成漏檢主要有3點原因:第1點,樹枝占電線桿的比重比較小,形狀不規則;第2點,數據集是人工標注的數據集,數據量有限;第3點,樹木的顏色容易受光照等影響。原始圖片如圖3所示。

圖3 原始圖片
因此,針對漏檢的情況選擇在原始算法上直接進行3點改進,分別是:動態分組閾值優化算法、RGB-HSV和區域生長分割方法。算法流程如圖4所示。

圖4 算法流程
使用Faster R-CNN對遮擋電線桿的檢測結果不是很理想,對其進行初步分析如下:① 圖像的采集由相機連續拍攝得到,前后存在聯系,當使用手工標注時,也會對面積較小的電線桿進行標注,在第n張電線桿面積較小,在n+1電線桿的面積會相對偏大,情況如圖5所示。② 出現真值框較小的電線桿周圍存在大量面積較小的預測框,情況如圖6所示。

圖6 電線桿預測圖
針對大量面積較小的預測框,提出了一種動態分組閾值優化算法。
動態分組閾值優化算法流程如下:
對于樣本集合{(xi,xi1,xi2,yi1,yi2,score)},其中i=1,2,...,n,xi表示圖片名,(xi1,yi1),(xi2,yi2)表示圖片對應的左上角右下角的坐標;score表示圖片預測的得分。
Step1:目的是找到最優所在的分組數并求其所在的面積。計算不同分組k在(2,20)內IoU>0.01個數占組內個數的比值,其中(2,20)的原因是分組數不低于1且最大分組數不會高于20。
Step1.1 計算面積并降序:
area=(xi2-xi1)×(yi2-yi1)
Step1.2 計算樣本區域面積極差:
maxlength = max(area)-min(area)
Step1.3計算樣本區間面積:
qujianchangdu=maxlength/k
Step1.4針對面積的大小將圖片對應坐標放入空列表features中:如果area>ss×qujianchangdu,就存放在相對應features的空列表中,其中ss在(1,k+1),輸出的空列表features格式是features=[[w1],[w2],…,[wi]],其中wi=zi,1,…,zi,i+1,zi,i+1表示當k=i+1時分成的不同區間,此區間存放圖片名,圖片坐標。
Step1.5計算[wi]下zi,i+1中圖片坐標所求IoU>0.01的個數/zi,i+1中圖片的個數的比值,將比值存放在空數組M中,這一步可以保證預測框中存在電線桿。
Step2:尋找差值最大所在的組,并求其對應的面積,如果該面積大于裁剪框(即目標檢測后的裁剪框)的面積,就進行后續相關等工作。
Step2.1遍歷M,計算差值:
chazhilist=abs(M[i]-M[i-1])
Step2.2找到最大chazhilist所在的索引:
index = max(chazhilist)
Step2.3計算最大索引所對應的面積:
area1 = features[index][w]×features[h],這里可以刪除一些面積較小且效果不好的預測框。
對樹枝遮擋的電線桿進行檢測,樹的顏色隨著季節的變化影響因素比較大,為解決季節變化的因素,采取的方案是將圖片轉換成HSV格式,即RGB-HSV。實施過程如下:首先轉換成綠色、黃色和黑色3種顏色。選擇顏色的依據是:綠色代表樹枝遮擋,黃色代表四季顏色變化,黑色代表局部區域肉眼所見是黑色的。最后選擇這3種點做凸區域檢測,凸區域檢測的目的是為后續區域生長提供所需的種子點。HSV是一種比較直觀的顏色模型,模型的3個參數是色調、飽和度和透明度,做這一步的主要優勢在于樹枝是與季節的變換有強相關關系,所以希望能夠進行一種將顏色明顯地區分開的轉換。
區域生長是根據預先定義的生長準則將像素或子區域組合為更大區域的過程。基本方法是從一組“種子”點開始,將與種子預先定義的性質相似的那些相鄰像素添加到每個種子上來形成這些生長區域。區域生長有3個關鍵點:種子點的選擇、相似性質的判斷以及截止條件。本研究所設計的算法中通過RGB-HSV[8]算法得到種子點,相似性判斷是灰度圖像的差值,以及截止條件是當不再有像素滿足加入某個區域的準則時,區域生長就會停止。
區域生長算法的流程如下[9]:
Step1:隨機或者對圖像進行掃描,找到第一個還沒有賦予屬性的像素,設該像素(X0,Y0)。
Step2:以(X0,Y0)為中心,考慮(X0,Y0)的4鄰域或者8鄰域像素(X,Y)與種子像素的灰度值之差的絕對值小于某個閾值T,如果滿足條件,將(X,Y)與(X0,Y0)合并在同一區域內,同時將(X,Y)壓入堆棧。
Step3:從堆棧中取出一個像素并把它當做(X0,Y0)返回步驟Step2。
Step4:當堆棧為空時,返回Step1。
Step5:重復步驟Step1~4直到圖像中的每個點都有歸屬時,生長結束。
針對圖像中存在一些電線桿是鏤空的和Faster R-CNN初步漏檢的情況下,所設計的算法具體如下:首先將Faster R-CNN初步檢測結果框裁剪出來,接著如果裁剪的面積大于動態分組閾值優化算法中輸出的面積就進行RGB-HSV,然后進行凸區域檢測,之后將RGB-HSV的輸出作為種子點來進行區域生長,最后通過手動設置閾值,選出最優的閾值50,如果綠色像素點的個數大于閾值,就判斷為遮擋,否則就為非遮擋。后處理的具體流程如圖4所示。
本研究所設計的算法采用的數據來自相機拍攝的JPG圖片,對采集的圖像刪除部分重復場景得到1 895張圖片,使用LabelImg[17]手動標注制作成圖像庫,其中圖像如圖7所示,接著將圖像庫轉成VOC2007數據格式,最后將圖片劃分成訓練集和測試集。其中訓練圖片1 691張,測試圖片204張。

(a) 原圖
深度學習常見的框架有Caffe、Pytorch、Tensorflow等。本研究的訓練和測試實驗均采用Pytorch。其中服務器的操作環境為Linux操作系統,計算機軟硬件配置數據如表2所示。

表2 計算機軟硬件配置
實驗的訓練過程中采用poly的學習策略[18]:
(11)
式中,初始學習率初始化(base_lr)為0.001,最大迭代次數(max_iter)為3萬次,使用SGD優化函數,輸入圖像的batch_size=1,為防止過擬合weight_decay =0.000 5,總共訓練了20 epoch。
為了驗證算法的性能,在圖像庫中的數據集上進行對比實驗。本研究采用的2個指標:召回率(recall)和漏警率。研究設計算法的實驗結果如表3所示。使用Faster R-CNN進行檢測時,召回率為32.7%,使用Faster R-CNN+RGB-HSV+區域生長,召回率為54%,使用Faster R-CNN+動態閾值分組+RGB-HSV+區域生長,召回率為85.4%,召回率提升約0.5,改進(動態閾值分組+RGB-HSV+區域生長)的漏警率最小,說明檢測遮擋的效果越好。本研究所設計算法的可視圖如圖8~10所示。從圖8和圖10的對比可看到,設計的后處理過程很好地解決了Faster R-CNN漏檢問題。

表3 對比實驗數據表

圖8 Faster R-CNN 檢測結果

圖9 改進(RGB-HSV+區域生長)檢測結果

圖10 改進(動態閾值分組+RGB-HSV+區域生長)檢測結果
需要改進的是,從數據的角度來看,數據量較少時模型容易出現過擬合現象。采用生成對抗網絡(GAN)可通過標注數據,生成模擬數據,也可以用在自監督學習中,讓模型具備從部分標記的數據中學習的能力,GAN[19]也可應用于圖像的修復。針對部分偏斜的電線桿(如圖5所示),當使用檢測算法時,由于偏斜的存在,會使得預測框中包含大量的冗余信息,對于此類問題還需待改進。
對遮擋電線桿進行檢測,提出了基于改進Faster R-CNN的被遮擋電線桿檢測算法。本文論述了Faster R-CNN的基本原理,分析該算法存在的3點問題,針對較多檢測框設計了動態分組閾值優化算法,對電線桿漏檢情況使用了RGB-HSV+區域生長分割算法。實驗結果表明,改進后的算法對遮擋電線桿檢測有較好的效果。在今后的研究中可以對數據生成以及檢測對象存在偏斜的情況展開更多的研究。