蘇健鵬,黃影平,趙柏淦,胡 興
(上海理工大學(xué) 光電信息與計(jì)算機(jī)工程學(xué)院,上海 200093)
通過單目或多目攝像機(jī)實(shí)現(xiàn)車輛定位的方法稱之為視覺里程計(jì)[1]。定位就是要獲取車輛在三維空間中的位置和姿態(tài)信息。位置是世界坐標(biāo)系下的三維坐標(biāo),姿態(tài)則是車輛運(yùn)動(dòng)方向與3 個(gè)坐標(biāo)軸的夾角,即俯仰角、航向角和側(cè)滾角。位置和姿態(tài)6 個(gè)自由度的信息可以唯一確定車輛在指定坐標(biāo)系中的空間狀態(tài)。視覺里程計(jì)被廣泛用于無人駕駛、機(jī)器人、潛航器等,是繼全球衛(wèi)星定位系統(tǒng),慣性導(dǎo)航,車輪里程計(jì)等定位技術(shù)后的一種新的導(dǎo)航技術(shù),其性價(jià)比及可靠性較高。
視覺里程計(jì)通過相機(jī)獲取圖片序列,經(jīng)過特征提取、特征匹配/跟蹤,外點(diǎn)剔除和運(yùn)動(dòng)估計(jì)等處理模塊得到車輛的位姿更新,進(jìn)而推算運(yùn)動(dòng)軌跡,實(shí)現(xiàn)定位導(dǎo)航[1]。Nister 等[2]首次實(shí)現(xiàn)實(shí)時(shí)視覺里程計(jì)系統(tǒng),最先采用基于匹配的方法代替基于跟蹤的方法進(jìn)行特征關(guān)聯(lián)以避免基于互相關(guān)的跟蹤而引起的特征漂移,采用隨機(jī)采樣一致性(RANSAC)算法消除外點(diǎn),并給出了單目和雙目視覺里程計(jì)的實(shí)現(xiàn)途徑和方法,在單目視覺里程計(jì)系統(tǒng)中,提出了被后人廣泛使用的5 點(diǎn)算法。在雙目視覺里程計(jì)系統(tǒng)中,他們提出了采用3D 到 2D 重投影誤差代替3D 點(diǎn)之間的歐拉距離的誤差的運(yùn)動(dòng)估計(jì)方法。這些工作為視覺程計(jì)的研究奠定了基礎(chǔ),當(dāng)前大多數(shù)視覺定位導(dǎo)航系統(tǒng)都遵循這種框架。在實(shí)際場景中,單純的角點(diǎn)并不能滿足需求,于是研究人員設(shè)計(jì)更加穩(wěn)定的圖像特征如SIFT、SUFT 等。雖然SIFT和SUFT 考慮到圖像變換過程中的許多問題,但是計(jì)算量較大。2011 年Rublee 等[3]提出了ORB(oriented FAST and rotated BRIEF)算法,該算法提取的圖片特征不僅保留了SIFT 和SUFT特征的優(yōu)點(diǎn),且速度是SIFT 算法的30 多倍。2011年Geiger 等[4]將圖片的稀疏特征運(yùn)用到視覺里程計(jì)中,提出了實(shí)時(shí)單目視覺里程計(jì)的VISO2-M 算法,該算法是當(dāng)時(shí)最好的SLAM 算法之一。2015年Mur-Artal 等[5]在ORB 算法上進(jìn)行研究,提出了ORB-SLAM 算法,并在精度上取得了良好的效果。Mur-Artal 等[6]繼續(xù)在ORB-SLAM的基礎(chǔ)上進(jìn)行優(yōu)化并推出了ORB-SLAM2,是目前定位較精確的視覺定位系統(tǒng)。
上述方法都是基于幾何原理,當(dāng)更換場景后需要對代碼中的參數(shù)進(jìn)行大量調(diào)整以適應(yīng)新的場景需求,而使用深度學(xué)習(xí)的算法完全不同于上述思路。2008 年Roberts 等[7]嘗試使用光流和機(jī)器學(xué)習(xí)相結(jié)合的方法預(yù)測車輛運(yùn)動(dòng)軌跡,提出了一個(gè)基于神經(jīng)網(wǎng)絡(luò)視覺里程計(jì)的模型,模型由160 個(gè)KNN(K-Nearest-Neighbors)學(xué)習(xí)機(jī)組成,這種模型使用K 近鄰的方法計(jì)算每個(gè)單元的光流,再將光流轉(zhuǎn)化為位姿參數(shù)。2015 年Kishore 等[8]首次提出了使用卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network)來學(xué)習(xí)視覺里程計(jì),其模型將傳統(tǒng)方法與深度學(xué)習(xí)的方法相結(jié)合,先使用雙目圖片估計(jì)出深度,再利用兩個(gè)不同的卷積神經(jīng)網(wǎng)絡(luò)分別學(xué)習(xí)圖片特征得到車輛的角度和速度。2015 年Kendall 等[9]提出了一種端對端的視覺里程計(jì)模型PoesNet,該模型首次將視覺里程計(jì)設(shè)計(jì)為端對端的網(wǎng)絡(luò),即輸入圖片經(jīng)過神經(jīng)網(wǎng)絡(luò)后直接輸出位姿,不過由于每次輸入的都是單張圖片,無法建立視覺里程計(jì)的時(shí)序性,導(dǎo)致其魯棒性及泛化能力較差,在新場景的應(yīng)用中定位偏移較大。為了解決時(shí)序性的問題,Ronald 等[10]提出DeepVO 的網(wǎng)絡(luò)模型,該模型將長短期記憶網(wǎng)絡(luò)(Long Short-Term Memory,LSTM)加入到整個(gè)神經(jīng)網(wǎng)絡(luò)中,通過LSTM 網(wǎng)絡(luò)可以很好的構(gòu)建圖片之間的聯(lián)系,形成圖片之間的時(shí)序性。2018 年Mccormac 等[11]用Mask-RCNN 網(wǎng)絡(luò) 對距離函數(shù)進(jìn)行重構(gòu),設(shè)計(jì)出一個(gè)在線的SLAM系統(tǒng)并具有很高的內(nèi)存效率。相對于傳統(tǒng)的視覺里程計(jì),基于機(jī)器學(xué)習(xí)的視覺里程計(jì)無需建立復(fù)雜的物體運(yùn)動(dòng)的幾何模型,甚至無需考慮相機(jī)的校準(zhǔn)參數(shù)以及相對尺度問題,運(yùn)動(dòng)估計(jì)的準(zhǔn)確性與魯棒性依賴于神經(jīng)網(wǎng)絡(luò)估計(jì)器的設(shè)計(jì)和用于訓(xùn)練的圖像庫是否涵蓋待測場景的變化。
2015 年Dosovitskiy 等[12]提出了一種用于估計(jì)幀間光流的卷積神經(jīng)網(wǎng)絡(luò)Flownet-s,取得了很好的效果??紤]到光流是相機(jī)位姿參數(shù)的最好的體現(xiàn),本文借助Flownet-s 的結(jié)構(gòu)提出了一種新的基于卷積神經(jīng)網(wǎng)絡(luò)單目視覺里程計(jì)模型,我們稱之為CNN-VO(Convolutional Neural Network Visual Odometry)。在此基礎(chǔ)上引入GoogLeNet[13]的Inception(細(xì)胞)結(jié)構(gòu)對模型進(jìn)行改進(jìn),增加了模型的深度。由于Inception 結(jié)構(gòu)中的多個(gè)1×1 卷積的串聯(lián),使得圖片在相同的運(yùn)算量下可以獲取更多的細(xì)微特征,彌補(bǔ)了單一卷積核特征提取不全面的缺陷。改進(jìn)后的模型稱為Deep-CNN-VO(Deep Convolutional Neural Network Visual Odometry)。在預(yù)處理階段建立兩張圖片的相對關(guān)系,每次輸入連續(xù)的兩幀圖片,得到后一幀相對于前一幀的6 個(gè)相對位姿參數(shù),將兩種模型進(jìn)行對比實(shí)驗(yàn),結(jié)果表明Deep-CNN-VO相較于CNN-VO 在性能上具有明顯提升,和現(xiàn)有的視覺里程計(jì)系統(tǒng)相比,本文所提方法也不遜色。
網(wǎng)絡(luò)結(jié)構(gòu)如圖1 所示。圖1(a)是CNN-VO網(wǎng)絡(luò)架構(gòu)圖,圖1(b)是改進(jìn)后Deep-CNN-VO網(wǎng)絡(luò)架構(gòu)圖。它們都包括圖片輸入和預(yù)處理模塊,卷積神經(jīng)網(wǎng)絡(luò)模塊和位姿輸出模塊。其工作原理為:每次將連續(xù)的兩幀圖片進(jìn)行疊加處理后輸入到卷積神經(jīng)網(wǎng)絡(luò)模塊提取圖片的全局幀間變化特征,將高維的特征圖輸入到三層全連接層降低特征維度,最后輸出車輛相對于前一幀的平移和旋轉(zhuǎn)坐標(biāo)。
輸入圖像的分辨率為1 280×384。輸入時(shí)每次輸入連續(xù)兩幀圖片,疊加后產(chǎn)生一個(gè)6 通道組成的(土黃色框)圖像輸入到卷積神經(jīng)網(wǎng)絡(luò)。
卷積神經(jīng)網(wǎng)絡(luò)模塊由卷積層,池化層和全連接層組成。CNN-VO 網(wǎng)絡(luò)的卷積層借鑒了Dosovitskiy 等[12]提出的Flownet-s 結(jié)構(gòu),該網(wǎng)絡(luò)通過卷積網(wǎng)絡(luò)學(xué)習(xí)圖片特征預(yù)測光流。如圖1(a)所示,CNN-VO 卷積層由9 個(gè)獨(dú)立的子卷積層(綠色矩形)組成,其參數(shù)如表1 所示。每個(gè)子卷積層后面引入一個(gè)非線性激活函數(shù)即ReLU(Rectified Linear Unit)[14],其數(shù)學(xué)表達(dá)為:
圖1 視覺里程計(jì)端到端網(wǎng)絡(luò)數(shù)據(jù)流圖Fig.1 Flow diagram of visual odometry end-to-end network
該函數(shù)能夠有效地進(jìn)行梯度下降以及反向傳播,避免了梯度爆炸和梯度消失問題。子卷積核的大小由最初的7×7 逐步減小為5×5 再到3×3。圖1(b)中,Deep-CNN-VO 網(wǎng)絡(luò)將CNN-VO 網(wǎng)絡(luò)中的三層子卷積更改為Inception 結(jié)構(gòu)(紅色矩形),子卷積層數(shù)由9 層降低為6 層。保留下來的子卷積層結(jié)構(gòu)的卷積單元數(shù)目及核心數(shù)與CNN-VO 網(wǎng)絡(luò)一致。
其中CNN-VO 的卷積層參數(shù)如表1 所示。Deep-CNN-VO 剩余的6 個(gè)卷積層的參數(shù)如表2所示。由于CNN-VO 中的子卷積層中的5 層3×3 結(jié)構(gòu)對圖片小特征捕捉較好,因此選取原結(jié)構(gòu)中的7×7 及5×5 卷積核進(jìn)行改善。Conv1 改為Inception1,Conv3 和Conv4 改為Inception2。
Deep-CNN-VO 中的兩層Inception 結(jié)構(gòu)借鑒了GoogLeNet[13]中的Inception 結(jié)構(gòu)并進(jìn)行調(diào)整,其結(jié)構(gòu)如圖2 所示。圖2(a)是Inception1的結(jié)構(gòu),圖2(b)是Inception2 的結(jié)構(gòu)。相較于CNN-VO,圖2(a)在原有7×7 卷積層上引入多個(gè)1×1 的卷積,降低了計(jì)算的復(fù)雜度,而且在相同的感知野中能夠獲得更多的圖片特征。在7×7 卷積作用的同時(shí)加入5×5 卷積獲取圖片特征,這樣可以在一個(gè)Inception 層中獲取多種圖片特征,解決了僅用單一卷積核獲取圖片特征不足的情況。兩種改進(jìn)型結(jié)構(gòu)都在原有的卷積層前串聯(lián)了多個(gè)1×1 卷積層,可以得到圖片同樣位置更多的非線性特征。最后再將4 種卷積后得到的特征合并送入到下一個(gè)卷積層進(jìn)行處理。該模塊通過多個(gè)卷積核的串聯(lián)疊加,在保持原有計(jì)算量的情況下獲取了更多的細(xì)微特征,對提高視覺里程計(jì)的精度有幫助。這個(gè)改進(jìn)實(shí)際上是增加了子卷積層的深度。
在卷積層的最后一層后使用池化層(橙色矩形)進(jìn)行降維處理,在獲得較好圖片特征的同時(shí)降低了數(shù)據(jù)計(jì)算量。經(jīng)過6 個(gè)卷積層,2 個(gè)細(xì)胞層和池化層處理后,圖像從最初的三維特征變?yōu)? 024 維特征,引入全連接層(藍(lán)色矩形)進(jìn)行高維特征的降維處理。共包含3 個(gè)全連接層,與卷積層一樣,每個(gè)全連接層后有1 個(gè)非線性激活函數(shù)。在降維到128 層以后輸出位姿,得到幀間相對位姿的6 個(gè)參數(shù)。
經(jīng)過三層全連接層后得到車輛的6個(gè)幀間相對位姿,分別是平移和旋轉(zhuǎn)在已知第一幀位姿的情況下,通過兩幀之間的相對位姿逆變換得到每一幀的絕對位姿。
位姿包含平移量和旋轉(zhuǎn)量兩種不同的尺度變量,所以本文的損失函數(shù)為兩者的加權(quán)求和。設(shè)第i 至i+1 幀圖片的相對平移為 Ti,相對旋轉(zhuǎn)為 ?i,使用均方誤差作為損失函數(shù):
表1 CNN-VO 子卷積參數(shù)Tab.1 CNN-VO subconvolution parameter
表2 Deep-CNN-VO 子卷積參數(shù)Tab.2 Deep-CNN-VO subconvolution parameter
圖2 細(xì)胞結(jié)構(gòu)圖Fig.2 Inception structure
式中:Tg和 ?g分別表示平移量和旋轉(zhuǎn)量的真實(shí)位姿; δ 是調(diào)節(jié)平衡旋轉(zhuǎn)量和平移量的一個(gè)參數(shù),實(shí)驗(yàn)中使用10,50,100 分別進(jìn)行實(shí)驗(yàn),發(fā)現(xiàn)當(dāng) δ 取50時(shí)可以獲得最好效果,||...||2表示2 范數(shù)。
實(shí)驗(yàn)采用KITTI[15]公共數(shù)據(jù)集中的Visual Odometry/SLAM 視頻圖像進(jìn)行實(shí)驗(yàn)。它提供了從公路、農(nóng)村和城市場景中的22 個(gè)經(jīng)過校正的雙目圖像序列,每個(gè)序列的范圍從500~5 000 m長度不等,幀速率為10 幀/s,圖像分辨率為1 241×376 及1 226×370。其中前11 個(gè)序列提供了從激光雷達(dá)和GPS 獲得的各幀位姿參數(shù)的地面真實(shí)值。采用00,01,02,08,09 序列作為訓(xùn)練集,這些場景相對于其他序列圖片數(shù)量較多,行駛距離較長且場景更豐富。使用03,04,05,07,10序列作為測試。
系統(tǒng)工作站采用NVDIA GTX 1080Ti GPU進(jìn)行訓(xùn)練,配備32G 內(nèi)存以及Intel Core Xeon 3.4 GHz CPU,測試用的筆記本配備NVDIA GTX 1 060 以及Intel Core i7 2.7 GHz CPU。
網(wǎng)絡(luò)采用連續(xù)兩幀圖片的疊加作為網(wǎng)絡(luò)的輸入,求解的是連續(xù)兩幀間的相對位姿態(tài),因此需要使用相鄰兩幀的相對位姿作為真值進(jìn)行訓(xùn)練。然而,KITTI 提供的每幀的位姿參數(shù)是相對于起始點(diǎn)的絕對位姿,因此需要進(jìn)行如下轉(zhuǎn)換。KITTI 提供的第n 幀圖片的絕對位姿為齊次矩陣為 Tn,第n+1 幀圖片為齊次矩陣為 Tn+1,則兩幀間的相對位姿矩陣為:
網(wǎng)絡(luò)使用批量梯度下降法作為優(yōu)化算法,選擇Adam(Adaptive Moment Estimation)作為優(yōu)化器,進(jìn)行150 000 次迭代,其中Adam 優(yōu)化器參數(shù)設(shè)置 β=0.9 ,β2=0.999 ,學(xué)習(xí)率初始設(shè)置為0.000 1,學(xué)習(xí)率將隨著迭代次數(shù)的增加適當(dāng)變小,以便找到優(yōu)化函數(shù)的最優(yōu)解。batch size 設(shè)為32,每經(jīng)過一輪batch size,訓(xùn)練樣本將會(huì)打亂,以保證誤差不會(huì)產(chǎn)生突變,誤差曲線穩(wěn)定下降。
訓(xùn)練過程中引入驗(yàn)證機(jī)制,在每經(jīng)過4 輪訓(xùn)練以后,從驗(yàn)證數(shù)據(jù)集中隨機(jī)選取一張圖片,對當(dāng)前訓(xùn)練產(chǎn)生的模型進(jìn)行測試,若誤差持續(xù)下降,則證明訓(xùn)練模型結(jié)構(gòu)有效。驗(yàn)證機(jī)制的引入可以有效防止訓(xùn)練過程中的過擬合情況。
使用KITTI 數(shù)據(jù)集中的圖像序列對本文兩種方法(Deep-CNN-VO 和CNN-VO)進(jìn)行測試評(píng)估,并與VISO2-M[4]以及DeepVO[10]兩種單目視覺里程計(jì)方法進(jìn)行比較,其中VISO2-M 是傳統(tǒng)單目視覺里程計(jì)方法中比較有代表性的算法,也是開源的。DeepVO 采用了長短期記憶網(wǎng)絡(luò)進(jìn)行軌跡估計(jì),是目前使用深度學(xué)習(xí)進(jìn)行端到端單目視覺里程計(jì)研究定位較為精確的算法。完整序列的運(yùn)動(dòng)估計(jì)誤差分別用平均平移誤差(ATE)和平均旋轉(zhuǎn)誤差(ARE)表示[15],誤差越小代表與真實(shí)軌跡越相近。表3 展示了用4 種方法對KITTI 數(shù)據(jù)庫中03、04、05、07、10圖像序列的平均平移誤差和平均旋轉(zhuǎn)誤差。
從表中可以看出,Deep-CNN -VO 模型相較于CNN-VO 模型在5 個(gè)測試序列上,無論是ATE 還是ARE 都有顯著提升,說明卷積神經(jīng)網(wǎng)絡(luò)中Inception 結(jié)構(gòu)起作用。與傳統(tǒng)的視覺里程計(jì)方法VISO2-M 相比,除了序列04,Deep-CNNVO 在其他4 個(gè)序列,以及總體上ATE 和ARE 都有提升。與目前比較著名的基于深度學(xué)習(xí)的視覺里程計(jì)DeepVO 相比,ATE 的表現(xiàn)差一些,ARE基本持平,主要原因是DeepVO 引入了包含時(shí)序,特性的長短時(shí)記憶網(wǎng)絡(luò)(LSTM)進(jìn)行優(yōu)化而本文方法則完全采用相對簡單的卷積神經(jīng)網(wǎng)絡(luò)。在計(jì)算效率方面,本文方法計(jì)算量較小,對硬件要求相對較低,更容易移植到實(shí)時(shí)的系統(tǒng)中。
利用視覺里程計(jì)估計(jì)得到的每一幀相對位姿參數(shù)推算車載相機(jī)的運(yùn)動(dòng)軌跡。圖3 展示了以上4 種算法對KITTI 數(shù)據(jù)庫中04,05,07,10 序列的軌跡構(gòu)建以及和真實(shí)軌跡的比較。從圖中可以看出,序列04 的直線軌跡表現(xiàn)相對較好,其余序列中由于車輛行駛過程中會(huì)有轉(zhuǎn)彎等因素的影響,軌跡出現(xiàn)偏移。結(jié)果表明,VISO2-M 算法和CNN-VO 模型產(chǎn)生的軌跡精度偏離真值較大,DeepVO 及本文Deep-CNN-VO 算法相對比較接近真實(shí)軌跡。
本文嘗試將用于分類的卷積神經(jīng)網(wǎng)絡(luò)轉(zhuǎn)化獲取圖像幀間時(shí)序變化特征的網(wǎng)絡(luò),實(shí)現(xiàn)了采用基于深度學(xué)習(xí)卷積神經(jīng)網(wǎng)絡(luò)技術(shù)的車輛自主定位方法。相較于傳統(tǒng)的視覺里程計(jì)方法,本文方法采用端到端的方式,無需根據(jù)場景建立復(fù)雜的幾何模型,是未來視覺里程計(jì)技術(shù)的一個(gè)發(fā)展方向。本文工作證明了其可行性,是一個(gè)有益的嘗試和探索。
本文方法借助卷積神經(jīng)網(wǎng)絡(luò)對彩色圖片自動(dòng)學(xué)習(xí)提取圖像幀間變化的全局特征,采用改進(jìn)型Inception 結(jié)構(gòu)代替單一的卷積層,多個(gè)1×1 卷積核串聯(lián)使用可以在相同運(yùn)算量的基礎(chǔ)上提取出更多細(xì)微的圖片特征,通過三層全連接層輸出相機(jī)的幀間相對位姿參數(shù),并據(jù)此推算相機(jī)的運(yùn)動(dòng)軌跡。在共用KITTI 數(shù)據(jù)集上進(jìn)行測試,實(shí)驗(yàn)結(jié)果表明本文提出的Deep-CNN-VO 模型可以較準(zhǔn)確地估計(jì)車輛的運(yùn)動(dòng)軌跡,與目前比較著名的基于深度學(xué)習(xí)的視覺里程計(jì)DeepVO相比,雖然ATE 效果差一點(diǎn),其主要原因是DeepVO 引入了包含時(shí)序特性的長短時(shí)記憶網(wǎng)絡(luò)(LSTM)進(jìn)行優(yōu)化,而本文方法則完全采用相對簡單的卷積神經(jīng)網(wǎng)絡(luò)。由于僅使用CNN 網(wǎng)路作為結(jié)構(gòu),神經(jīng)單元相對于DeepVO 要小,因此本文方法計(jì)算量較小,對硬件要求相對較低,更容易移植到實(shí)時(shí)的系統(tǒng)中。下一步的工作將考慮結(jié)合殘差方法及雙目圖片共同優(yōu)化網(wǎng)絡(luò),達(dá)到更好的運(yùn)動(dòng)估計(jì)精度。
表3 測試序列03、04、05、07、10 實(shí)驗(yàn)結(jié)果對比Tab.3 The comparison experimental results of 03, 04, 05, 07 and 10 test sequence
圖3 序列04、05、07、10 軌跡估計(jì)Fig.3 The trajectory estimation of 04,05,07 and 10 sequence