熊志麗 劉華軍
(南京理工大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院 南京 210094)
同時(shí)定位與地圖構(gòu)建(Simultaneous Localization and Mapping,SLAM)問(wèn)題一直備受機(jī)器人和自動(dòng)駕駛領(lǐng)域的關(guān)注,在經(jīng)典的視覺SLAM 框架中,視覺里程計(jì)(Visual Odometry,VO)扮演著前端的作用,即在讀取傳感器傳來(lái)的信息后,通過(guò)相鄰兩幀的圖像信息估計(jì)出圖像之間的相對(duì)運(yùn)動(dòng),運(yùn)動(dòng)主要包括旋轉(zhuǎn)和平移兩個(gè)層面。VO的概念最早應(yīng)用領(lǐng)域?yàn)榛鹦翘剿鳎?]。傳統(tǒng)的VO 工作流程主要包括:相機(jī)校準(zhǔn)、對(duì)輸入的圖像進(jìn)行特征的提取和篩選、相鄰幀的特征匹配、異常值剔除、運(yùn)動(dòng)估計(jì)和比例估計(jì)、局部?jī)?yōu)化、最后輸出位姿。可見傳統(tǒng)VO系統(tǒng)的運(yùn)行過(guò)程比較復(fù)雜,分為很多模塊,每個(gè)模塊都有各自的算法,將不同模塊耦合在一起也是工作重點(diǎn)。
傳統(tǒng)方法按照是否提取特征可以分為特征點(diǎn)法和直接法。特征點(diǎn)法主要運(yùn)用在場(chǎng)景紋理豐富、特征明顯的情況下。特征點(diǎn)由關(guān)鍵點(diǎn)和描述子組成,在提取關(guān)鍵點(diǎn)后再通過(guò)計(jì)算描述子對(duì)關(guān)鍵點(diǎn)進(jìn)行篩選。提取關(guān)鍵點(diǎn)是指獲得像素點(diǎn)的位置,而描述子是一個(gè)向量,能夠根據(jù)人工設(shè)計(jì)的方法對(duì)該關(guān)鍵點(diǎn)周圍的像素信息進(jìn)行描述,減少甚至消除相機(jī)視角的變化對(duì)圖像尺度和方向的影響,更好地進(jìn)行幀間匹配。有的特征點(diǎn)還包含朝向、大小等信息。SIFT[2]、SURF[3]、BRIEF[4]是描述子常見的算法。
直接法主要用光流來(lái)描述運(yùn)動(dòng)信息。光流分為計(jì)算所有像素的稠密光流以及計(jì)算部分像素的稀疏光流。稀疏光流的代表有Lucas-Kanade(LK)光流[5],可用于SLAM 的特征點(diǎn)位置跟蹤。通常被用來(lái)跟蹤角點(diǎn)的運(yùn)動(dòng)。稠密光流的代表則有Horn-Schunck[6]光流。
目前像ORB-SLAM2[7]這樣的特征點(diǎn)法在精度上已經(jīng)能夠達(dá)到工業(yè)界的要求,但特征點(diǎn)的篩選和匹配算法計(jì)算復(fù)雜耗時(shí)較大,而且受環(huán)境影響嚴(yán)重。當(dāng)處于光線暗以及紋理弱的環(huán)境下,能檢測(cè)到的特征點(diǎn)數(shù)量會(huì)大大下降,從而對(duì)結(jié)果產(chǎn)生很大影響。而基于光流的直接法雖然運(yùn)行速度快,但由于該方法依賴于像素的運(yùn)動(dòng),因此受光照強(qiáng)度變化的影響很大。而隨著深度學(xué)習(xí)的興起及其在圖像特征檢測(cè)方面的卓越優(yōu)勢(shì),學(xué)者們看到了用深度學(xué)習(xí)解決視覺里程計(jì)問(wèn)題的潛力。另外,基于深度學(xué)習(xí)的方法不需要人工設(shè)計(jì)特征,這也是此類方法的一大優(yōu)勢(shì)。
在特征提取,特征匹配及位姿估計(jì)這些環(huán)節(jié)都可以引入深度學(xué)習(xí)。LIFT(Learned Invariant Feature Transform)[8]就采用深度學(xué)習(xí)的框架實(shí)現(xiàn)了特征提取的功能,其性能甚至優(yōu)于傳統(tǒng)的SIFT 算法。D2-Net((A Trainable CNN for Joint Description and Detection of Local Features)算法是由Mihan 等人[9]提出的,該方法對(duì)光照的魯棒性較好。而在位姿估計(jì)環(huán)節(jié),因?yàn)镃NN 在對(duì)序列關(guān)系進(jìn)行建模方面表現(xiàn)不盡如人意,此環(huán)節(jié)引入了循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN),后來(lái)由于RNN 不適合用于長(zhǎng)時(shí)序列的估計(jì),而LSTM(Long Short-Term Memory)[10]能很好地解決這個(gè)問(wèn)題,逐漸用LSTM替代了原始的RNN。
卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)的研究自21世紀(jì)80年代開始,在經(jīng)歷少有人問(wèn)津的幾十年后,隨著深度學(xué)習(xí)理論的提出重現(xiàn)于人們的視野中。為了適應(yīng)不同的學(xué)習(xí)任務(wù),各種各樣的CNN結(jié)構(gòu)層出不窮。著名的結(jié)構(gòu)有AlexNet[11],VGG,GoogleNet,ResNet等。
對(duì)于視覺里程計(jì)問(wèn)題,因?yàn)橐曈X里程計(jì)和圖像分類,目標(biāo)跟蹤這類問(wèn)題有很大區(qū)別,我們不能簡(jiǎn)單地采用這些流行結(jié)構(gòu)來(lái)解決問(wèn)題。這里我們采用2015 年Dosovitskiy 等[12]提出的卷積神經(jīng)網(wǎng)絡(luò)FlowNet-S。這是一種用于估計(jì)幀間光流的卷積神經(jīng)網(wǎng)絡(luò),可以學(xué)習(xí)圖片間的幾何特征。但我們只關(guān)注FlowNet-S 網(wǎng)絡(luò)前面的卷積部分,丟掉了后面的反卷積部分。
循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)主要用于處理時(shí)序輸出信號(hào)。RNN 的網(wǎng)絡(luò)深度的增加有助于網(wǎng)絡(luò)在更加抽象的特性上的表達(dá),將上一層RNN 的輸出作為下一層RNN 的時(shí)序信號(hào)輸入,依次往上疊加,最后一層RNN 的輸出作為整個(gè)網(wǎng)絡(luò)的輸出,深度RNN網(wǎng)絡(luò)由此形成。RNN 的狀態(tài)更新方程。以及輸出方程為
梯度消失問(wèn)題產(chǎn)生的原因是當(dāng)前時(shí)刻的梯度往前傳播時(shí),梯度會(huì)隨著時(shí)間間隔變長(zhǎng)而變小。采用LSTM 可以很好地解決這個(gè)問(wèn)題,其內(nèi)部結(jié)構(gòu)如圖1。LSTM 采用三個(gè)門來(lái)處理輸入信號(hào)、內(nèi)部狀態(tài)以及輸出信號(hào),其中輸入門對(duì)輸入信號(hào)進(jìn)行過(guò)濾,遺忘門對(duì)上一時(shí)刻狀態(tài)進(jìn)行過(guò)濾,輸出門對(duì)輸出信號(hào)進(jìn)行過(guò)濾。幾何法求解VO 問(wèn)題時(shí),經(jīng)常會(huì)考慮集束約束(Bundle Adjustment,BA)問(wèn)題,其實(shí)就是把多幀圖片之間的約束關(guān)系考慮進(jìn)來(lái),從而提高VO估計(jì)的精度。
圖1 LSTM內(nèi)部結(jié)構(gòu)
近兩年,注意力模型在自然語(yǔ)言處理、圖像識(shí)別及語(yǔ)音識(shí)別等各種不同類型的深度學(xué)習(xí)任務(wù)中有著廣泛使用。人們對(duì)他們注意到的目標(biāo)內(nèi)部以及該場(chǎng)景內(nèi)每一處空間位置上的注意力分布是有區(qū)別的。注意力機(jī)制是一種能讓模型對(duì)重要信息重點(diǎn)關(guān)注并充分學(xué)習(xí)吸收的技術(shù)。計(jì)算機(jī)視覺中的注意力機(jī)制分為通道域注意力機(jī)制,空間域注意力機(jī)制,混合域注意力機(jī)制。本文采用的是通道域的注意力機(jī)制[13]。
對(duì)于通道域注意力機(jī)制的原理,聯(lián)系傅里葉變換我們可以從信號(hào)變換的角度理解。時(shí)頻變換可以將正弦波信號(hào)轉(zhuǎn)換成頻率信號(hào),而所有的信號(hào)都可以看成是正弦波的線性組合。在卷積神經(jīng)網(wǎng)絡(luò)中,每張RGB 圖片都由三個(gè)通道表示,在經(jīng)過(guò)不同的卷積核卷積之后,每一個(gè)通道又會(huì)生成新的信號(hào),比如對(duì)圖片特征的每個(gè)通道用64 個(gè)卷積核進(jìn)行卷積操作,就會(huì)產(chǎn)生64 個(gè)新通道的矩陣(H,W,64)??蓪⑦@64 個(gè)新通道的特征視為圖片在不同卷積核上的分量表示。產(chǎn)生的新的64 個(gè)通道對(duì)于關(guān)鍵信息的貢獻(xiàn)理論上來(lái)說(shuō)不盡相同,那么每個(gè)通道對(duì)關(guān)鍵信息貢獻(xiàn)度可以用權(quán)重來(lái)代表,權(quán)重越大,則表示相關(guān)度越高,說(shuō)明此通道需要被注意。
本文所提出的網(wǎng)絡(luò)結(jié)構(gòu)可以端到端地輸出相機(jī)位姿,主要由基于卷積神經(jīng)網(wǎng)絡(luò)的特征提取器和基于LSTM 的位姿回歸器組成。通過(guò)對(duì)特征提取模塊添加注意力機(jī)制子網(wǎng)絡(luò)使得卷積神經(jīng)網(wǎng)絡(luò)能提取到更多利于位姿估計(jì)的特征。本文的網(wǎng)絡(luò)結(jié)構(gòu)參考DeepVO[14],但在此基礎(chǔ)上做了以下改進(jìn):
1)卷積神經(jīng)網(wǎng)絡(luò)最后加了一層池化層,使得特征圖維度進(jìn)一步降低。
2)DeepVO中隨機(jī)產(chǎn)生長(zhǎng)度不同的序列作為網(wǎng)絡(luò)的輸入,而本文采取固定長(zhǎng)度輸入,序列長(zhǎng)度為超參數(shù),可以根據(jù)需要進(jìn)行調(diào)整。
3)DeepVO 中采用了兩層LSTM,本文只有一層。
4)本文的方法添加了通道域注意力模塊。
該網(wǎng)絡(luò)一共包含十層卷積,每層卷積后面都接一個(gè)非線性激活函數(shù)ReLU(Rectified linear unit)。本文在最后一層卷積層后加一個(gè)池化層,起到降低特征圖維度,減少網(wǎng)絡(luò)參數(shù)的作用,將經(jīng)過(guò)CNN 處理得到的多個(gè)10×3×1024 大小的張量拉伸為一維向量后再輸入給LSTM。所有的圖像在輸入前統(tǒng)一將尺度調(diào)整為1280×384,因?yàn)檩斎氲氖菆D像對(duì),且都為RGB圖像,所以通道數(shù)為6。
LSTM層的主要作用是讓網(wǎng)絡(luò)自動(dòng)學(xué)習(xí)連續(xù)多個(gè)姿態(tài)時(shí)序上的內(nèi)在關(guān)系,因?yàn)長(zhǎng)STM 能記住前面多幀圖片之間的幾何關(guān)系,然后再對(duì)當(dāng)前時(shí)刻的姿態(tài)進(jìn)行估計(jì),達(dá)到多幀圖片之間幾何約束的效果。因?yàn)镾igmoid 激活函數(shù)會(huì)將數(shù)據(jù)限定在(-1,1)之間,完整的網(wǎng)絡(luò)結(jié)構(gòu)如圖2所示。
圖2 CNN-LSTM網(wǎng)絡(luò)結(jié)構(gòu)圖
卷積神經(jīng)網(wǎng)絡(luò)在提取特征時(shí)對(duì)每個(gè)通道一視同仁,這顯然是不合理的?;谕ǖ烙虻淖⒁饬C(jī)制[13]通過(guò)對(duì)通道之間的相互依賴關(guān)系進(jìn)行建模,能夠自動(dòng)改變通道對(duì)特征的響應(yīng),選擇性地關(guān)注有用的特征并抑制不太有用的特征。這種子網(wǎng)絡(luò)的計(jì)算成本很低,但能給性能帶來(lái)明顯的提升。具體操作是將特征圖放到一個(gè)向量上去操作,給響應(yīng)最大的位置更多的權(quán)重。將基于通道域注意力模塊集成到本文提出的深度學(xué)習(xí)網(wǎng)絡(luò)框架中進(jìn)行端到端的訓(xùn)練。其基本結(jié)構(gòu)如圖3 所示,集成到深度學(xué)習(xí)網(wǎng)絡(luò)框架后的網(wǎng)絡(luò)結(jié)構(gòu)如圖4所示。
圖3 通道域注意力機(jī)制子網(wǎng)
圖4 添加注意力模塊的網(wǎng)絡(luò)框架
在之前的基礎(chǔ)上設(shè)計(jì)了一種網(wǎng)絡(luò)結(jié)構(gòu),通過(guò)添加約束使網(wǎng)絡(luò)更準(zhǔn)確地估計(jì)相對(duì)位姿。如圖5 所示,網(wǎng)絡(luò)結(jié)構(gòu)是左右對(duì)稱的,左邊和上文提到的網(wǎng)絡(luò)結(jié)構(gòu)一樣,而右邊結(jié)構(gòu)為左邊結(jié)構(gòu)翻轉(zhuǎn)得到,各個(gè)部分的參數(shù)共享。左右兩邊同時(shí)輸入,但右邊的輸入序列為左邊輸入序列的逆序。最后對(duì)輸出的兩個(gè)姿態(tài)一起計(jì)算誤差并優(yōu)化。
圖5 數(shù)據(jù)增強(qiáng)后的網(wǎng)絡(luò)結(jié)構(gòu)
圖6 注意力機(jī)制對(duì)性能的影響
可以把VO 估計(jì)問(wèn)題看成一個(gè)條件概率問(wèn)題:給定一個(gè)序列的圖片(I1,I2,I3…,In),計(jì)算得到這串序列中兩兩相鄰的圖片之間的相對(duì)位姿的概率:
求解最優(yōu)的網(wǎng)絡(luò)參數(shù)w使得上述概率最大化:
對(duì)于N 個(gè)序列,采用MSE(Mean Squared Error)作為誤差評(píng)價(jià)函數(shù),可以得到最終需要優(yōu)化的函數(shù):
β為尺度因子,用于保持位移誤差和轉(zhuǎn)角誤差的平衡性。
本節(jié)通過(guò)3 組實(shí)驗(yàn)驗(yàn)證了本文設(shè)計(jì)的基于通道域注意力機(jī)制的視覺里程計(jì)網(wǎng)絡(luò)的有效性,第1組實(shí)驗(yàn)致力于比較添加注意力模型對(duì)網(wǎng)絡(luò)性能的影響。第2 組實(shí)驗(yàn)對(duì)不同方法性能進(jìn)行了比較,包括傳統(tǒng)方法VISO2_M 和VISO2_S,以及基于深度學(xué)習(xí)的方法DeepVO。第3 組實(shí)驗(yàn)致力于驗(yàn)證本文方法在不同數(shù)據(jù)集上的有效性。
4.1.1 KITTI數(shù)據(jù)集
KITTI Visual Odometry[15]是目前自動(dòng)駕駛領(lǐng)域最重要的測(cè)試集之一,該數(shù)據(jù)集提供了很多基準(zhǔn)如立體評(píng)估、光流估計(jì)、深度估計(jì)等。KITTI數(shù)據(jù)集還可以廣泛用于評(píng)估各種VO 或者視覺SLAM 算法。KITTI VO benchmark 共包含22 個(gè)場(chǎng)景序列。其中前11 個(gè)場(chǎng)景還包含汽車行駛軌跡的真值,本文方法只需用到雙目圖像中的單目圖像。
和DeepVO 一樣,將序列00,01,02,08,09 作為訓(xùn)練集,序列03,04,05,06,07,10作為測(cè)試集。
4.1.2 Microsoft 7-Scenes數(shù)據(jù)集
Microsoft 7-Scenes[16]是一個(gè)由手持Kinect RGB-D 相機(jī)在7 個(gè)不同的室內(nèi)辦公場(chǎng)景中采集的RGB-D 圖像組成的數(shù)據(jù)集。并使用KinectFusion獲取真實(shí)位姿。每個(gè)場(chǎng)景包含若干運(yùn)動(dòng)方式不同的序列,在室內(nèi)存在運(yùn)動(dòng)模糊、感知混疊以及無(wú)紋理的情況。
本實(shí)驗(yàn)采用一塊英偉達(dá)泰坦顯卡(NVIDIA TITAN X Pascal GPU)來(lái)訓(xùn)練和測(cè)試網(wǎng)絡(luò)。通過(guò)深度學(xué)習(xí)框架Pytorch 進(jìn)行相關(guān)算法的設(shè)計(jì)。優(yōu)化方法為批量梯度下降法(Batch Gradient Descent),其它參數(shù)詳情見表1。
表1 網(wǎng)絡(luò)超參數(shù)設(shè)置
目前在KITTI VO/SLAM 數(shù)據(jù)集上最常用的評(píng)價(jià)指標(biāo)有四種:不同長(zhǎng)度子序列的平均旋轉(zhuǎn)誤差(Translation errors for subsequences)和平均平移誤差(Rotation errors for subsequences),以及不同時(shí)速下的平均平移誤差(Translation errors for different speeds)和平均旋轉(zhuǎn)誤差(Rotation errors for different speeds)。
4.3.1 注意力模型對(duì)性能的影響
本文測(cè)試的網(wǎng)絡(luò)分別為基于深度學(xué)習(xí)的視覺里程計(jì)方法CNN-LSTM-VO 和在此基礎(chǔ)上添加了通道域注意力模型的視覺里程計(jì)方法Deep-CA-VO,以及經(jīng)過(guò)數(shù)據(jù)增強(qiáng)后的網(wǎng)絡(luò)Deep-CA-VO-cons。不同網(wǎng)絡(luò)測(cè)試后的軌跡對(duì)比圖如6所示,其中g(shù)t表示位姿標(biāo)簽。
針對(duì)常用的前兩種評(píng)價(jià)指標(biāo),在不同長(zhǎng)度序列(100m,200m,…,800m)上計(jì)算平移矢量和旋轉(zhuǎn)量的均方誤差,計(jì)算其均值并以此作為視覺里程計(jì)方法的精度指標(biāo)。具體數(shù)值如表2 所示。從表中可以看到添加了注意力機(jī)制后,網(wǎng)絡(luò)對(duì)旋轉(zhuǎn)的估計(jì)精度提高較對(duì)平移估計(jì)精度提高更顯著。
表2 注意力機(jī)制有無(wú)在04,07,10序列上的誤差
4.3.2 與其它方法的性能比較
本節(jié)選擇主流的三種方法VISO2-M,VISO2-S,DeepVO 與添加了注意力模塊且經(jīng)過(guò)數(shù)據(jù)增強(qiáng)網(wǎng)絡(luò)DeepCA-VO-cons 進(jìn)行對(duì)比。前兩種是主流的傳統(tǒng)方法,區(qū)別在于VISO2-M 是單目視覺里程計(jì)方法,而VISO2-S 是雙目視覺里程計(jì)方法。而DeepVO 是近期提出解決視覺里程計(jì)問(wèn)題主流的深度學(xué)習(xí)框架。如表3 所示,顯示了不同方法在不同序列下平均平移和旋轉(zhuǎn)誤差的RMSE。圖7是不同方法在序列07 上的軌跡圖。在不同路徑長(zhǎng)度下,本文提出的方法優(yōu)于VISO2-M,與DeepVO 性能接近,分析原因是DeepVO 使用了兩層LSTM,因此對(duì)序列依賴關(guān)系的學(xué)習(xí)能力更強(qiáng)。而VISO2-S用到了雙目圖像,性能普遍比單目視覺里程計(jì)方法要好。
表3 不同方法性能對(duì)比
圖7 與其它方法的性能比較
4.3.3 在Microsoft 7-Scenes數(shù)據(jù)集上的結(jié)果分析
本節(jié)選擇用Fire,Office,RedKitchen 以及Stairs場(chǎng)景下的序列作為訓(xùn)練集,其余Chess,Heads,Pumpkin 場(chǎng)景下的序列作為測(cè)試集。由于室內(nèi)數(shù)據(jù)集上的平移分量較室外數(shù)據(jù)集上的小,因此在訓(xùn)練過(guò)程中降低了損失函數(shù)中旋轉(zhuǎn)與平移分量權(quán)重因子β的值。圖8顯示了Chess場(chǎng)景下seq-02上估計(jì)的軌跡結(jié)果。結(jié)果表明本文提出的方法在不同場(chǎng)景下也具有可用性。
圖8 在chess場(chǎng)景seq-02上的軌跡估計(jì)結(jié)果
本文提出了一種新的端到端的基于深度學(xué)習(xí)并融入通道域注意力機(jī)制視覺里程計(jì)算法。通過(guò)融合基于通道域的注意力機(jī)制,使得網(wǎng)絡(luò)模型能夠?qū)W到更多有用的特征,相比于傳統(tǒng)算法,具有更準(zhǔn)確的結(jié)果,同時(shí)摒棄了相機(jī)標(biāo)定,特征提取等復(fù)雜過(guò)程。在不同場(chǎng)景下具有實(shí)用性,且具有較高的穩(wěn)定性。相比于其它的基于深度學(xué)習(xí)的網(wǎng)絡(luò),其復(fù)雜度低,對(duì)硬件要求相對(duì)較低。下一步的工作將考慮增加樣本空間,提高位姿估計(jì)效果,更好地應(yīng)對(duì)測(cè)試集中樣本多樣性增多的情況。考慮采用輕量化網(wǎng)絡(luò),減少網(wǎng)絡(luò)參數(shù),加快網(wǎng)絡(luò)訓(xùn)練速度,拓展其應(yīng)用前景。