陳青梅,秦 進,黃仁婧,崔 虎,黃初華
(貴州大學 計算機科學與技術學院,貴州 貴陽 550025)
視覺SLAM以攝影機作為傳感器,以圖像作為主要環(huán)境感知信息源的SLAM系統(tǒng),作為當今前沿技術之一,在AR/VR、移動機器人等新興領域都具有廣泛的應用。但目前大多數(shù)視覺SLAM參數(shù)都是通過多次實驗得到的經(jīng)驗值,在實際應用中采用固定的參數(shù)配置,當改變傳感器或場景時需重新調整參數(shù),這對于非專業(yè)的用戶來說是一件相對耗時的工作。針對該問題,研究者們提出了多種自適應調整參數(shù)的方法來提高視覺SLAM的定位精度和魯棒性。如Khalufa等[1]提出一種視覺SLAM輕量級動態(tài)控制策略,該策略依賴攝影機運動來自適應調整算法和計算設備的控制參數(shù),可以實現(xiàn)動態(tài)控制參數(shù)的效果,但算法沒有考慮場景信息,在算法運行時位姿跟蹤精度和魯棒性有所降低。Kuo等[2]提出一個自適應SLAM算法,該算法可適用于多個攝影機位的設置并根據(jù)攝影機之間的幾何關系來在線選擇最合適的初始化方法,在魯棒性方面有所提高,但跟蹤精度提升不明顯且增加視覺前端的設計復雜度。以上方法是從傳感器的角度來考慮問題,對算法自身參數(shù)的自適應調整沒有過多研究,此外,這些算法在精度、魯棒性方面還有一定的提升空間。
為解決上述問題,需研究一種既考慮環(huán)境信息又不丟失精度和魯棒性的視覺SLAM參數(shù)自適應調整方法,保證視覺SLAM算法在變化環(huán)境下的位姿軌跡精度和泛化能力。
主流的視覺SLAM通常分為3類:基于特征點、基于光流法和基于直接跟蹤的SLAM。基于直接法[3]和光流法[4]的SLAM通過比較像素的亮度信息來估計相機運動,不用計算關鍵點和描述子,節(jié)省了特征提取和匹配的大量時間,在特征點缺失或光照變化不明顯的場景下能取得不錯的估計效果?;谔卣鼽c的SLAM算法主要通過對圖像進行特征點檢測,并借助2D或3D的特征點匹配,利用多視圖幾何原理來計算攝影機位姿以及構建環(huán)境地圖。其中,具有代表性工作的是Raul Mur-Artal等提出的ORB_SLAM[5],它是一種基于ORB(oriented FAST and rotated,BRIEF)特征的三維定位與地圖構建算法,也是目前性能最好的單目視覺SLAM系統(tǒng)之一,其改進版本ORB_SLAM2[6]加入了雙目和RGB-D模式,進一步提高系統(tǒng)對不同傳感器配置的適應能力。當前,最佳的是2020年Campos等[7]提出的ORB_SLAM3,該系統(tǒng)除了包含ORB_SLAM和ORB_SLAM2的共有模塊位姿跟蹤、建圖、重定位、閉環(huán)檢測以外,新增了基于最大后驗估計的IMU融合算法、魚眼相機模型和多地圖模式。此外,ORB_SLAM3是一個多地圖系統(tǒng),跟蹤丟失時,它會啟動一個新的地圖,當重新訪問地圖區(qū)域時,它將與以前的地圖無縫地合并,與只使用最后幾秒信息的視覺里程計系統(tǒng)相比,ORB_SLAM3是一個在所有算法階段能重用先前所有信息的系統(tǒng)。
上述視覺SLAM大多是以配置文件的形式來加載參數(shù),參數(shù)閾值是固定的,當切換到新的場景時,位姿估計精度和魯棒性等易受固定參數(shù)閾值的影響?;诖?,近幾年來部分研究者將深度強化學習方法應用在參數(shù)自適應上,試圖通過端到端的方式來解決復雜的參數(shù)控制問題。如Huang等[8]提出一種特征跟蹤自適應的方法,用強化學習的思想選擇可以判斷跟蹤結果的特征層。Bhowmik等[9]提出一種新的訓練方法,該方法將特征檢測器嵌入完整的視覺管道中,并以端到端的方式訓練可學習的參數(shù),使用強化學習的方法克服了關鍵點選擇和描述符匹配的離散性。Wang等[10]提出一種基于深度強化學習的移動機器人路徑規(guī)劃方法,該方法采用雙深度Q網(wǎng)絡[11](double deep Q-network,DDQN)算法對機器人的狀態(tài)和相應動作進行回歸預測以求得最優(yōu)策略和最優(yōu)路徑。
本文受深度強化學習自適應特征提取和決策能力的啟發(fā),針對ORB_SLAM3算法中參數(shù)調整問題,引入深度強化學習中的深度循環(huán)Q網(wǎng)絡[12](deep recurrent Q-network,DRQN),提出了一種基于DRQN的視覺SLAM參數(shù)自適應調整方法。該方法有望解決視覺SLAM中復雜的參數(shù)調整問題。
在計算機視覺領域, 常見的SLAM不確定度描述方法有兩種:第一種是基于熵的方法[13],在SLAM問題中,常常把位姿和路標看成服從某種概率分布的隨機變量,通常用熵來表示隨機變量的不確定性。第二種是基于協(xié)方差矩陣的方法[14],SLAM中通過建立地標點的空間不確定性模型來提高傳感器軌跡估計的精確度,并證明了以協(xié)方差矩陣的形式傳播不確定性可以減少位姿估計的不確定性。
(1)
DRQN結合了長短期記憶網(wǎng)絡(long short-term memory,LSTM)來循環(huán)記憶信息,在不完整且?guī)г氲挠^測信息情況下能獲得較好的實驗效果。
受深度強化學習感知決策能力及LSTM記憶信息能力的啟發(fā),針對傳統(tǒng)視覺SLAM手動調參及視頻幀序列帶噪問題,采用改進的DRQN作為本文算法迭代學習的主要網(wǎng)絡架構,以便更好處理由飛行器采集速度過快或光照變化過強導致的模糊視頻幀序列。此外,為驗證本文方法的有效性,采用了ORB_SLAM3算法作為深度強化學習下的環(huán)境。下面將從構建動作空間、獎勵函數(shù)、算法整體結構及網(wǎng)絡模型來講解本文方法的具體實現(xiàn)過程。
構建動作空間的設計思路為篩選出ORB_SLAM3算法中的參數(shù),并賦予參數(shù)合適的取值范圍,整個動作空間中的動作由各參數(shù)值間的組合構成。在本文中,選取的參數(shù)有:金字塔尺度因子P1、 金字塔層數(shù)P2和最近鄰閾值P3, 通過對算法及前期參數(shù)實驗分析,給3個參數(shù)賦予取值范圍P1∈{1.10,…,1.40}、P2∈{2,…,8}、P3∈{0.60,…,0.90}, 且動作空間的總容量m為3個參數(shù)各取值空間大小的乘積,動作空間可表示為A
A=(a1,a2,…,am)
其中,一個ai為一個動作,每個動作包含P1、P2、P3這3個參數(shù),記為ai=(P1,P2,P3),i=1,2,…,m。
在基于擴展卡爾曼濾波的視覺SLAM中,引入系統(tǒng)協(xié)方差P(x|x) 作為當前狀態(tài)下系統(tǒng)的不確定性[16],不確定度可量化為系統(tǒng)協(xié)方差矩陣主對角線上前3個值的和,如式(2)所示
P(x|x)=P(x|x)11+P(x|x)22+P(x|x)33
(2)
本文將每幀圖像地標點的平均不確定度值作為每次算法運行下環(huán)境返回給智能體的信號(記為g),設環(huán)境的獎勵值為r,由于算法的目的是使不確定值越來越小,故獎勵函數(shù)設為r=1-g。
本文算法結構主要由DRQN和ORB_SLAM3算法構成,如圖1所示,ORB_SLAM3初始化成功后,通過計算初始化后第一幀圖像的不確定度gt得到獎勵值r, 并將其傳入DRQN,DRQN讀取該獎勵值對應的視頻幀,將該幀圖像處理后構成狀態(tài)向量st作為DRQN算法評估網(wǎng)絡的輸入,評估網(wǎng)絡得到該狀態(tài)下每組參數(shù)(即每個動作)的Q(st,a) 值,算法根據(jù)ε-greedy策略來輸出動作作為下一次運行的調整參數(shù)。
圖1 DRQN參數(shù)自適應調整算法框架
強化學習的目標是盡可能獲得更大的獎勵,而在DRQN參數(shù)自適應調整算法中即為找到每幀圖像的最佳參數(shù)組合使其位姿跟蹤不確定度越來越小。在t時刻,ORB_SLAM3執(zhí)行動作at之后產(chǎn)生的經(jīng)驗為 (st,at,rt,st+1),st代表當前t時刻的狀態(tài),at代表t時刻執(zhí)行的動作,rt代表執(zhí)行動作at獲得的即時獎勵,st+1表示在t時刻執(zhí)行動作at之后的狀態(tài),每循環(huán)一次將經(jīng)驗保存到經(jīng)驗回放池,當算法需要進行學習訓練時,從經(jīng)驗回放池中隨機選擇一個序列并從序列中的隨機點開始反向選取n個時間步長進行學習(n可以為1),本文n取值為9,在每一次更新前需要將LSTM隱含層的狀態(tài)置為0。隨機選取序列和時間步破壞了樣本間的連續(xù)性,使得訓練更加有效,同時經(jīng)驗池的經(jīng)驗序列達到容量上限以后,新的經(jīng)驗序列將覆蓋已有的經(jīng)驗序列。
DRQN采用了兩個結構相同,參數(shù)不同的神經(jīng)網(wǎng)絡達到更新網(wǎng)絡參數(shù)的目的,即評估網(wǎng)絡和目標網(wǎng)絡。評估網(wǎng)絡為訓練網(wǎng)絡,每隔N時間步訓練之后,將評估網(wǎng)絡的參數(shù)拷貝給目標網(wǎng)絡。整個網(wǎng)絡的目標函數(shù)(即損失函數(shù))如式(3)所示,y為目標網(wǎng)絡計算出來的Qtarget(st+1,at+1) 目標值,如式(4)所示,Qeval(st,at;θ) 為評估網(wǎng)絡得到的預測值,即為需優(yōu)化的值,θ為網(wǎng)絡模型參數(shù)。損失函數(shù)定義為預測值和目標值的均方差,同時采用均方根反向傳播(root mean square prop,RMSProp)算法對損失進行優(yōu)化
loss(θ)=E[(y-Qeval(st,at;θ))2]
(3)
y=r+γmaxat+1Q(st+1,at+1;θ-)
(4)
其中,r為獎勵值,γ為折扣因子,γ∈[0,1]。 接下來對θ求偏導
(5)
DRQN模型除了繼承深度強化學習從感知到?jīng)Q策的優(yōu)點以外,它在缺失狀態(tài)信息的情況下,具有很強的適應性和魯棒性。盡管在每個時間步中僅看到單個幀,但該模型仍能跨幀集成信息以檢測完整的狀態(tài),故選擇該DRQN模型作為本文算法的模型結構。
DRQN網(wǎng)絡結構主要由3個卷積層,1個LSTM層及1個全連接層組成,且評估網(wǎng)絡和目標網(wǎng)絡結構相同如圖2所示,首先將圖像等比例采樣到大小為84×84的圖像且進行灰度化處理,然后將預處理后的圖像輸入到DRQN中卷積3次;接著將卷積層的輸出送到LSTM層中進行處理;最后,全連接層為每個可能的動作輸出Q值。
圖2 DRQN模型結構
(1)卷積層
將處理后的單張84×84大小的圖片I送入3個卷積層中,3個卷積層均并采用Relu激活函數(shù)進行激活,從表1和圖2可知,第一個卷積層在輸入圖像上用32個8×8濾波器進行卷積(步幅為4);第二個卷積層使用64個4×4濾波器進行卷積(步幅為2);第三個卷積層使用64個3×3濾波器進行卷積(步幅為1);卷積輸出被傳送到全連接的LSTM層。
表1 網(wǎng)絡模型參數(shù)細節(jié)
(2)LSTM層
LSTM是一種改進的RNN,相比一般網(wǎng)絡,它能夠更好處理序列數(shù)據(jù)及解決訓練過程中的梯度爆炸和梯度消失問題。于DRQN而言,將LSTM和卷積層結合能將視頻幀序列在時間和空間特征上進行更完整的學習,其內部結構如圖3所示。
圖3 LSTM內部結構
在輸入LSTM前需將7×7×64的特征圖進行降維處理再輸入到該層。其內部結構如式(6)所示
(6)
(3)全連接層
全連接層主要用來線性輸出每個動作的Q值,在本算法中,所有動作為3.1節(jié)中的動作空間A, 動作總數(shù)為m=10 500, 一個動作即為選取的3個參數(shù)的組合。
實驗所用的環(huán)境配置為英特爾酷睿i5-6400,最高睿頻3.3 GHz,4核4線程處理器,16 G內存,操作系統(tǒng)為ubuntu16.04,Tensorflow1.12版,Python3.6版。
視覺SLAM參數(shù)自適應調整方法有3個關鍵參數(shù):金字塔尺度因子P1、金字塔層數(shù)P2和最近鄰閾值P3,在ORB_SLAM3算法中設置為固定的經(jīng)驗值,分別為1.2/8/0.9。金字塔層數(shù)主要用于解決SLAM中尺度不變形問題,決定了提取關鍵點的數(shù)量,尺度因子決定了金字塔層間的縮放比例,最近鄰閾值指最佳匹配和次佳匹配的特征點評分比值閾值,用于篩選匹配點,通常值越小匹配就越苛刻。
為對比不同參數(shù)對全局位姿軌跡精度的影響,表2為6組不同參數(shù)組合下ORB_SLAM3算法在EuRoC部分序列集下的絕對軌跡誤差中均方根誤差(root mean square error,RMSE)結果。由表2前三行數(shù)據(jù)可知,在同一序列集下,固定參數(shù)P2,P3, 參數(shù)P1對算法精度的影響是不穩(wěn)定的,后三行數(shù)據(jù)為固定參數(shù)P1,P3觀察P2對算法精度的影響,從實驗數(shù)據(jù)也可以得出類似的結論,因此,對于不同序列集而言,算法中采用同一組固定參數(shù)不一定是最優(yōu)的。
表2 EuRoC序列集在不同參數(shù)組合下的絕對位姿誤差,RMSE/m
為觀察P1和P3兩個參數(shù)對每幀圖像位姿跟蹤精度的影響,算法訓練過程中隨機提取連續(xù)的200幀圖像來觀測地標點平均不確定度g變化情況,如圖4所示,從散點的分布情況可知,當每幀圖像根據(jù)自身狀態(tài)選取合適的參數(shù)組合時可以減小該幀的位姿跟蹤不確定度。
圖4 地標點平均不確定度g的散點
4.2.1 EuRoC數(shù)據(jù)集
EuRoC數(shù)據(jù)集[17]包含Machine Hall(MH)、Vicon Room1(VR1)和Vicon Room2(VR2)等11個序列集。訓練數(shù)據(jù)采用等級為difficult VR103。測試數(shù)據(jù)選用EuRoC數(shù)據(jù)集中除了訓練序列集以外的其它序列集。
為測試本文算法的有效性,將實驗結果與DSM[18]、ORB_SLAM3和DSO[19]算法作定位精度對比。DSM是一種基于光度束調整(photometric bundle adjustment,PBA)的單目視覺SLAM,ORB_LAM3算法為西班牙薩拉戈薩大學提出的基于特征點法的視覺SLAM,DSO為典型的基于直接法的SLAM。表3為采用EuRoC除訓練序列集之外的其它序列集測試得到的絕對軌跡誤差的RMSE結果,為保持與文獻[7]一致的評估準則,該數(shù)據(jù)集的實驗結果取為反復測試10次后的中位數(shù)。
表3 EuRoC數(shù)據(jù)集的絕對軌跡誤差,RMSE/m
從實驗結果來看,本文算法相比于其它3種算法在大部分序列集上位姿跟蹤精度有了一定的提升,而在個別序列集上效果卻一般(如MH04),此外,我們可以發(fā)現(xiàn)次佳結果由DSM獲得,可能原因是該算法也采用ORB_SLAM3的中期匹配方法。DSO是一種基于直接法的SLAM,與其它方法相比,該算法是基于灰度不變假設下成立的,容易受光照影響,故位姿跟蹤效果不明顯。圖5(a)、圖5(c)為在EuRoC的序列集MH01和MH03下,本文算法、ORB_SLAM3和真實軌跡(ground_truth)在xy軸上的位姿軌跡對比圖,圖5(b)、圖5(d)分別為圖5(a)、圖5(c)對應的軌跡平移細節(jié),從軌跡對比圖和表3的數(shù)據(jù)來看,本文算法估計的軌跡相對于ORB_SLAM3算法而言離真實軌跡更近,偏差更小。
4.2.2 TUM-VI數(shù)據(jù)集
TUM-VI數(shù)據(jù)集[20]包含6種不同場景的28序列組成,本文使用該數(shù)據(jù)集中的Room和Corridor序列集進行實驗。該部分實驗的訓練數(shù)據(jù)采用Room6,測試數(shù)據(jù)選用除訓練序列集之外的其它序列集。
表4為在TUM-VI數(shù)據(jù)集的部分序列集下本文方法與ORB_SLAM3、VINS-Mono[21]和ROVIO[22]算法的絕對位姿誤差的RMSE對比結果,實驗結果為反復測試10次后的中位數(shù),其中VINS-Mono為基于緊耦合的單目視覺慣性定位算法,ROVIO是基于迭代卡爾曼濾波的魯棒視覺慣性里程計,這兩種算法的實驗數(shù)據(jù)由文獻[20]給出。
圖5 EuRoC部分序列集的位姿軌跡對比
表4 TUM-VI數(shù)據(jù)集的絕對軌跡誤差,RMSE/m
圖6 TUM-VI部分序列集的位姿軌跡及絕對位姿誤差對比
從實驗結果可知,本文算法在Room和Corridor兩個序列集上都略優(yōu)于其它算法,ROVIO算法計算量小且具有魯棒的定位,但該算法沒有閉環(huán)檢測模塊,在定位時存在誤差累積,故在大部分序列集上表現(xiàn)不佳。圖6(a)、圖6(c)為在TUM-VI的序列集Corridor1和Room1下,本文算法、ORB_SLAM3和真實軌跡(ground_truth)在xy軸上的位姿軌跡對比圖,圖6(b)、圖6(d)分別為圖6(a)、圖6(c)對應的絕對位姿誤差,從位姿軌跡和絕對位姿誤差的RMSE值來看,由本文算法得到的位姿軌跡精度相比ORB_SLAM3也是有一定提升的。
在同等運行環(huán)境配置下,通過記錄算法在EuRoC和TUM-VI部分序列集上的運行時間來比較ORB_SLAM3和本文算法的運行速度,取值為連續(xù)3次運行時間的平均值。如表5所示,由于本文算法在運行過程中需動態(tài)加載參數(shù)和計算地標點的平均不確定度值,故相對于ORB_SLAM3算法而言總體耗時稍微有所增加,但對于部分序列集來說平均運行時間幾乎是一致的。
針對視覺SLAM算法復雜的參數(shù)調整問題,本文提出了一種基于DRQN的視覺SLAM參數(shù)自適應調整方法。該方法將ORB_SLAM3作為環(huán)境,并以地標點的不確定性構建獎勵函數(shù),以求在不斷迭代學習過程中獲得最大回報獎勵,從而提高ORBLAM3的位姿跟蹤精度和泛化能力。實驗結果表明,該方法相比傳統(tǒng)人工設定經(jīng)驗值的方法有明顯優(yōu)勢,雖然測試時間相比原來算法略有增加,但從跟蹤精
表5 EuRoC和TUM-VI部分序列集的運行時間對比/s
度和泛化性上來看有一定的提升,且避免了傳統(tǒng)視覺SLAM算法的復雜參數(shù)調整過程,故可以作為視覺SLAM領域參數(shù)自適應調整的一種有效方法。
目前本文的方法主要應用在單目上,且采用機房、辦公室等室內數(shù)據(jù)集,后期將針對不確定模型及獎勵函數(shù)的設計進行優(yōu)化,并將傳感器擴展到雙目、RGB-D,且針對室外環(huán)境對ORB_SLAM3和DRQN算法進行改進。