蔡成濤,吳科君+,劉秋飛,程海濤,馬 強(qiáng)
(1.哈爾濱工程大學(xué) 自動化學(xué)院,黑龍江 哈爾濱 150001;2.哈爾濱建成集團(tuán)有限公司,黑龍江 哈爾濱150001)
常規(guī)視覺系統(tǒng)由于視場角固定,且不具有旋轉(zhuǎn)不變性,不適于旋轉(zhuǎn)全視場的監(jiān)控。折反射全景視覺系統(tǒng),能獲取水平方向360°、垂直方向240°范圍內(nèi)場景的高清晰圖像[1],且結(jié)構(gòu)簡單、成本低廉、反射面易于設(shè)計和加工,應(yīng)用廣泛[2]。然而由于全景圖像成像變形的特點(diǎn),待檢目標(biāo)的快速準(zhǔn)確檢測一直是困擾其發(fā)展的難題,目前常用的全景目標(biāo)檢測方法多為基于目標(biāo)運(yùn)動檢測方法,文獻(xiàn)[3-6]提出了背景差分法、幀間差分法、光流法等,然而只能對運(yùn)動目標(biāo)進(jìn)行檢測,對靜止目標(biāo)或緩慢移動目標(biāo)無法有效檢測,更無法對目標(biāo)進(jìn)行精確分類。得益于深度學(xué)習(xí),主要是卷積神經(jīng)網(wǎng)絡(luò)(convolution neural network)和候選區(qū)域(region proposal)算法[7],目標(biāo)檢測取得了巨大的突破,文獻(xiàn)[8-10]定義了RCNN、Fast-RCNN、Faster-RCNN及YOLO檢測器。其中YOLO(you only look once)為一種全新的目標(biāo)檢測方法,把目標(biāo)判定和目標(biāo)識別合二為一,真正的端到端(end to end)的檢測,實(shí)現(xiàn)快速檢測的同時還達(dá)到較高的準(zhǔn)確率[10]。
為了達(dá)到對全景目標(biāo)的實(shí)時精確檢測的目的,本文提出一種E-D-YOLO(expand density YOLO)全景多目標(biāo)實(shí)時檢測方法。通過不同環(huán)境下的對比實(shí)驗(yàn),表明了該方法具有優(yōu)秀快速性、良好的準(zhǔn)確性和魯棒性。適用于對速度和準(zhǔn)確度同時有要求的場景,如關(guān)鍵敏感地帶的實(shí)時監(jiān)控,以及復(fù)雜作戰(zhàn)環(huán)境下裝甲車,結(jié)合全景視覺快速發(fā)現(xiàn)周圍可疑目標(biāo),并做出相應(yīng)回應(yīng)以排除危險。
雙曲面全景系統(tǒng)及全景圖像如圖1所示,由于折反射全景視覺成像原理會使全景目標(biāo)成像比發(fā)生變化如圖1(b)所示,不便于我們直接在全景圖像中提取特征進(jìn)而進(jìn)行多目標(biāo)檢測,可以考慮將全景圖按照其成像模型變換為柱面展開圖,然后對其展開圖進(jìn)行多目標(biāo)檢測。
圖1 雙曲面全景系統(tǒng)及全景圖像
根據(jù)折反射式全景系統(tǒng)反射面曲面類型,對系統(tǒng)成像原理進(jìn)行模型分析,得到反射面的三維成像方程如式(1)所示
(1)
(2)
使用球坐標(biāo)系表示
(3)
其中,θ為入射光線與T軸的夾角,R為球面的半徑,可表示為
(4)
全景柱面展開圖像是將環(huán)形全景圖像投影到一個距反射鏡指定半徑的圓柱面上所獲得的圖像。將圓柱面沿徑向切開平鋪,得到一個二維矩形的柱面全景圖[11],如圖3所示,仍然取全景系統(tǒng)有效視點(diǎn)為反射鏡坐標(biāo)系OmXmYmZm的原點(diǎn),虛擬成像面為一個與全景視覺系統(tǒng)共軸的圓柱面,半徑為f,假設(shè)柱面展開圖像分辨率為W×H,其上下邊緣的俯仰角度分別為α1、α2,則柱面圖像的高為H=ftanα1+ftanα2。記為柱面展開圖像上一點(diǎn)m′=[i,j]T,則點(diǎn)m′在反射鏡坐標(biāo)系下的三維坐標(biāo)x可表示為
x=[fcosθ,fsinθ,ftanα1-j]T
(5)
其中,θ=2π/L。
圖3 柱面展開圖
傳統(tǒng)目標(biāo)檢測先提取特征,如LBP(local binary pattern)特征、HOG(histogram of oriented gradient)特征[12],然后采用SVM(surpport vector machine )訓(xùn)練得到物體的模型,再進(jìn)行模型和目標(biāo)匹配。YOLO使用了回歸的思想,將目標(biāo)區(qū)域預(yù)測和目標(biāo)類別預(yù)測整合于單個神經(jīng)網(wǎng)絡(luò)模型中。該方法采用單個神經(jīng)將候選框提取、特征提取、目標(biāo)分類、目標(biāo)定位統(tǒng)一起來,實(shí)現(xiàn)端到端的目標(biāo)檢測。
文獻(xiàn)[10]給出了YOLO與其它物體檢測方法如Fastest DPM、R-CNN、Fast R-CNN等,在檢測速度和準(zhǔn)確性方面的比較,通過比較可知YOLO在速度方面的優(yōu)勢明顯。
全景圖像中可能包含多個目標(biāo)或者多種類別的目標(biāo),故需對每個預(yù)測框的多種類別給出判斷。具體檢測過程為:
(6)
(2)CNN提取特征和預(yù)測,每個網(wǎng)格給出有物體存在時的C個分類的條件概率Pr(class|object),進(jìn)而得到整幅網(wǎng)絡(luò)中的各類別的概率,通過各檢測框內(nèi)某類別的概率與其對應(yīng)的置信度相乘來得到該類別置信值,如式(7)所示
(7)
(3)通過非極大值抑制(non-maximum suppression)過濾邊框,輸出最終判斷結(jié)果。
YOLO為了優(yōu)化模型,設(shè)計上使用S*S*(B*5+C)維向量與圖像真值的均方和誤差,作為損失函數(shù)(loss function)的參數(shù)。然而由于很多網(wǎng)格內(nèi)并無目標(biāo)物體存在,所以在設(shè)計YOLO的損失函數(shù)時,分別給有目標(biāo)與無目標(biāo)存在的預(yù)測邊框設(shè)置不同的比例因子進(jìn)行平衡,此外還需差異化邊界框的損失因子和類別判斷的損失因子,如設(shè)定邊界框的損失權(quán)重是類別判斷損失因子的10倍,以上設(shè)計使得邊界框有目標(biāo)存在的損失因子處于較高權(quán)重。損失函數(shù)的形式如式(8)所示
(8)
YOLO完整的檢測過程如圖4所示。
圖4 YOLO模型檢測原理
文獻(xiàn)[10]中指出YOLO檢測網(wǎng)絡(luò)包括24個級聯(lián)的卷積層(convolution layer)和兩個全連接層(fully connected layer),用來提取圖像特征及預(yù)測圖像位置和類別,能達(dá)到快速檢測的目的,但其弊端也很明顯,經(jīng)全連接層處理后的預(yù)測邊框,會丟失較多的空間信息,導(dǎo)致目標(biāo)在雖能被檢測到但其定位不準(zhǔn)確。參考Faster R-CNN中的錨點(diǎn)(anchor)設(shè)計思路,去掉全連接層,直接在卷積層上進(jìn)行滑窗操作。在網(wǎng)絡(luò)結(jié)構(gòu)的末端使用全局平均池化(global ave-rage pooling),把1*1的卷積核置于3*3的卷積核之間,對特征圖(feature map)壓縮,構(gòu)成YOLOv2網(wǎng)絡(luò)[13]。
YOLO檢測方法中,圖像被分成S×S的網(wǎng)格,即橫向縱向檢測權(quán)重相同,然而經(jīng)全景解算后得到的展開圖中待檢目標(biāo)的長寬比并不是其真實(shí)值的精確反映,而是呈現(xiàn)出矮粗的趨勢,目標(biāo)變形是非線性的,且同一方向上的變形密度不同,如圖5中人和椅子,呈現(xiàn)出上下部分比例失調(diào)現(xiàn)象。
圖5 修改后的檢測框
針對這一問題,改變預(yù)測邊框在縱軸方向數(shù)量,本文是將縱向數(shù)量增加一倍,橫向數(shù)量不變,即網(wǎng)格數(shù)量從S×S變化到S*2S,并在YOLO網(wǎng)絡(luò)結(jié)構(gòu)的末端增加一個特征層。網(wǎng)絡(luò)結(jié)構(gòu)包含20個卷積層、5個最大值池化層(maxpooling layers),從而生成YOLO網(wǎng)絡(luò)的改進(jìn)版E-D-YOLO網(wǎng)絡(luò),如圖6所示,以滿足全景展開而來的圖像檢測需求。
圖6 E-D-YOLO網(wǎng)絡(luò)結(jié)構(gòu)
使用python爬蟲程序爬取圖片作為訓(xùn)練素材,構(gòu)建標(biāo)準(zhǔn)VOC數(shù)據(jù)集,在構(gòu)建好的VOC數(shù)據(jù)集上完成100次循環(huán)(epoch)后得到預(yù)訓(xùn)練參數(shù),每完成10次循環(huán)就隨機(jī)改變網(wǎng)絡(luò)的輸入圖像大小。
按照VOC數(shù)據(jù)集的架構(gòu)來構(gòu)建自己的數(shù)據(jù)集,用OpenCV讀取文件夾下的所有圖像然后統(tǒng)一命名并改格式,備好數(shù)據(jù)后,需要按VOC數(shù)據(jù)集的結(jié)構(gòu)放置圖像文件,如圖7所示。
圖7 構(gòu)建VOC數(shù)據(jù)集
使用labelImg軟件標(biāo)記原始圖像中的目標(biāo)區(qū)域以便訓(xùn)練使用?;居梅ㄊ强蜃∧繕?biāo)區(qū)域然后雙擊類別,標(biāo)記完整張圖像后點(diǎn)擊保存即可,類別選取常見的20類物體,如人、餐桌、椅子、箱子、自行車等。
計算機(jī)配置為:Windows 7系統(tǒng),CPU為Intel Core i5-3470,GPU為NVIDIA GeForce GTX1080,內(nèi)存32 G,安裝有cuda8.0,python3.5并配置相應(yīng)的庫如tensorflow v1.1、numpy,、OpenCV 3和Cython擴(kuò)展庫。將折反射全景系統(tǒng)與搭載1394采集卡的計算機(jī)連接。設(shè)置YOLO參數(shù),沖量常數(shù)(momentum)0.9,權(quán)值衰減系數(shù)(decay)為 0.0005,以防止過擬合現(xiàn)象,訓(xùn)練時參數(shù)選取見表1,參數(shù)設(shè)置完成后進(jìn)行實(shí)驗(yàn)。
表1 關(guān)鍵參數(shù)選取
使用1000張圖片進(jìn)行測試,其中全景圖100張,全景展開圖800張,展開圖中遮擋、無遮擋、光照正常與光照微弱4種環(huán)境各200張圖片。設(shè)置對照實(shí)驗(yàn),分別在YOLO、E-D-YOLO及主流檢測方法Faster-RCNN下進(jìn)行檢測,其中YOLO和E-D-YOLO使用Darknet框架,F(xiàn)aster-RCNN使用Tensorflow框架實(shí)現(xiàn)。在實(shí)驗(yàn)環(huán)境下person(人)和chair(椅子)運(yùn)動屬性明顯,可分別代表靜止目標(biāo)和運(yùn)動目標(biāo)參與檢測,故選擇其為統(tǒng)計對象,實(shí)驗(yàn)操作界面如圖8所示。
圖8 實(shí)驗(yàn)操作界面
對目標(biāo)檢測算法有3個要求,即快速性(rapidity)、準(zhǔn)確性(accuracy)、魯棒性(robustness)。對應(yīng)分別取檢測幀率(FPS)、準(zhǔn)確率(accuracy rate)、平均重疊率(average overlap rate)為對比參數(shù)。
分別對YOLO 、E-D-YOLO及Faster R-CNN這3個檢測器,在CPU和GPU下進(jìn)行測試,并根據(jù)測試圖片平均耗時計算出檢測幀率,統(tǒng)計結(jié)果見表2??芍狢PU下三者均無法滿足實(shí)時性要求。GPU下使用YOLO或E-D-YOLO速度均超過30 FPS,遠(yuǎn)遠(yuǎn)滿足實(shí)時性要求,而目前主流的檢測方法Faster R-CNN檢測速度不及每秒5幀。體現(xiàn)了YOLO及E-D-YOLO在實(shí)時檢測方面優(yōu)異的性能。
表2 檢測速度對比
目標(biāo)檢測的準(zhǔn)確性可由檢測的錯誤率間接反映,錯誤率越低,對應(yīng)模型檢測的準(zhǔn)確性越可靠。其中,F(xiàn)alse positive (錯檢)表示對目標(biāo)分類錯誤,F(xiàn)alse negative (漏檢)表示未能定位到目標(biāo),如圖9所示。
使用YOLO檢測器分別對全景展開圖以及未經(jīng)展開的全景圖進(jìn)行測試,E-D-YOLO及Faster R-CNN對全景展開圖進(jìn)行測試,統(tǒng)計各自錯誤率,見表3??傻贸鼋Y(jié)論:
(1)對未經(jīng)過預(yù)處理的全景圖直接進(jìn)行檢測,即表中YOLO Panoramic一欄,其錯誤率均接近90%,檢測效果非常不理想,失去實(shí)用價值。使用YOLO全景展開圖進(jìn)行檢測,錯誤率40%左右,是因?yàn)榇龣z目標(biāo)處于“矮粗化”狀態(tài),常規(guī)檢測器不能適應(yīng)。使用E-D-YOLO檢測器,通過增大縱向預(yù)測框數(shù)量,使其適應(yīng)矮粗化目標(biāo),錯誤率控制在30%,性能遠(yuǎn)遠(yuǎn)優(yōu)于YOLO檢測器。
圖9 錯檢與誤檢表示
(2)對比E-D-YOLO和Faster R-CNN兩個檢測器,F(xiàn)aster R-CNN錯誤率低于30%,是準(zhǔn)確度方面最優(yōu)秀的檢測器,E-D-YOLO檢測器錯誤率較其稍高3%左右,但考慮到E-D-YOLO檢測速度方面的巨大優(yōu)勢,使得其在全景檢測方面更具有實(shí)用性。
表3 檢測準(zhǔn)確性對比
選取人為目標(biāo)對象,椅子、箱子、桌子等室內(nèi)其它物體為干擾對象。統(tǒng)計檢測結(jié)果中人的準(zhǔn)確率(accuracy rate)、平均重疊率(average overlap rate)作為定量性統(tǒng)計指標(biāo)。重疊率是指檢測結(jié)果的區(qū)域和目標(biāo)真實(shí)值的區(qū)域之間的重疊部分所占的比率,數(shù)值越大表示檢測結(jié)果的區(qū)域越準(zhǔn)確。使用E-D-YOLO在各種實(shí)驗(yàn)環(huán)境下檢測,其中圖10(a)、圖10(c)為無遮擋組且光照正常組,圖10(b)、圖10(d)為遮擋組和弱光組,選取4張檢測結(jié)果如圖10所示,其中白色框?yàn)槟繕?biāo)對象的檢測框,其它框?yàn)楦蓴_目標(biāo)的檢測框。準(zhǔn)確率和平均重疊率的統(tǒng)計結(jié)果見表4,其中Normal表示正常組,Overlap表示遮擋重疊組,Weak light表示弱光組。
由檢測結(jié)果可知,當(dāng)目標(biāo)被遮擋,E-D-YOLO會出現(xiàn)一定程度漏檢,準(zhǔn)確率比正常環(huán)境下低6個百分點(diǎn),平均重疊率低7個百分點(diǎn),但仍高于65%。當(dāng)光照不足導(dǎo)致目標(biāo)與背景有一定程度的融合,檢測準(zhǔn)確率下降5個百分點(diǎn),平均重疊率降低3個百分點(diǎn)??梢娫谡趽鹾凸庹詹蛔悱h(huán)境下,基于E-D-YOLO方法的檢測雖性能有所下降,仍保持了較高的準(zhǔn)確率和平均重疊率,表現(xiàn)出較好的魯棒性。
表4 魯棒性定量檢驗(yàn)
圖10 4種情況下的檢測結(jié)果注:(a)無遮擋 (b)遮擋 (c)光照正常 (d)光照不足
考慮到全景圖像中的待檢測目標(biāo)長寬比和輪廓特征均發(fā)生顯著變化,使用常規(guī)手段無法可靠檢測,提出了基于改進(jìn)YOLO算法的全景目標(biāo)實(shí)時檢測方法, 即E-D-YOLO方法。實(shí)驗(yàn)結(jié)果表明,GPU環(huán)境下E-D-YOLO方法對全景目標(biāo)檢測速率高達(dá)每秒31幀,遠(yuǎn)遠(yuǎn)滿足實(shí)時性要求,且穩(wěn)定保持70%以上目標(biāo)識別正確率。在實(shí)驗(yàn)中還存在各類目標(biāo)數(shù)量偏少的問題,下一步將大幅增加目標(biāo)數(shù)量,如地鐵站密集人群或車流量較大的交通樞紐路段,以驗(yàn)證E-D-YOLO方法在目標(biāo)密集場景下檢測的能力。