蔡成濤,吳科君+,劉秋飛,程海濤,馬 強
(1.哈爾濱工程大學 自動化學院,黑龍江 哈爾濱 150001;2.哈爾濱建成集團有限公司,黑龍江 哈爾濱150001)
常規視覺系統由于視場角固定,且不具有旋轉不變性,不適于旋轉全視場的監控。折反射全景視覺系統,能獲取水平方向360°、垂直方向240°范圍內場景的高清晰圖像[1],且結構簡單、成本低廉、反射面易于設計和加工,應用廣泛[2]。然而由于全景圖像成像變形的特點,待檢目標的快速準確檢測一直是困擾其發展的難題,目前常用的全景目標檢測方法多為基于目標運動檢測方法,文獻[3-6]提出了背景差分法、幀間差分法、光流法等,然而只能對運動目標進行檢測,對靜止目標或緩慢移動目標無法有效檢測,更無法對目標進行精確分類。得益于深度學習,主要是卷積神經網絡(convolution neural network)和候選區域(region proposal)算法[7],目標檢測取得了巨大的突破,文獻[8-10]定義了RCNN、Fast-RCNN、Faster-RCNN及YOLO檢測器。其中YOLO(you only look once)為一種全新的目標檢測方法,把目標判定和目標識別合二為一,真正的端到端(end to end)的檢測,實現快速檢測的同時還達到較高的準確率[10]。
為了達到對全景目標的實時精確檢測的目的,本文提出一種E-D-YOLO(expand density YOLO)全景多目標實時檢測方法。通過不同環境下的對比實驗,表明了該方法具有優秀快速性、良好的準確性和魯棒性。適用于對速度和準確度同時有要求的場景,如關鍵敏感地帶的實時監控,以及復雜作戰環境下裝甲車,結合全景視覺快速發現周圍可疑目標,并做出相應回應以排除危險。
雙曲面全景系統及全景圖像如圖1所示,由于折反射全景視覺成像原理會使全景目標成像比發生變化如圖1(b)所示,不便于我們直接在全景圖像中提取特征進而進行多目標檢測,可以考慮將全景圖按照其成像模型變換為柱面展開圖,然后對其展開圖進行多目標檢測。

圖1 雙曲面全景系統及全景圖像
根據折反射式全景系統反射面曲面類型,對系統成像原理進行模型分析,得到反射面的三維成像方程如式(1)所示
(1)


(2)
使用球坐標系表示

(3)
其中,θ為入射光線與T軸的夾角,R為球面的半徑,可表示為
(4)
全景柱面展開圖像是將環形全景圖像投影到一個距反射鏡指定半徑的圓柱面上所獲得的圖像。將圓柱面沿徑向切開平鋪,得到一個二維矩形的柱面全景圖[11],如圖3所示,仍然取全景系統有效視點為反射鏡坐標系OmXmYmZm的原點,虛擬成像面為一個與全景視覺系統共軸的圓柱面,半徑為f,假設柱面展開圖像分辨率為W×H,其上下邊緣的俯仰角度分別為α1、α2,則柱面圖像的高為H=ftanα1+ftanα2。記為柱面展開圖像上一點m′=[i,j]T,則點m′在反射鏡坐標系下的三維坐標x可表示為
x=[fcosθ,fsinθ,ftanα1-j]T
(5)
其中,θ=2π/L。

圖3 柱面展開圖
傳統目標檢測先提取特征,如LBP(local binary pattern)特征、HOG(histogram of oriented gradient)特征[12],然后采用SVM(surpport vector machine )訓練得到物體的模型,再進行模型和目標匹配。YOLO使用了回歸的思想,將目標區域預測和目標類別預測整合于單個神經網絡模型中。該方法采用單個神經將候選框提取、特征提取、目標分類、目標定位統一起來,實現端到端的目標檢測。
文獻[10]給出了YOLO與其它物體檢測方法如Fastest DPM、R-CNN、Fast R-CNN等,在檢測速度和準確性方面的比較,通過比較可知YOLO在速度方面的優勢明顯。
全景圖像中可能包含多個目標或者多種類別的目標,故需對每個預測框的多種類別給出判斷。具體檢測過程為:

(6)
(2)CNN提取特征和預測,每個網格給出有物體存在時的C個分類的條件概率Pr(class|object),進而得到整幅網絡中的各類別的概率,通過各檢測框內某類別的概率與其對應的置信度相乘來得到該類別置信值,如式(7)所示

