童基均,常曉龍,趙英杰,蔣路茸
(浙江理工大學(xué) 信息學(xué)院,杭州 310018)
目標(biāo)檢測(cè)與定位是計(jì)算機(jī)視覺(jué)領(lǐng)域中一個(gè)重要的研究課題[1].檢測(cè)出感興趣目標(biāo)及其位置是計(jì)算機(jī)視覺(jué)科研工作者關(guān)注的重點(diǎn)[2].傳統(tǒng)的檢測(cè)方法通過(guò)特征提取、多特征融合進(jìn)行目標(biāo)檢測(cè).例如通過(guò)提取HOG[3]、LBP[4,5]和SIFT[6]特征,將提取到的特征通過(guò)SVM[7]或者AdaBoost[8]等分類器進(jìn)行分類識(shí)別.但隨著場(chǎng)景的變換、光照的影響以及實(shí)時(shí)性要求等使得傳統(tǒng)方法無(wú)法滿足人們的需求.
近幾年深度學(xué)習(xí)由于其快速的處理能力和較高的準(zhǔn)確率在計(jì)算機(jī)視覺(jué)中得到廣泛應(yīng)用,使得在一些復(fù)雜條件下利用視覺(jué)對(duì)場(chǎng)景進(jìn)行分析成為可能.2012年Krizhevsky等[9]采用AlexNet網(wǎng)絡(luò)的卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNN)在ImageNet圖像分類中取得了最好的成績(jī).最初將深度學(xué)習(xí)應(yīng)用到目標(biāo)檢測(cè)的是Girshick[10]等提出的R-CNN(Regionbased Convolutional Neural Networks)方法.R-CNN將區(qū)域建議(region proposal)[11,12]和卷積神經(jīng)網(wǎng)絡(luò)相結(jié)合,但是在速度與精度上還無(wú)法滿足人們的需求.而后,He[9]等人提出SPP-Net、Girshick[13]等人提出Fast RCNN以及Ren[14]等人提出的Faster R-CNN都是在最開(kāi)始的R-CNN的基礎(chǔ)上進(jìn)一步的改進(jìn),且都是基于區(qū)域建議框,因此其速度都受到一定限制.針對(duì)此問(wèn)題,有研究者提出了一系列的基于無(wú)區(qū)域建議的方法:如Redmond[15]等提出的YOLO(You Only Look Once)已經(jīng)達(dá)到了實(shí)時(shí)檢測(cè)的效果,但是檢測(cè)精度確不夠理想,隨后Liu[16]等人提出SSD(Single Shot multibox Detector)模型,在提高檢測(cè)精度的同時(shí)也兼顧到了實(shí)時(shí)性的要求,可以說(shuō)是一個(gè)相對(duì)而言比較理想的一個(gè)算法.本文就是基于此算法構(gòu)建了人體運(yùn)動(dòng)檢測(cè)模型.
本系統(tǒng)首先用不同的視覺(jué)標(biāo)記物對(duì)運(yùn)動(dòng)目標(biāo)進(jìn)行一定的標(biāo)記,并通學(xué)習(xí)訓(xùn)練相應(yīng)的模型;接著通過(guò)深度學(xué)習(xí)技術(shù)對(duì)穿戴標(biāo)記物的運(yùn)動(dòng)人體進(jìn)行檢測(cè)和識(shí)別,文中標(biāo)記物為自己設(shè)計(jì)的不同顏色和紋理的帽子,通過(guò)檢測(cè)人體所佩戴的標(biāo)記物來(lái)唯一識(shí)別每一個(gè)個(gè)體,便于后面做定位,因此只需對(duì)標(biāo)記物進(jìn)行訓(xùn)練,當(dāng)人員更換時(shí)只需佩戴相應(yīng)的視覺(jué)標(biāo)記物而不需要重新訓(xùn)練;最后利用立體視覺(jué)定位算法對(duì)其進(jìn)行定位,從而實(shí)現(xiàn)人體運(yùn)動(dòng)目標(biāo)實(shí)時(shí)檢測(cè)與定位.
本視覺(jué)定位系統(tǒng)通過(guò)2路高清網(wǎng)絡(luò)攝像機(jī)獲取視頻碼流,直接輸出數(shù)字信號(hào),省去了圖像采集卡將模擬信號(hào)轉(zhuǎn)化為數(shù)字信號(hào)的操作.視頻實(shí)時(shí)流首先通過(guò)解碼服務(wù)器將碼流轉(zhuǎn)換為能夠處理的圖像格式,然后在分析管理服務(wù)器上進(jìn)行多路視頻同步、檢測(cè)以及定位等操作,將結(jié)果反饋給客戶端,分析管理服務(wù)器同時(shí)也負(fù)責(zé)接受客戶端的控制指令.視頻檢測(cè)流程圖如圖1所示.
視頻采集端采用2個(gè)網(wǎng)絡(luò)攝像頭進(jìn)行采集,利用ffmpeg中的解碼庫(kù),將相機(jī)輸出的rtsp實(shí)時(shí)流通過(guò)解協(xié)議、解封裝最終將視頻解碼成在RGB顏色空間上的圖像格式,同時(shí)利用pthread多線程處理庫(kù),通過(guò)互斥鎖和信號(hào)量實(shí)現(xiàn)多相機(jī)并行采集以及同步問(wèn)題.
目標(biāo)檢測(cè)部分采用深度學(xué)習(xí)框架Caffe[17],利用SSD物體檢測(cè)模型進(jìn)行運(yùn)動(dòng)人體的檢測(cè).該方法既保證了目標(biāo)檢測(cè)的精度,又保證了目標(biāo)檢測(cè)的速度.SSD方法的核心是使用小的卷積濾波器來(lái)預(yù)測(cè)特征圖上固定的一組默認(rèn)邊界框的類別分?jǐn)?shù)與位置偏移量.從不同尺度的特征圖上產(chǎn)生不同尺度的預(yù)測(cè),并通過(guò)不同的寬高比來(lái)正確的進(jìn)行預(yù)測(cè).一個(gè)單次檢測(cè)器SSD用于多類別目標(biāo)檢測(cè),比YOLO速度更塊,和使用區(qū)域建議、pooling技術(shù)的檢測(cè)方法(faster R-CNN)一樣準(zhǔn)確.SSD目標(biāo)檢測(cè)的原理如圖2所示.
圖1 人體運(yùn)動(dòng)目標(biāo)實(shí)時(shí)檢測(cè)定位流程圖
圖2 SSD檢測(cè)原理圖
2.2.1 SSD網(wǎng)絡(luò)模型
SSD是基于前饋卷積神經(jīng)網(wǎng)絡(luò),產(chǎn)生固定大小的邊界框集合和邊界框中對(duì)象類別的分?jǐn)?shù),然后通過(guò)非最大抑制來(lái)產(chǎn)生最終檢測(cè)結(jié)果.本文采用VGG16[18]網(wǎng)絡(luò)作為基礎(chǔ)網(wǎng)絡(luò),用于特征提取,然后再向基礎(chǔ)網(wǎng)絡(luò)中添加輔助結(jié)構(gòu),產(chǎn)生特定的特征用于檢測(cè)[15].如圖3所示,這些特征層的尺度逐漸變小,可以得到多個(gè)尺度檢測(cè)的預(yù)測(cè)值.
2.2.2 訓(xùn)練
SSD的訓(xùn)練與傳統(tǒng)方法的區(qū)別在于真實(shí)標(biāo)簽需要與固定的檢測(cè)器輸出集合中的某一個(gè)特定的輸出相對(duì)應(yīng)(端到端訓(xùn)練).訓(xùn)練時(shí),需要建立默認(rèn)框與真實(shí)框之間的一一對(duì)應(yīng)關(guān)系[15].可以從不同位置、尺度、寬高比的默認(rèn)框中選擇真實(shí)的目標(biāo)標(biāo)簽框.
雙目定位首先需要考慮攝像機(jī)的標(biāo)定與圖像的畸變矯正問(wèn)題.本文采用張正友的基于平面模版的標(biāo)定方法[19],然后進(jìn)行去畸變處理,得到合理的相機(jī)標(biāo)定結(jié)果.
圖3 SSD網(wǎng)絡(luò)結(jié)構(gòu)圖
圖4 中oc為攝像機(jī)的光心,zc為光軸,(u,v)為像素坐標(biāo),o(u0,v0)為圖像坐標(biāo)系原點(diǎn),oco為攝像機(jī)的焦距f,圖像坐標(biāo)與像素值的對(duì)應(yīng)關(guān)系為:
圖4 相機(jī)成像模型
其中,dx,dy為單位像素的物理長(zhǎng)度.相機(jī)坐標(biāo)與圖像坐標(biāo)的對(duì)應(yīng)關(guān)系為:
世界坐標(biāo)系與相機(jī)坐標(biāo)系的對(duì)應(yīng)關(guān)系為:
綜合公式(1)(2)(3)可得圖像坐標(biāo)系(像素表示法)與世界坐標(biāo)系的關(guān)系公式如下:
在公式(4)中(Xw,Yw,Zw)為自定義的世界坐標(biāo)系,(u,v)為圖像坐標(biāo)系.A為相機(jī)的內(nèi)參矩陣,R,T為旋轉(zhuǎn)和平移矩陣,即外參矩陣.
本文自定義世界坐標(biāo),用Matlab工具箱中棋盤(pán)格標(biāo)定法來(lái)求得兩個(gè)相機(jī)的內(nèi)參數(shù)矩陣A1,A2、以及兩個(gè)相機(jī)的畸變系數(shù)k1;k2,由相機(jī)的內(nèi)參矩陣和畸變系數(shù)可以得到無(wú)畸變的圖片,根據(jù)求得的無(wú)畸變圖以及對(duì)應(yīng)自定義的世界坐標(biāo)中的10組對(duì)應(yīng)點(diǎn),根據(jù)公式(5)可求出世界坐標(biāo)與相機(jī)坐標(biāo)的單映矩陣H.
再由地平面與圖像平面之間的單應(yīng)關(guān)系可以求得相機(jī)坐標(biāo)系和世界坐標(biāo)系之間的旋轉(zhuǎn)矩陣R和平移矩陣T.設(shè)H=[h1,h2,h3],在已知內(nèi)參數(shù)矩陣的情況下容易通過(guò)下面的公式(6)解得兩個(gè)相機(jī)的外參數(shù)RT1和RT2.
為獲取目標(biāo)在世界坐標(biāo)中的位置信息,需由兩個(gè)攝像機(jī)對(duì)目標(biāo)進(jìn)行定位.攝像機(jī)參數(shù)見(jiàn)表1.
表1 相機(jī)參數(shù)表
圖5 雙目相機(jī)極線幾何約束模型圖
根據(jù)如圖5所示的約束模型,設(shè)兩個(gè)攝像機(jī)的投影矩陣為P1,P2:
點(diǎn)m為 自定義坐標(biāo)下的點(diǎn),點(diǎn)m1和點(diǎn)m2為點(diǎn)m在兩個(gè)相機(jī)中的投{影點(diǎn),兩個(gè)投影線和基線C1C2形成了一個(gè)三角形,則s1m1=p1m,因此利用三角形定位原理s2m2=p2m計(jì)算空間坐標(biāo)點(diǎn)m.
本文采集相機(jī)為Dahua DH-IPC-HF8431E,圖像分辨率為1920×1080,訓(xùn)練和檢測(cè)的電腦硬件配置為:CPU:Intel Core i7-6850K CPU @ 3.60 GHz;GPU:NVIDIA GeForce GTX 1080 Ti,11 G×2.
本文是針對(duì)特定場(chǎng)景設(shè)計(jì)的一套運(yùn)動(dòng)目標(biāo)檢測(cè)與定位系統(tǒng).以一個(gè)10 m×10 m的室內(nèi)場(chǎng)景中運(yùn)動(dòng)的人體為檢測(cè)目標(biāo),每一個(gè)運(yùn)動(dòng)目標(biāo)佩戴一頂不同的帽子作為視覺(jué)標(biāo)定物,通過(guò)4路相機(jī)采集不同視角的圖片數(shù)據(jù)作為樣本集,然后通過(guò)人工對(duì)采集的數(shù)據(jù)進(jìn)行標(biāo)注.本文對(duì)于10個(gè)目標(biāo)的場(chǎng)景的數(shù)據(jù)集包括:Images:752 張/JPG,Labels:752 個(gè)/XML,BoundingBoxes:7520個(gè)/Rectangles.訓(xùn)練集有632張圖片,測(cè)試集有120張圖片,比例大概為5:1.驗(yàn)證集分為兩個(gè)場(chǎng)景,每個(gè)場(chǎng)景中都有10個(gè)運(yùn)動(dòng)目標(biāo),共956張圖片.
訓(xùn)練時(shí)采用VGG16作為本次實(shí)驗(yàn)的基礎(chǔ)網(wǎng)絡(luò),并將最后的fc8層和所有dropout[20]層去掉,將fc6和fc7轉(zhuǎn)化為卷積層[13],將pool5的2x2-s2改為3x3-s1,并使用atrous算法填洞.使用GSD對(duì)網(wǎng)絡(luò)進(jìn)行微調(diào),設(shè)置初始學(xué)習(xí)率為0.000 25,采用 multistep的方法對(duì)學(xué)習(xí)率進(jìn)行改變,gamma設(shè)置為0.1,即當(dāng)?shù)?0 000,40 000,50 000次時(shí),學(xué)習(xí)率改為原來(lái)的0.1倍.Momentum為0.9,weight_decay為0.0005,batch_size為32,總共訓(xùn)練60 000次,總共訓(xùn)練時(shí)間約為60個(gè)小時(shí),最后兩次訓(xùn)練得出的精度分別達(dá)到96.2%和92.4%.利用訓(xùn)練好的模型(.caffemodel文件)就可以對(duì)圖片視頻進(jìn)行檢測(cè).使用網(wǎng)絡(luò)中的conv4_3,fc7,conv6_2,conv7_2,conv8_2 和 conv9_2總共 6 個(gè)不同尺度的特征圖上進(jìn)行預(yù)測(cè)置信度和位置.
通過(guò)2.3節(jié)方法求得相機(jī)的內(nèi)參A和參矩陣H,并利用兩路網(wǎng)絡(luò)攝像機(jī)的目標(biāo)檢測(cè)結(jié)果進(jìn)行定位.
從圖6中的網(wǎng)絡(luò)訓(xùn)練精度與損失函數(shù)中可以看到當(dāng)訓(xùn)練迭代到3萬(wàn)次的時(shí)候,損失函數(shù)基本保持不變,檢測(cè)精度也在3萬(wàn)次以后趨于穩(wěn)定,在95%左右.利用訓(xùn)練好的模型對(duì)視頻的每一幀進(jìn)行檢測(cè).實(shí)驗(yàn)統(tǒng)計(jì)檢測(cè)識(shí)別結(jié)果如表2.
圖6 網(wǎng)絡(luò)訓(xùn)練精度與損失函數(shù)圖
表2 目標(biāo)識(shí)別結(jié)果(σ=0.2)
表中的σ為置信度,表示每個(gè)目標(biāo)在檢測(cè)網(wǎng)絡(luò)中默認(rèn)框與真實(shí)目標(biāo)框的IOU大于0.45時(shí)默認(rèn)框數(shù)量的多少.當(dāng)σ=0.6時(shí),每個(gè)目標(biāo)的漏檢率相對(duì)較高,當(dāng)σ=0.2時(shí),誤檢率都有明顯的下降.如表3,為兩個(gè)場(chǎng)景視頻中隨機(jī)抽取一幀的檢測(cè)情況,場(chǎng)景1中,σ=0.6時(shí),檢測(cè)到3個(gè)目標(biāo),σ=0.2時(shí),檢測(cè)到9個(gè)目標(biāo);在場(chǎng)景2中σ=0.6時(shí),檢測(cè)到5個(gè)目標(biāo),當(dāng)σ=0.2時(shí),檢測(cè)到所有目標(biāo).
表3 不同σ檢測(cè)結(jié)果圖
通過(guò)上面的兩次測(cè)試結(jié)果可知當(dāng)σ=0.2時(shí),檢測(cè)效果最好,因此將σ設(shè)0.2,利用訓(xùn)練好的模型對(duì)視頻中的目標(biāo)場(chǎng)景進(jìn)行檢測(cè)和定位,隨機(jī)選取12幀定位結(jié)果進(jìn)行分析,定位結(jié)果如表4.
表4 目標(biāo)定位誤差(單位:cm)
表4中T表示真實(shí)目標(biāo)的坐標(biāo),D標(biāo)表示檢測(cè)定位的坐標(biāo).從檢測(cè)定位結(jié)果表中可以觀察得出給個(gè)每個(gè)定位目標(biāo)的平均定位誤差在6 cm以內(nèi),每幀檢測(cè)的所有目標(biāo)的平均定位誤差也在6 cm以內(nèi),12幀圖片的所有檢測(cè)目標(biāo)的平均定位誤差為4.17 cm,均方跟誤差在4.5左右,檢測(cè)速度可以達(dá)到40 fps以上,完全可以實(shí)現(xiàn)實(shí)時(shí)檢測(cè)的效果.需要說(shuō)明一點(diǎn),本文處理的圖片大小為1920×1080像素,處理圖片的分辨率一般較大,因此分辨率較大的圖片進(jìn)行處理實(shí)現(xiàn)40 fps左右是一個(gè)相當(dāng)有參考價(jià)值的方法.
圖7 目標(biāo)檢測(cè)定位圖
本文利用深度學(xué)習(xí)框架,采用SSD目標(biāo)檢測(cè)方法和雙目視覺(jué)定位,實(shí)現(xiàn)人體運(yùn)動(dòng)目標(biāo)實(shí)時(shí)檢測(cè)和定位.文中采用的SSD模型檢測(cè)方法與其他的利用神經(jīng)網(wǎng)絡(luò)的檢測(cè)方法相比,省去了區(qū)域預(yù)測(cè)和特征重采樣的過(guò)程,因此檢測(cè)速度大大增加.本文提供的定位方法平均誤差在6 cm以內(nèi),具有較高的精度,且檢測(cè)速度可以達(dá)到40 fps以上.
本文的運(yùn)動(dòng)目標(biāo)檢測(cè)與定位方法對(duì)于固定場(chǎng)景檢測(cè)定位效果較為理想,而針對(duì)小目標(biāo)的場(chǎng)景,以及運(yùn)動(dòng)目標(biāo)遮擋比較嚴(yán)重的情況下,會(huì)出現(xiàn)某個(gè)相機(jī)漏檢和誤檢的情況,可以通過(guò)以下兩種方法進(jìn)一步研究:
1)通過(guò)增加多路攝像機(jī),兩兩配對(duì),增加融合機(jī)制,提高檢測(cè)結(jié)果;
2)目前使用的是VGG16作為基礎(chǔ)網(wǎng)絡(luò),隨著計(jì)算機(jī)性能的提升,可以使用更深層次的網(wǎng)絡(luò),例如ResNet、GoogleNet等作為基礎(chǔ)網(wǎng)絡(luò)或者從新設(shè)計(jì)網(wǎng)絡(luò)結(jié)構(gòu)來(lái)提高檢測(cè)效果.