張國棟
(武侯中學(xué),四川成都,610000)
首先機器人以一定的時間間隔、一定的角度姿態(tài)拍攝圖像。 得到圖像后,先利用FAST提取圖像中的關(guān)鍵點,取以關(guān)鍵點為圓心一定半徑的圖像塊,提取出來的圖像塊輸入已經(jīng)訓(xùn)練好的深度學(xué)習(xí)網(wǎng)絡(luò),得到其描述符。輸出圖像塊描述符,用其描述符與上一幅圖像提取出的描述符進行最近鄰匹配,由公式1得,利用匹配點計算出相鄰兩幀圖片之間的相對位姿?;谏疃葘W(xué)習(xí)的場景識別方法在表征一篇圖片時可以大大節(jié)約空間資源,在匹配過程中的速度也能有效提高,在構(gòu)建場景識別的深度學(xué)習(xí)網(wǎng)絡(luò)過程中我們使用三個結(jié)構(gòu)完全相同,全職共享的CNN網(wǎng)絡(luò),用AlexNet提取圖像的特征之后,計算參考幀和同類幀以及異類幀之間的距離,通過距離比較器和反向傳播訓(xùn)練出一個深度學(xué)習(xí)模型。在實際使用時,我們使用一個net生成的全局描述符即可。如果檢測到匹配幀則對誤差就行修正。
人工智能現(xiàn)階段的導(dǎo)航依靠坐標位置并不能有效完成,但視覺SLAM中的三維地圖或網(wǎng)格地圖都只能進行基本的路徑規(guī)劃功能,所以,我們要運用深度學(xué)習(xí)構(gòu)建語義地圖,來為機器人提供語義信息以輔助其導(dǎo)航。
在視覺SLAM中構(gòu)建語義地圖主要運用的是全卷積網(wǎng)絡(luò)。這與傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)不同,將全連接層改成卷積層,以將圖像中各個像素區(qū)分開來,機器人要通過此來找準圖中每個像素對應(yīng)的是實際場景中的哪個物體,從而規(guī)劃出準確的導(dǎo)航路線。語義地圖是在三維坐標系中構(gòu)建的,需要在坐標系中算出其位置,經(jīng)變換,映射到初始坐標系中構(gòu)成語義地圖。人工智能就依靠此更加精確地運作。
二十世紀六十年代Slam技術(shù)第一次被提出到現(xiàn)在歷經(jīng)七十年的發(fā)展已經(jīng)取得了矚目的成就,特別是在二十一世紀初,其基本框架已開始成型。2007年,MonoSLAM系統(tǒng)[1]將擴展卡爾曼濾波應(yīng)用到了后端優(yōu)化中來減少累積誤差[2]實現(xiàn)了slam系統(tǒng)在環(huán)境中實時定位并構(gòu)建地圖??紤]到視覺傳感器的結(jié)構(gòu)與人類的眼睛類似,所以基于視覺傳感器的slam在室內(nèi)外環(huán)境中應(yīng)用較多。
國內(nèi)對于語義地圖方向的研究起步較晚北京科技大學(xué)首先完成了語義地圖的建立,但采用了不正確的檢測物體的方式,直接導(dǎo)致計算量過大。隨后,中國科技大學(xué)完成了其中兩個部分,場景識別和場景中物體的識別。
傳統(tǒng)的室內(nèi)機器人在移動過程中,需要依靠周圍的幾何信息定位,它們可以在基于視覺傳感器的salm下運行。但他們忽略了環(huán)境中極其豐富的語義信息,這是未來服務(wù)機器人構(gòu)建語義地圖中不可缺少的信息。
首先可以把一個光源看成由許多小發(fā)光點組成,每個發(fā)光點都朝著周圍空間發(fā)射著光??倳幸皇夤P直地穿過小孔,在白紙上形成一個小光斑。每一個發(fā)光點形成一個光斑,所以在白紙上就形成了由所有的光斑聚成的像,如圖1所示。
從圖中可以看到,A,B部分的光沿直線通過小孔,照在屏幕的C處,當孔較大時,A,B部分發(fā)出的光線會在屏幕C處重疊,故像不會清晰;當孔相當大時,光線不會到達一處,光信息會發(fā)生混亂,所以無法成像;當孔較小時,空的上下沿會遮住光的傳播路徑,物體不同部分的光會到達屏幕上的不同部分,而不會相互重疊,所以成的像會比較清晰。
圖1 小孔成像原理圖
所以如果孔的大小變大,那么成像的分辨率會下降,反之則會上升,即小孔成像的分辨率與像的清晰度成正比,與孔的大小呈反比(與物距相距均有關(guān),但本文不做討論)。
相機成像的模型的過程實際是將三維空間還原成二維平面的一個過程,可簡單用小孔成效模型描述此過程,如圖2所示。
(1)首定義兩個坐標系:相機坐標系(三維坐標系)—以相機焦點為原點和坐標軸X,Y,Z圖像坐標系(二維坐標系)—以成像平面的中心O為坐標原點和坐標軸x,y。
圖2 小孔相機模型
(2)小孔成像實際就是將相機坐標系中的三維坐標,變換到成像平面中的二維坐標。假設(shè)三維空間中存在某點P,在相機坐標系中的坐標為[X,Y,Z]其成像。
由于手動設(shè)計出來的描述符很難確定參數(shù)配置,手動設(shè)計出的描述符很難同時具備較高的不變性、緊密型和獨特性。近些年來局部不變描述符研究領(lǐng)域的一大熱點是研究學(xué)者把機器學(xué)習(xí)的方法用于描述符的設(shè)計。因為機器學(xué)習(xí)的局部描述符具有獨特的優(yōu)勢:可以利用訓(xùn)練數(shù)據(jù)學(xué)習(xí)最佳的參數(shù)配置和復(fù)雜模式。在本系統(tǒng)中,我們先用FAST提取特征點,然后再用深度網(wǎng)絡(luò)計算這些特征點的描述子。
我們構(gòu)建場景識別系統(tǒng)的深度學(xué)習(xí)網(wǎng)絡(luò)如圖3所示,圖中的三個net為CNN網(wǎng)絡(luò),這三個網(wǎng)絡(luò)結(jié)構(gòu)完全相同,權(quán)值共享。圖中的x為參考幀,x+為同類幀,x-為異類幀,同類幀即與參考幀相似的圖片,異類幀是與參考幀不同的圖片。具體到我們的系統(tǒng)中,參考幀為一個具體的位置所拍攝的圖片,同類幀這個位置臨近區(qū)域內(nèi)拍攝的圖片,而異類幀則是離這個位置比較遠的地點拍攝的圖片。
在本文中我們使用AlexNet作為整幅圖像的特征提取器,在獲得三張圖像各自的特征之后,我們分別計算了x和x+之間的距離d+即圖中的同理可得d-。通過一個距離比較器和反向傳播我們可以訓(xùn)練出一個場景識別的深度學(xué)習(xí)模型。在實際使用網(wǎng)絡(luò)的時候,我們只需要使用一個net生成圖像對應(yīng)的全局描述符即可。
圖3 場景識別網(wǎng)絡(luò)結(jié)構(gòu)
其中L為損失函數(shù),dij輸入的兩個特征點對應(yīng)的描述符之間的距離,sij為1是表明輸入的是兩個相似的特征點對應(yīng)的圖像塊,而sij為0是表明輸入的是兩個不相似的特征點對應(yīng)的圖像塊。α為不相似的描述符之間的最小距離。
損失函數(shù)的圖像如圖4所示,當不相似的描述符之間的距離小于α的時候,損失函數(shù)大于0,網(wǎng)絡(luò)將進行訓(xùn)練,反之表明網(wǎng)絡(luò)已經(jīng)滿足要求。
圖4 損失函數(shù)曲線
在訓(xùn)練完成之后,我們將不再需要兩個網(wǎng)絡(luò),我們只需要使用一個網(wǎng)絡(luò)來提取描述符。大量的前期工作表明這種方式訓(xùn)練得到的描述符遠遠由于手工提取的描述符,為了達到實時性的要求,我們使用GPU進行加速,因此完全可以滿足機器人對實時性的要求。
回環(huán)檢測是SLAM系統(tǒng)中非常重要的部分,由于我們在逐幀計算位姿的時候會有一定誤差,隨著時間的積累這個誤差會變得越來越大,因此我們必須通過一定的手段來消除這種誤差[3]。目前比較通用的便是回環(huán)檢測,所謂回環(huán)檢測就是一個場景識別系統(tǒng),場景識別系統(tǒng)可以識別出來相同或者相近的地點。具體到機器人中,當機器人運動一段時間后又回到之前來過的地方,由于計算位姿的累積誤差,所以機器人計算到的位置和原來的位置并不相同,那么此時我們可以通過回環(huán)檢測重新計算兩個回環(huán)匹配幀之間的位姿從而消除這種誤差。
傳統(tǒng)的回環(huán)檢測主要是利用局部描述符構(gòu)建了一個視覺詞袋,由于局部描述符有著各種局限性所以這樣方式構(gòu)建的回環(huán)檢測系統(tǒng)具有很多問題,比如對于光照變化,視角變化,環(huán)境變化不夠魯棒,此外視覺詞袋規(guī)模較大,在系統(tǒng)運行的過程中需要加載到內(nèi)存中,消耗了大量的資源。基于深度學(xué)習(xí)的場景識別可以有效地克服視角,光照和環(huán)境等變化,此外由于基于深度的場景識別可以生成全局的描述符,因此表征一幅圖片可以用更少的空間,大大節(jié)約了資源,在匹配階段也可以加快速度。因此在本文中我們將使用基于深度學(xué)習(xí)的場景識別系統(tǒng)來進行回環(huán)檢測。
所謂場景識別系統(tǒng),即將高維空間的圖像映射成一個維度較低的空間中的描述符,映射過程中我們需要低維度的描述符可以保持圖像之間的相似關(guān)系。因此我們采用triplet形式的損失函數(shù)來對網(wǎng)絡(luò)進行訓(xùn)練。我們?yōu)樘崛〉降臉颖咎卣鬟x取鄰近的同類樣本特征和鄰近的異類樣本特征,以此來構(gòu)建一個三元組,對于N個訓(xùn)練樣本,可以隨機產(chǎn)生大量的三元組,本文涉及到的基于三元組約束的距離度量學(xué)習(xí)模型(point to point Relative Distance Constrained Metric Learning,RDCML)要求同類樣本特征的距離和異類樣本特征的距離被一個大的間隔分開。基于上述的描述,我們的損失函數(shù)為如下公式,其中α為正負樣本之間的間隔,即正樣本之間的距離要比負樣本之間的距離小α以上。在訓(xùn)練過程中α由人為指定,α越小網(wǎng)絡(luò)越容易收斂,然而效果會比較差,α越大網(wǎng)絡(luò)越難收斂會導(dǎo)致訓(xùn)練時間變長甚至不收斂,但是效果會比較好,因此我們需要在訓(xùn)練過程中對訓(xùn)練時間和精度進行權(quán)衡。
基于深度學(xué)習(xí)的SLAM系統(tǒng)如圖5所示,首先機器人以一定的時間間隔、一定的角度姿態(tài)拍攝圖像。 得到圖像后,先利用FAST提取圖像中的關(guān)鍵點,取以關(guān)鍵點為圓心一定半徑的圖像塊,提取出來的圖像塊輸入已經(jīng)訓(xùn)練好的深度學(xué)習(xí)網(wǎng)絡(luò),得到其描述符。輸出圖像塊描述符,用其描述符與上一幅圖像提取出的描述符進行最近鄰匹配,利用匹配點計算出相鄰兩幀圖片之間的相對位姿。
基于深度學(xué)習(xí)的場景識別方法在表征一篇圖片時可以大大節(jié)約空間資源,在匹配過程中的速度也能有效提高,在構(gòu)建場景識別的深度學(xué)習(xí)網(wǎng)絡(luò)過程中我們使用三個結(jié)構(gòu)完全相同,全職共享的CNN網(wǎng)絡(luò),用AlexNet提取圖像的特征之后,計算參考幀和同類幀以及異類幀之間的距離,通過距離比較器和反向傳播訓(xùn)練出一個深度學(xué)習(xí)模型。在實際使用時,我們使用一個net生成的全局描述符即可。如果檢測到匹配幀則對誤差就行修正。
人工智能現(xiàn)階段的導(dǎo)航依靠坐標位置并不能有效完成,但視覺SLAM中的三維地圖或網(wǎng)格地圖都只能進行基本的路徑規(guī)劃功能,所以,我們要運用深度學(xué)習(xí)構(gòu)建語義地圖,來為機器人提供語義信息以輔助其導(dǎo)航。
在視覺SLAM中構(gòu)建語義地圖主要運用的是全卷積網(wǎng)絡(luò)。這與傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)不同,將全連接層改成卷積層,以將圖像中各個像素區(qū)分開來,機器人要通過此來找準圖中每個像素對應(yīng)的是實際場景中的哪個物體,從而規(guī)劃出準確的導(dǎo)航路線。語義地圖是在三維坐標系中構(gòu)建的,需要在坐標系中算出其位置,經(jīng)變換,映射到初始坐標系中構(gòu)成語義地圖。人工智能就依靠此更加精確地運作。
圖5 改進后的視覺SLAM系統(tǒng)
本文提出構(gòu)建了一種基于深度學(xué)習(xí)的視覺SLAM系統(tǒng),利用深度學(xué)習(xí)強大的特征抽取能力,我們構(gòu)建的系統(tǒng)在理論上可以達到更高的精度。同時在內(nèi)存消耗,提高效率方面也有著不俗的表現(xiàn)。同時我們構(gòu)建的語義地圖,可以有效地利用圖像的信息,這些語義信息對于機器人導(dǎo)航非常有意義。但是目前計算量較大,無法用CPU進行實時計算,所以必須用GPU計算,后續(xù)可以針對計算量做一些優(yōu)化。此外,我們只做了理論設(shè)計,沒有進行實際的驗證,所以我們后續(xù)還需要實現(xiàn)整套系統(tǒng),從而驗證我們設(shè)計的有效性。