(7)
(3)通過非極大值抑制(non-maximum suppression)過濾邊框,輸出最終判斷結果。
YOLO為了優化模型,設計上使用S*S*(B*5+C)維向量與圖像真值的均方和誤差,作為損失函數(loss function)的參數。然而由于很多網格內并無目標物體存在,所以在設計YOLO的損失函數時,分別給有目標與無目標存在的預測邊框設置不同的比例因子進行平衡,此外還需差異化邊界框的損失因子和類別判斷的損失因子,如設定邊界框的損失權重是類別判斷損失因子的10倍,以上設計使得邊界框有目標存在的損失因子處于較高權重。損失函數的形式如式(8)所示

(8)
YOLO完整的檢測過程如圖4所示。

圖4 YOLO模型檢測原理
文獻[10]中指出YOLO檢測網絡包括24個級聯的卷積層(convolution layer)和兩個全連接層(fully connected layer),用來提取圖像特征及預測圖像位置和類別,能達到快速檢測的目的,但其弊端也很明顯,經全連接層處理后的預測邊框,會丟失較多的空間信息,導致目標在雖能被檢測到但其定位不準確。參考Faster R-CNN中的錨點(anchor)設計思路,去掉全連接層,直接在卷積層上進行滑窗操作。在網絡結構的末端使用全局平均池化(global ave-rage pooling),把1*1的卷積核置于3*3的卷積核之間,對特征圖(feature map)壓縮,構成YOLOv2網絡[13]。
YOLO檢測方法中,圖像被分成S×S的網格,即橫向縱向檢測權重相同,然而經全景解算后得到的展開圖中待檢目標的長寬比并不是其真實值的精確反映,而是呈現出矮粗的趨勢,目標變形是非線性的,且同一方向上的變形密度不同,如圖5中人和椅子,呈現出上下部分比例失調現象。

圖5 修改后的檢測框
針對這一問題,改變預測邊框在縱軸方向數量,本文是將縱向數量增加一倍,橫向數量不變,即網格數量從S×S變化到S*2S,并在YOLO網絡結構的末端增加一個特征層。網絡結構包含20個卷積層、5個最大值池化層(maxpooling layers),從而生成YOLO網絡的改進版E-D-YOLO網絡,如圖6所示,以滿足全景展開而來的圖像檢測需求。

圖6 E-D-YOLO網絡結構
使用python爬蟲程序爬取圖片作為訓練素材,構建標準VOC數據集,在構建好的VOC數據集上完成100次循環(epoch)后得到預訓練參數,每完成10次循環就隨機改變網絡的輸入圖像大小。
按照VOC數據集的架構來構建自己的數據集,用OpenCV讀取文件夾下的所有圖像然后統一命名并改格式,備好數據后,需要按VOC數據集的結構放置圖像文件,如圖7所示。

圖7 構建VOC數據集
使用labelImg軟件標記原始圖像中的目標區域以便訓練使用。基本用法是框住目標區域然后雙擊類別,標記完整張圖像后點擊保存即可,類別選取常見的20類物體,如人、餐桌、椅子、箱子、自行車等。
計算機配置為:Windows 7系統,CPU為Intel Core i5-3470,GPU為NVIDIA GeForce GTX1080,內存32 G,安裝有cuda8.0,python3.5并配置相應的庫如tensorflow v1.1、numpy,、OpenCV 3和Cython擴展庫。將折反射全景系統與搭載1394采集卡的計算機連接。設置YOLO參數,沖量常數(momentum)0.9,權值衰減系數(decay)為 0.0005,以防止過擬合現象,訓練時參數選取見表1,參數設置完成后進行實驗。

表1 關鍵參數選取
使用1000張圖片進行測試,其中全景圖100張,全景展開圖800張,展開圖中遮擋、無遮擋、光照正常與光照微弱4種環境各200張圖片。設置對照實驗,分別在YOLO、E-D-YOLO及主流檢測方法Faster-RCNN下進行檢測,其中YOLO和E-D-YOLO使用Darknet框架,Faster-RCNN使用Tensorflow框架實現。在實驗環境下person(人)和chair(椅子)運動屬性明顯,可分別代表靜止目標和運動目標參與檢測,故選擇其為統計對象,實驗操作界面如圖8所示。

