王 卓,黃 民,馬 飛,黃小龍
(北京信息科技大學(xué)機電工程學(xué)院,北京 100192)
行人檢測和距離測量,在智能駕駛、醫(yī)學(xué)護理、智能家居等方面具有重要意義。傳統(tǒng)的測距方法主要是使用距離傳感器,如超聲波雷達、激光雷達等。這些方法都存在靈敏度低或響應(yīng)慢等缺點,具有一定的局限性。與傳統(tǒng)方法相比,采用機器視覺進行測距更具有針對性,可以準確分辯不同物體、不同距離,做到實時測距。尤其在自動駕駛領(lǐng)域,雙目視覺檢測在檢測前方車輛及距離[1]、行人檢測及測距[2]等方面有著巨大的應(yīng)用前景。
機器視覺使用相機采集圖像,獲取各式各樣的信息,通過編程可以實現(xiàn)多任務(wù)同時進行,達成多個目標(biāo)。李大華等[3]提出一種改進Census變換的雙目匹配測距方法,使用算法對雙目攝像機進行標(biāo)定,同時將左右圖像中的像素點匹配起來,應(yīng)用于物體距離計算。這種利用左右圖像像素的匹配特征進行測距的方式較為常見,但是計算量大,算法復(fù)雜。張琦等[4]提出一種改進 Fast-RCNN[5]的雙目視覺車輛檢測方法,利用Fast-RCNN檢測車輛,再進行匹配、距離計算。最終實現(xiàn)了5 m范圍內(nèi)的車輛距離準確測量,誤差為2.4%。彭秋辰等[6]提出一種使用 Mask R-CNN算法[7]結(jié)合雙目相機進行物體檢測測距。他們首先使用Mask RCNN對圖像中的物體進行檢測和分類,之后使用視差算法計算物體在左右圖像上的視差,最后計算得到物體距離。這一方法的精度較高,但響應(yīng)速度很慢,一幀用時218 ms。楊榮堅等[8-9]提出一種雙目圖像的行人檢測與定位系統(tǒng),該系統(tǒng)首先使用SGM算法對雙目圖像進行立體匹配,然后使用改進Fast-YOLO網(wǎng)絡(luò)進行行人檢測,在GPU上運算具有實時檢測的能力。
針對上述行人檢測測距算法存在的檢測速度慢、檢測范圍近、難以對多個行人進行檢測測距等問題,設(shè)計了一種雙目行人檢測測距算法,流程如圖1所示。首先使用雙目相機作為傳感器得到雙目圖像,通過卷積神經(jīng)網(wǎng)絡(luò)推理,得到行人人體核心點位置,再進行核心點匹配得到多人核心點對,最后根據(jù)多人核心點對計算視差得到行人距離。
圖1 行人檢測測距算法流程框圖
行人關(guān)鍵點檢測即人體骨骼關(guān)鍵點提取,對于描述人體的姿態(tài)、動作等有著至關(guān)重要的意義。隨著深度學(xué)習(xí)技術(shù)的發(fā)展,人體骨骼關(guān)鍵點檢測效果和速度不斷提升。多人人體骨骼關(guān)鍵的檢測主要分2個方向:自上而下、自下而上。其中自上而下的檢測方法是首先進行人體檢測,再在每個檢測出的人體范圍進行人體關(guān)鍵點檢測,代表檢測算法有 Mask R-CNN算法、G-RMI算法[10]等;自下而上的檢測方法是首先檢測出人體關(guān)鍵點,再將人體關(guān)鍵點進行匹配,代表算法有 Open-Pose[11]、Associative Embedding[12]。本文采用的是自下而上的方法。自上而下的算法依賴于人體檢測精度,如果人體檢測出現(xiàn)錯誤(如檢測不準、檢測重復(fù)等),那么這些算法沒有可以糾正錯誤的余地,進一步而言,這種自上而下的運行時間和人數(shù)成比例。與之相反,自下而上的方法在檢測關(guān)鍵點上具有較強的魯棒性,并且檢測時間與人數(shù)關(guān)系不大。實際上,這種方法的難點在于關(guān)鍵點匹配,由于人數(shù)的增多和全局匹配的難度加大,往往導(dǎo)致最終運行效率下降。例如,Pishchulin等[13]提出了一種聯(lián)合了標(biāo)簽數(shù)據(jù)的檢測結(jié)果,再將它們聯(lián)系到個體的自下而上的檢測方法,這種匹配算法是一個NP難的問題,處理代價太大,應(yīng)用價值不大。OpenPose模型提出一種PAFs(Part Affinity Fields)(人體關(guān)節(jié)親和場)的關(guān)系向量,這個向量記錄了人體關(guān)鍵點之間的關(guān)系并且可以由神經(jīng)網(wǎng)絡(luò)推導(dǎo)出來,極大地提高了檢測精度和速度。但是OpenPose的檢測的關(guān)鍵點有10幾個,神經(jīng)網(wǎng)絡(luò)訓(xùn)練和測試所需的設(shè)備要求很高。
本文需要快速、準確地檢測出行人關(guān)鍵點,因此采用自下而上的方法更好,使用多階段、多分支的網(wǎng)絡(luò)結(jié)構(gòu)同時推斷關(guān)鍵點位置和關(guān)鍵點間的關(guān)系向量;由于本文只關(guān)注人體的位置,因此通過減少關(guān)鍵點數(shù)目以提高訓(xùn)練、測試所需代價,提高效率。實驗表明,本文的算法檢測速度和精度都有較大提高。選取人體的左肩、右肩、左胯、右胯以及這4個點的中心點共5個點作為人體的核心點,檢測行人即檢測這5個點。在本文網(wǎng)絡(luò)中,“輸出1”輸出這5個點坐標(biāo)的置信概率圖,取概率最大的像素坐標(biāo)數(shù)值作為行人核心點坐標(biāo)傳入雙目測距算法。
使用機器視覺實現(xiàn)行人檢測和測量的精度和速度,很大程度上取決于神經(jīng)網(wǎng)絡(luò)的識別精度和監(jiān)測速度?,F(xiàn)階段有很多出色的人體骨骼關(guān)鍵點提取算法,Wei等[14]提出的卷積位姿檢測機(convolutional pose machines,CPM)使用了多階段多尺度的網(wǎng)絡(luò)模型,使用原始圖片的特征圖作為每一階段的一部分輸入,上一階段的輸出作為下一階段的一部分輸入。最終結(jié)果在 MPII數(shù)據(jù)集上PCKh為 87.95%,在 LSP數(shù)據(jù)集上 PCKh為84.32%。Cao等[11]提出的 OpenPose模型也使用了多階段、多分支的模型結(jié)構(gòu),它在硬件配置極高的情況下基本實現(xiàn)了對人的身體、面部、腳等不同部位關(guān)鍵點的實時檢測。OpenPose模型采取的是自上而下的人體姿態(tài)檢測方式,即首先檢測關(guān)節(jié)點再將關(guān)節(jié)點聚類為一個人。OpenPose模型是在卷積位姿檢測機(convolutional pose machines,CPM)的基礎(chǔ)上改進而成的,保留了多階段的優(yōu)點并且加入人體關(guān)節(jié)親和場(part affinity fields,PAFs)實現(xiàn)關(guān)節(jié)點聚類。OpenPose模型精度很高,在COCO數(shù)據(jù)集[15]上 mAP達到 57.9,并且檢測到在有19個人體的視頻時達到了8.8 fps,但是其網(wǎng)絡(luò)冗雜,訓(xùn)練難度大。
針對上述問題,提出一種多階段多分支的網(wǎng)絡(luò)結(jié)構(gòu)。每個階段都輸出所需結(jié)果,上一階段的結(jié)果作為下一階段的輸入,循環(huán)運算。每個分支有不同的任務(wù),輸出不同的結(jié)果,如網(wǎng)絡(luò)分支1輸出5個行人關(guān)鍵點的置信圖,取概率最大的像素坐標(biāo)數(shù)值作為行人核心點坐標(biāo),輸出結(jié)果如圖2所示,圖中綠色的點為人體的中心點,將用于雙目測距,藍色的點為其他關(guān)鍵點。
圖2 分支1輸出結(jié)果
分支2輸出為左肩、右肩、左胯、右胯這4個關(guān)鍵點與人體中心點之間的關(guān)系置信圖,輸出結(jié)果如圖3所示。圖中藍色、綠色區(qū)域表示關(guān)節(jié)4個點與中心點關(guān)系。
圖3 分支2輸出結(jié)果
卷積神經(jīng)網(wǎng)絡(luò)的層數(shù)、卷積核數(shù)目及大小關(guān)系到網(wǎng)絡(luò)的性能。卷積核尺寸越大,感受野越大,提取的圖片信息越多,因此,獲得的特征越好,但大的卷積核會導(dǎo)致計算量暴增,不利于訓(xùn)練和應(yīng)用,用多個小的卷積核替代1個大卷積核成為趨勢。因此,更多3×3的卷積核被應(yīng)用在現(xiàn)在的神經(jīng)網(wǎng)絡(luò)中。早期神經(jīng)網(wǎng)絡(luò)中常見的全連接層被證明可以由1×1的卷積核替代,可以在保證準確率的情況下,極大地減小計算量。然而過多的使用小的卷積核會造成神經(jīng)網(wǎng)絡(luò)的欠擬合,因此適當(dāng)增加5×5卷積核數(shù)目。同一層中卷積核的數(shù)量越多,準確度越高,而當(dāng)數(shù)據(jù)較為復(fù)雜時,如隱含特征較難提取時,需要更深的網(wǎng)絡(luò)。本文使用的多階段結(jié)構(gòu),對每個階段都進行監(jiān)督,如果在訓(xùn)練時發(fā)現(xiàn)從某一階段開始之后階段的loss值相差不大,說明這些階段可以省去,由此可以確定網(wǎng)絡(luò)層數(shù),這是多階段網(wǎng)絡(luò)結(jié)構(gòu)的優(yōu)勢之一。
具體網(wǎng)絡(luò)結(jié)構(gòu)如圖4所示,階段3與階段2結(jié)構(gòu)相同,因此沒有畫出。
圖4 神經(jīng)網(wǎng)絡(luò)模型框圖
網(wǎng)絡(luò)首先將同一尺寸的圖片通過VGG-19[16]的前10層提取圖片特征作為第一階段的輸入。輸出的圖片特征集合為Q,其以置信度字典形式參與之后所有階段運算,但值不發(fā)生改變。
第1階段中有3個分支,分支1輸出人體5個核心點heatmap(熱圖),分支1前部分由3層3×3的卷積層和2層1×1的卷積層組成,其輸出與分支2的輸出鏈接在一起輸入分支1的后半部分,由2層3×3的卷積層和1層1×1的卷積層組成,其目的是通過關(guān)節(jié)核心點向量對核心點進行調(diào)整;分支2由3層3×3的卷積層和2層1×1的卷積層組成,輸出為左肩、右肩、左胯、右胯這4個關(guān)鍵點與人體中心點之間的關(guān)系vectormap(向量圖)。這些vectormap(向量圖)參與到核心點熱圖的計算中,為核心計算提供一定的輔助作用。階段1最終產(chǎn)生1個置信點圖集合 U1=ρ1(V1,Q),以及1個關(guān)系集合 V1=φ1(Q),其中 ρ1、φ1為第 1個階段的卷積神經(jīng)網(wǎng)絡(luò)運算。
階段1的輸出U1、V1以及圖像特征Q,作為下一階段的輸入,在下一階段中的第1個分支都由5層5×5的卷積層和2層1×1的卷積層加上調(diào)整部分的3層3×3的卷積層和2層1×1的卷積組成,分支2由5層5×5的卷積層和2層1×1的卷積層組成,分別輸出5個核心點heatmap(熱圖)和左肩、右肩、左胯、右胯這4個關(guān)鍵點與人體中心點之間的關(guān)系vectormap(向量圖)。第3階段與第2階段結(jié)構(gòu)一致,第2階段的輸出加上圖像特征為第3階段的輸入,經(jīng)過計算輸出最終的核心點heatmap(熱圖)和關(guān)系圖vectormap(向量圖)。因此,第 t(t≥2)階段的2個分支輸出為
神經(jīng)網(wǎng)絡(luò)所輸出的heatmap(熱圖)和vectormap(向量圖)是46×46的概率矩陣。heatmap(熱圖)中的每個元素都表示核心點在這一位置的概率。Pfister等[17]提出將其使用在人體姿態(tài)識別中,極大地提高了檢測精度。本文神經(jīng)網(wǎng)絡(luò)輸出5個heatmap(熱圖)分別代表中心點、左肩、右肩、左胯、右胯。訓(xùn)練所用關(guān)節(jié)點數(shù)據(jù)集是通過在關(guān)節(jié)點處放置高斯響應(yīng)而生成的概率圖。二維空間高斯分布為
式中:X=(x1,y1)表示需要計算概率值的像素點的坐標(biāo);μ=(x,y)表示關(guān)鍵點的坐標(biāo);Σ=為協(xié)方差矩陣,本文算法中
每個相鄰關(guān)節(jié)的vectormap(向量圖)為x方向和y方向上的2張概率圖,這2張概率圖表示的是2個相鄰關(guān)節(jié)的向量關(guān)系。即分支2輸出的8張概率圖表示4個連接關(guān)系。圖5為神經(jīng)網(wǎng)絡(luò)輸出的8張概率圖。
圖5 分支2輸出的vectormap(向量圖)
可以看出:輸出結(jié)果可以明確分清肩部與胯部的不同,但是對左右不敏感,原因在于人體左右的對稱性以及沒有對關(guān)鍵點之外的點進行監(jiān)督。因此,本文神經(jīng)網(wǎng)絡(luò)不能很好地區(qū)分關(guān)節(jié)的左右。而且這一現(xiàn)象在OpenPose模型和CPM模型的檢測結(jié)果中也有體現(xiàn),由于這些模型對人體頭部、脖子等部位進行了監(jiān)督,相比較于本文模型這一現(xiàn)象出現(xiàn)頻率較低。但是對于中心點不存在這樣的問題,因此這一缺陷對測距算法沒有影響。如圖6,圖中共有10人,標(biāo)出了9個綠色的中心點,藍色的為關(guān)節(jié)點。沒有識別出的人體中心點在圖片的左半邊白色圓圈內(nèi),身體全部被遮擋,只露出了頭部,這種情況讓人標(biāo)出他的中心點非常困難。除此之外也有多人的身體被遮擋住一半,但是神經(jīng)網(wǎng)絡(luò)依然能推測出他們的中心點位置。因此,在測距時,使用中心點作為測距點不受神經(jīng)網(wǎng)絡(luò)能否分清身體的左右。
圖6 多人中心點識別結(jié)果
先明確每個階段的輸出,heatmap(熱圖)和vectormap(向量圖)本質(zhì)為概率置信圖。由于輸出為概率矩陣,可使用平方和損失函數(shù)計算每個階段每個分支的損失,分別表示檢測出的人體關(guān)鍵點和關(guān)系向量與實際人體關(guān)鍵點和關(guān)系向量的偏差。每一階段都輸出概率置信圖,因此在每個階段分支1和分支2末尾分別加入損失函數(shù):
式中:U*為真實的關(guān)鍵點置信圖;V*為真實的關(guān)節(jié)關(guān)系圖。整體目標(biāo)損失按式(6)計算,表示神經(jīng)網(wǎng)絡(luò)推斷出的人體關(guān)鍵點和關(guān)系向量與實際的人體關(guān)鍵點位置和關(guān)系向量大小、方向的偏差。
現(xiàn)有的很多雙目視覺匹配算法,如分割樹算法[18]或 AD-Census算法[19],實際上都是對圖像中每個像素點進行匹配。優(yōu)點是可以進行立體匹配、建立三維點云;缺點也很明顯,需要對攝像機進行標(biāo)定、算法復(fù)雜、計算量大、易出現(xiàn)很多無用信息等。針對對行人測距來說,只需對人體中心點進行匹配,可以極大減小計算量,同時將測量誤差只局限于神經(jīng)網(wǎng)絡(luò)檢測誤差,一定程度上提高了精度。
目標(biāo)為單人時,左右圖像上只有1個點,不需要算法匹配。目標(biāo)為多人時,首先要保證左右圖像都能檢測出中心點。那么需要將過于靠近邊界的目標(biāo)剔除,其具體數(shù)值受人體大小、距離和相機分辨率的影響。人體大小其實就是左右肩和左右胯組成的矩形框的大小,按照通常情況考慮取50 cm×80 cm。
本文選用的實時檢測雙目相機為zed mini相機,根據(jù)廠家給出的參數(shù)可估算出測量深度為0.15~12 m,根據(jù)近大遠小的關(guān)系,可以知道人在12 m處其像素框最小。單個攝像頭分辨率(像素)有四種選擇,同時考慮到相機的垂直拍攝角度比水平拍攝角度小,因此考慮垂直范圍的人體矩形框是否滿足要求就夠了。經(jīng)計算取整后的剔除距離:在672×376分辨率情況下為25;在1 280×720分辨率的情況下為48;在1 920×1 080分辨率的情況下為72;在2 208×1 241分辨率的情況下為83。
在左右圖像中都檢測出中心點的情況下,成對的左右點相對距離一定最近,并且左右圖像中的人體位置一致,那么只需將左右圖像上的中心點按照一定順序排序,就可以將兩邊的中心點匹配起來。本文規(guī)定左右圖像上的中心點排序規(guī)則一致,為:
1)首先,將所有中心點按坐標(biāo)的x方向數(shù)值由小到大的順序排序;
2)若存在坐標(biāo)的x方向數(shù)值相同的點,這些點再按y方向數(shù)值由小到大排序。
圖7為實驗中的一張雙目圖像,該圖像的單目分辨率為672×376。圖中的白色矩形框內(nèi)為關(guān)注區(qū)域,綠色的點為中心點,藍色的點為關(guān)節(jié)點。左右圖像中兩人中心點按本文匹配方法,可以正確匹配到一起。
圖7 實驗中的多人中心點識別匹配結(jié)果
使用視差的幾何模型測量空間中一點的距離有計算量小、誤差小等優(yōu)點,因此其核心在于視差的計算。其原理如圖8所示。
圖8 雙目測距原理
P為測距的目標(biāo)點,Pd為點P在左右相機光軸所在平面的垂直投影。在實際應(yīng)用中,目標(biāo)點與相機的水平距離更具有實際意義。因此,把Pd與相機間的距離z定為計算目標(biāo)。Pleft與Pright為P點分別在左右相機視圖上的投影,Xleft和Xright為2點在世界坐標(biāo)系中X方向上的坐標(biāo),則視差D按式(7)計算。
OL和OR為左右相機成像點,與實際圖像之間的距離為焦距 f,OLOR為基線 T。Pleft與 Pright的間距為L,按式(8)計算:
三角形POLOR與三角形PPleftPright相似,其相似關(guān)系同樣適用于2個三角形在左右相機光軸平面上的投影,因此有比例關(guān)系:
因此,將式(8)代入式(9)并求解 z,可得 P點距相機的水平距離z:
式(10)中的T、f是相機參數(shù)大??;成像大小為w×h(像素),h為高,w為寬。D是通過式(7)計算得到,但是Xleft和Xright坐標(biāo)系為世界坐標(biāo)系,神經(jīng)網(wǎng)絡(luò)估計出的目標(biāo)點坐標(biāo)所在坐標(biāo)系為圖像坐標(biāo)系,因此需要經(jīng)過坐標(biāo)變換,即將神經(jīng)網(wǎng)絡(luò)給出的左右圖像坐標(biāo)x1、x2乘上每一像素的實際長度變換得到 Xleft和 Xright,則視差計算如式(11):
其中像素實際長度為du=b/w,b為傳感器水平方向長度,其數(shù)值為常數(shù)。x1、x2為目標(biāo)點在左右圖像上的水平坐標(biāo)(像素)。
將式(11)代入式(10)得到實際目標(biāo)距離測量公式:
由于相機焦距f一般遠遠小于行人距離z,因此將公式簡化為:
式中f/du=fu,fu這一參數(shù)被稱為相機在u軸上的歸一化焦距,是相機內(nèi)參數(shù)矩陣中的一個元素,其測量比相機焦距f更容易也更準確。通常認為,相機的內(nèi)參在出廠后是固定的,不會在使用中發(fā)生變化[20]。相機焦距f單位為m,相機參數(shù)fu單位為像素,則測距公式可以寫成:
式中:T、fu是常數(shù),由生產(chǎn)廠家提供或者測量得到,變量d=x1-x2被為視差。x1、x2是神經(jīng)網(wǎng)絡(luò)估計出的人體中心點水平方向上的坐標(biāo)。
本文針對模型訓(xùn)練所用COCO數(shù)據(jù)集進行調(diào)整。COCO數(shù)據(jù)集由美國微軟公司發(fā)布,包含80多個物體檢測類別,20多萬張圖片。針對行人檢測,選取其中人物類別的圖片作為原始數(shù)據(jù)進行處理。由于COCO數(shù)據(jù)集中存在一些只占幾個像素點的標(biāo)記好的人體圖片和一些標(biāo)記不全(沒有標(biāo)記我們需要的關(guān)鍵點)的圖片,這些圖片對本文網(wǎng)絡(luò)訓(xùn)練起到負面作用,因此需要進行數(shù)據(jù)清洗。去除像素太低、人體關(guān)節(jié)點標(biāo)記不足的圖片,而這些圖片在數(shù)據(jù)集中只是非常少的一部分,去除后還有20多萬張標(biāo)記充足、人物清晰的圖片,因此數(shù)據(jù)清洗對有效信息完整性沒有影響。計算人體的左肩、右肩、左胯、右胯和中心點,將這5個點作為人體核心點。再根據(jù)人體核心點制作heatmap(熱圖)和vectormap(向量圖)作為圖像標(biāo)簽。將處理完的數(shù)據(jù)作為訓(xùn)練用數(shù)據(jù)集。
網(wǎng)絡(luò)訓(xùn)練所用電腦顯卡為 GTX1070,顯存8G、CPU為Intel Core i7-8750H,主頻4.0 GHz。使用隨機梯度下降法對神經(jīng)網(wǎng)絡(luò)進行訓(xùn)練,隨機梯度下降法的主要參數(shù)有:基礎(chǔ)學(xué)習(xí)率,意味著每個步驟中對模型的更改量或步長;動量,具體講為當(dāng)更新權(quán)重時可以包括對權(quán)重的先前更新的指數(shù)加權(quán)平均值。隨機梯度下降法學(xué)習(xí)率及動量屬于經(jīng)驗優(yōu)化參數(shù),由于本文選取的人體關(guān)鍵點較少,因此在文獻[10-11]所選學(xué)習(xí)率的基礎(chǔ)上適當(dāng)增大,并結(jié)合實際訓(xùn)練情況設(shè)置:基礎(chǔ)學(xué)習(xí)率為0.000 04,動量為0.9。訓(xùn)練8萬次后每層的訓(xùn)練損失曲線如圖9所示,測試收斂曲線如圖10所示。
圖9 訓(xùn)練損失曲線
圖10 測試收斂曲線
可以看出:訓(xùn)練、測試loss值都呈下降趨勢,說明網(wǎng)絡(luò)一直在學(xué)習(xí)。2個分支的收斂情況相似,5萬次以前下降較為明顯,5萬次后下降緩慢,直到8萬次各個loss值基本不繼續(xù)下降,網(wǎng)絡(luò)訓(xùn)練完成。測試loss值應(yīng)與分支1和分支2的loss值的和相差不大,說明神經(jīng)網(wǎng)絡(luò)訓(xùn)練正常,不存在過擬合、欠擬合。分階段看訓(xùn)練loss值情況,3個階段loss值都呈現(xiàn)下降趨勢,說明3個階段都起到積極作用。
在用神經(jīng)網(wǎng)絡(luò)檢測圖像時,首先要對圖像進行預(yù)處理,采取中心縮放方式,取4種尺度(scale)改變圖形分辨率,但不改圖像大小,這樣可以在一定程度上反映對不同分辨率圖像的檢測情況。由于測距算法只關(guān)注中心點的位置,因此測試誤差為:
其中:Ex、Ey、E為 x方向誤差、y方向誤差和總誤差;為人體中心點的標(biāo)準坐標(biāo);xn、yn為人體中心點測的試坐標(biāo);w、h為圖像長寬。
神經(jīng)網(wǎng)絡(luò)在COCO數(shù)據(jù)集上的測試結(jié)果見表1。可以看出scale為0.5的檢測成功率最低,另外3種scale的檢測成功率相差不大。對于誤差來說神經(jīng)網(wǎng)絡(luò)在檢測目標(biāo)點x方向的精度比y方向的精度高很多。對于x方向的精度,scale=0.5最低,另外3種精度接近。對于y方向的精度scale=1.0最高??偩纫彩莝cale=1.0最高。由于測距算法視差計算只使用了x方向坐標(biāo),所以Ex有較大的參考意義。
表1 神經(jīng)網(wǎng)絡(luò)測試結(jié)果 %
KITTI數(shù)據(jù)集[21]由德國卡爾魯厄理工學(xué)院和豐田美國技術(shù)研究院聯(lián)合創(chuàng)辦,是目前國際上最大的自動駕駛場景下的算法評測數(shù)據(jù)集。
查詢KITTI數(shù)據(jù)集提供的相機內(nèi)參矩陣可以得到:T=0.54 m,fu=7.188 56×102,將這2個參數(shù)以及匹配好的左右人體中心點坐標(biāo)代入式(14)可以計算出行人距離。神經(jīng)網(wǎng)絡(luò)檢測多人中心點結(jié)果如圖11所示,圖中綠色的點為中心點,圖11(a)為左相機圖像檢測結(jié)果,圖11(b)為右相機圖像檢測結(jié)果??梢钥闯鰣D中大部分行人都檢測出來,只有在黃色箭頭指出的白色上衣行人沒有檢測出來。
圖11 KITTI數(shù)據(jù)集上的檢測結(jié)果
原因可能有以下幾點:
1)由于物體遮擋導(dǎo)致漏檢。雖然神經(jīng)網(wǎng)絡(luò)可以通過沒有被遮擋的部分推測出行人中心點,但當(dāng)遮擋部位過大時,無法估計出人體中心點。
2)由于行人距離過遠無法檢測出。圖片進入神經(jīng)網(wǎng)絡(luò)的時候經(jīng)過了尺寸改變,如果行人過遠,其特征所占像素太少,神經(jīng)網(wǎng)絡(luò)將無法檢測出人體中心點。
針對數(shù)據(jù)集中含有行人的圖像檢驗算法,相對誤差如圖12所示。本文算法檢測出的最近行人距離為3.73 m、最遠行人距離為28.5 m,但是當(dāng)行人距離超過22 m后,神經(jīng)網(wǎng)絡(luò)存在檢測不出目標(biāo)的情況,因此,對于KITTI數(shù)據(jù)集,本文算法使用距離為3.73~22 m。行人在3.73~10 m的算法相對誤差小于4.21%,在10~22 m的算法相對誤差小于7.27%。
圖12 KITTI數(shù)據(jù)集本文算法相對誤差
本文算法與Mask R-CNN&ICP的雙目物體定位方法和改進Fast R-CNN&SGM的雙目行人檢測定位方法在KITTI數(shù)據(jù)集上進行了對比實驗。發(fā)現(xiàn)另外2種算法在行人距離超過15 m后誤差太大,因此,只取行人距離在4~15 m范圍內(nèi)的數(shù)據(jù)進行對比,實驗結(jié)果如圖13所示??梢钥闯觯琈ask R-CNN&ICP的方法和Fast R-CNN&SGM的方法曲線波動都非常大,而且2種檢測方法速度很慢,都在200 ms以上。而本文算法曲線波動明顯小很多,而且基本可以保證每張圖片檢測時間在100 ms左右。
圖13 KITTI數(shù)據(jù)集上的對比實驗
本文采用zed mini雙目相機作為實時檢測相機,其基本參數(shù)由生產(chǎn)廠家提供見表2。
表2 zed mini相機技術(shù)規(guī)格
實驗所用的電腦顯卡為 GTX1070,顯存8G,CPU為Intel Core i7-8750H,主頻4.0 GHz。得到檢測速度見表3。
表3 雙目測距算法檢測速度 fps
算法的檢測速度隨分辨率增大而減慢,隨scale的增大而減小。具有實際應(yīng)用意義的主要是3種fps大于10的2種組合,即scale為0.5、分辨率為672×376的組合,和scale為1.0、分辨率為672×376的組合。
進行測距實驗時以激光雷達所得距離作為基準。雙目測量實驗取scale為0.5、分辨率為672×376的組合進行實時檢測。結(jié)果如圖14所示。
圖14 zed mini雙目相機實時檢測結(jié)果
從0.5 m開始每隔一段距離記錄一次雙目測距數(shù)據(jù),并計算相對誤差(保留正負),正值代表測量距離比實際距離遠,負值代表測量距離比實際距離近,相對誤差曲線(百分比)如圖15所示。
圖15 zed相機測距實驗相對誤差
實時檢測的結(jié)果表明,神經(jīng)網(wǎng)絡(luò)在0.5 m以內(nèi)時由于人體所占圖片比例太大,無法檢測出關(guān)鍵點。如圖15,在0.5~6.2 m的相對誤差小于2.5%,檢測結(jié)果較為準確;當(dāng)行人在6.2~8 m雖然存在波動,但都小于8.1%,檢測數(shù)據(jù)依然可信;在8 m以上相對誤差逐漸變大,雖然偶爾誤差小于10%,但整體數(shù)據(jù)不可信。檢測速度大約30 fps。在實驗過程中發(fā)現(xiàn),當(dāng)人坐在靠背椅或周圍有強光干擾的時候,神經(jīng)網(wǎng)絡(luò)更容易出錯。
實時檢測結(jié)果與在KITTI數(shù)據(jù)集上的檢測結(jié)果相差較大,實時檢測的行人距離范圍明顯小了很多,但是檢測速度變快了。原因有可能是相機性能的區(qū)別,KITTI數(shù)據(jù)集的圖片質(zhì)量優(yōu)于zed mini相機拍攝到的圖片,如果采用性能更高的雙目相機或使用2個高性能的單目相機組成雙目相機,有可能提高檢測范圍。另外,實時檢測時的光環(huán)境與神經(jīng)網(wǎng)絡(luò)訓(xùn)練所用COCO數(shù)據(jù)集中的光環(huán)境存在較大差異,而訓(xùn)練所用COCO數(shù)據(jù)集與KITTI數(shù)據(jù)集光環(huán)境相似,因此導(dǎo)致實時檢測距離較近的,檢測結(jié)果不如在KITTI數(shù)據(jù)集上的情況。而且實驗室的環(huán)境相較于KITTI數(shù)據(jù)集的街道環(huán)境更為雜亂,可能也是錯誤次數(shù)增多的原因之一。后續(xù)如果能夠以實時檢測所用相機制作數(shù)據(jù)集對網(wǎng)絡(luò)進一步訓(xùn)練,有可能提高實時檢測范圍,減少錯誤次數(shù)。
本文使用多階段多分支的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)模型。實現(xiàn)5個人體核心點檢測,其在水平方向的相對誤差小于0.67%。神經(jīng)網(wǎng)絡(luò)模型提取雙目相機左右圖像中的人體核心點,根據(jù)2點相對距離進行匹配來計算視差,最終使用三角法計算得到行人距離。
在KITTI數(shù)據(jù)集上檢測本文算法,檢測結(jié)果為:能夠較為準確地檢測出3.73~22.5 m的行人,檢測每張圖片用時約為100 ms。行人在3.73~10 m的算法相對誤差小于4.21%,在10~22 m的算法相對誤差小于7.27%。比采用Mask R-CNN&ICP和改進Fast-YOLO&SGM的算法檢測范圍大、相對誤差小并且速度更快。
在zed mini雙目相機上的實驗結(jié)果為:行人距離在0.5~6.2 m的相對誤差小于2.5%,速度可以達到30 fps。能夠?qū)崿F(xiàn)實時檢測。