圖8 實驗操作界面
對目標檢測算法有3個要求,即快速性(rapidity)、準確性(accuracy)、魯棒性(robustness)。對應分別取檢測幀率(FPS)、準確率(accuracy rate)、平均重疊率(average overlap rate)為對比參數。
分別對YOLO 、E-D-YOLO及Faster R-CNN這3個檢測器,在CPU和GPU下進行測試,并根據測試圖片平均耗時計算出檢測幀率,統計結果見表2。可知CPU下三者均無法滿足實時性要求。GPU下使用YOLO或E-D-YOLO速度均超過30 FPS,遠遠滿足實時性要求,而目前主流的檢測方法Faster R-CNN檢測速度不及每秒5幀。體現了YOLO及E-D-YOLO在實時檢測方面優異的性能。

表2 檢測速度對比
目標檢測的準確性可由檢測的錯誤率間接反映,錯誤率越低,對應模型檢測的準確性越可靠。其中,False positive (錯檢)表示對目標分類錯誤,False negative (漏檢)表示未能定位到目標,如圖9所示。
使用YOLO檢測器分別對全景展開圖以及未經展開的全景圖進行測試,E-D-YOLO及Faster R-CNN對全景展開圖進行測試,統計各自錯誤率,見表3。可得出結論:
(1)對未經過預處理的全景圖直接進行檢測,即表中YOLO Panoramic一欄,其錯誤率均接近90%,檢測效果非常不理想,失去實用價值。使用YOLO全景展開圖進行檢測,錯誤率40%左右,是因為待檢目標處于“矮粗化”狀態,常規檢測器不能適應。使用E-D-YOLO檢測器,通過增大縱向預測框數量,使其適應矮粗化目標,錯誤率控制在30%,性能遠遠優于YOLO檢測器。

圖9 錯檢與誤檢表示
(2)對比E-D-YOLO和Faster R-CNN兩個檢測器,Faster R-CNN錯誤率低于30%,是準確度方面最優秀的檢測器,E-D-YOLO檢測器錯誤率較其稍高3%左右,但考慮到E-D-YOLO檢測速度方面的巨大優勢,使得其在全景檢測方面更具有實用性。

表3 檢測準確性對比
選取人為目標對象,椅子、箱子、桌子等室內其它物體為干擾對象。統計檢測結果中人的準確率(accuracy rate)、平均重疊率(average overlap rate)作為定量性統計指標。重疊率是指檢測結果的區域和目標真實值的區域之間的重疊部分所占的比率,數值越大表示檢測結果的區域越準確。使用E-D-YOLO在各種實驗環境下檢測,其中圖10(a)、圖10(c)為無遮擋組且光照正常組,圖10(b)、圖10(d)為遮擋組和弱光組,選取4張檢測結果如圖10所示,其中白色框為目標對象的檢測框,其它框為干擾目標的檢測框。準確率和平均重疊率的統計結果見表4,其中Normal表示正常組,Overlap表示遮擋重疊組,Weak light表示弱光組。
由檢測結果可知,當目標被遮擋,E-D-YOLO會出現一定程度漏檢,準確率比正常環境下低6個百分點,平均重疊率低7個百分點,但仍高于65%。當光照不足導致目標與背景有一定程度的融合,檢測準確率下降5個百分點,平均重疊率降低3個百分點。可見在遮擋和光照不足環境下,基于E-D-YOLO方法的檢測雖性能有所下降,仍保持了較高的準確率和平均重疊率,表現出較好的魯棒性。

表4 魯棒性定量檢驗

圖10 4種情況下的檢測結果注:(a)無遮擋 (b)遮擋 (c)光照正常 (d)光照不足
考慮到全景圖像中的待檢測目標長寬比和輪廓特征均發生顯著變化,使用常規手段無法可靠檢測,提出了基于改進YOLO算法的全景目標實時檢測方法, 即E-D-YOLO方法。實驗結果表明,GPU環境下E-D-YOLO方法對全景目標檢測速率高達每秒31幀,遠遠滿足實時性要求,且穩定保持70%以上目標識別正確率。在實驗中還存在各類目標數量偏少的問題,下一步將大幅增加目標數量,如地鐵站密集人群或車流量較大的交通樞紐路段,以驗證E-D-YOLO方法在目標密集場景下檢測的能力。