張國棟
(武侯中學,四川成都,610000)
首先機器人以一定的時間間隔、一定的角度姿態拍攝圖像。 得到圖像后,先利用FAST提取圖像中的關鍵點,取以關鍵點為圓心一定半徑的圖像塊,提取出來的圖像塊輸入已經訓練好的深度學習網絡,得到其描述符。輸出圖像塊描述符,用其描述符與上一幅圖像提取出的描述符進行最近鄰匹配,由公式1得,利用匹配點計算出相鄰兩幀圖片之間的相對位姿。基于深度學習的場景識別方法在表征一篇圖片時可以大大節約空間資源,在匹配過程中的速度也能有效提高,在構建場景識別的深度學習網絡過程中我們使用三個結構完全相同,全職共享的CNN網絡,用AlexNet提取圖像的特征之后,計算參考幀和同類幀以及異類幀之間的距離,通過距離比較器和反向傳播訓練出一個深度學習模型。在實際使用時,我們使用一個net生成的全局描述符即可。如果檢測到匹配幀則對誤差就行修正。
人工智能現階段的導航依靠坐標位置并不能有效完成,但視覺SLAM中的三維地圖或網格地圖都只能進行基本的路徑規劃功能,所以,我們要運用深度學習構建語義地圖,來為機器人提供語義信息以輔助其導航。
在視覺SLAM中構建語義地圖主要運用的是全卷積網絡。這與傳統的卷積神經網絡不同,將全連接層改成卷積層,以將圖像中各個像素區分開來,機器人要通過此來找準圖中每個像素對應的是實際場景中的哪個物體,從而規劃出準確的導航路線。語義地圖是在三維坐標系中構建的,需要在坐標系中算出其位置,經變換,映射到初始坐標系中構成語義地圖。人工智能就依靠此更加精確地運作。
二十世紀六十年代Slam技術第一次被提出到現在歷經七十年的發展已經取得了矚目的成就,特別是在二十一世紀初,其基本框架已開始成型。2007年,MonoSLAM系統[1]將擴展卡爾曼濾波應用到了后端優化中來減少累積誤差[2]實現了slam系統在環境中實時定位并構建地圖。考慮到視覺傳感器的結構與人類的眼睛類似,所以基于視覺傳感器的slam在室內外環境中應用較多。
國內對于語義地圖方向的研究起步較晚北京科技大學首先完成了語義地圖的建立,但采用了不正確的檢測物體的方式,直接導致計算量過大。隨后,中國科技大學完成了其中兩個部分,場景識別和場景中物體的識別。
傳統的室內機器人在移動過程中,需要依靠周圍的幾何信息定位,它們可以在基于視覺傳感器的salm下運行。但他們忽略了環境中極其豐富的語義信息,這是未來服務機器人構建語義地圖中不可缺少的信息。
首先可以把一個光源看成由許多小發光點組成,每個發光點都朝著周圍空間發射著光。總會有一束光筆直地穿過小孔,在白紙上形成一個小光斑。每一個發光點形成一個光斑,所以在白紙上就形成了由所有的光斑聚成的像,如圖1所示。
從圖中可以看到,A,B部分的光沿直線通過小孔,照在屏幕的C處,當孔較大時,A,B部分發出的光線會在屏幕C處重疊,故像不會清晰;當孔相當大時,光線不會到達一處,光信息會發生混亂,所以無法成像;當孔較小時,空的上下沿會遮住光的傳播路徑,物體不同部分的光會到達屏幕上的不同部分,而不會相互重疊,所以成的像會比較清晰。

圖1 小孔成像原理圖
所以如果孔的大小變大,那么成像的分辨率會下降,反之則會上升,即小孔成像的分辨率與像的清晰度成正比,與孔的大小呈反比(與物距相距均有關,但本文不做討論)。
相機成像的模型的過程實際是將三維空間還原成二維平面的一個過程,可簡單用小孔成效模型描述此過程,如圖2所示。
(1)首定義兩個坐標系:相機坐標系(三維坐標系)—以相機焦點為原點和坐標軸X,Y,Z圖像坐標系(二維坐標系)—以成像平面的中心O為坐標原點和坐標軸x,y。

圖2 小孔相機模型
(2)小孔成像實際就是將相機坐標系中的三維坐標,變換到成像平面中的二維坐標。假設三維空間中存在某點P,在相機坐標系中的坐標為[X,Y,Z]其成像。
由于手動設計出來的描述符很難確定參數配置,手動設計出的描述符很難同時具備較高的不變性、緊密型和獨特性。近些年來局部不變描述符研究領域的一大熱點是研究學者把機器學習的方法用于描述符的設計。因為機器學習的局部描述符具有獨特的優勢:可以利用訓練數據學習最佳的參數配置和復雜模式。在本系統中,我們先用FAST提取特征點,然后再用深度網絡計算這些特征點的描述子。
我們構建場景識別系統的深度學習網絡如圖3所示,圖中的三個net為CNN網絡,這三個網絡結構完全相同,權值共享。圖中的x為參考幀,x+為同類幀,x-為異類幀,同類幀即與參考幀相似的圖片,異類幀是與參考幀不同的圖片。具體到我們的系統中,參考幀為一個具體的位置所拍攝的圖片,同類幀這個位置臨近區域內拍攝的圖片,而異類幀則是離這個位置比較遠的地點拍攝的圖片。
在本文中我們使用AlexNet作為整幅圖像的特征提取器,在獲得三張圖像各自的特征之后,我們分別計算了x和x+之間的距離d+即圖中的同理可得d-。通過一個距離比較器和反向傳播我們可以訓練出一個場景識別的深度學習模型。在實際使用網絡的時候,我們只需要使用一個net生成圖像對應的全局描述符即可。

圖3 場景識別網絡結構

其中L為損失函數,dij輸入的兩個特征點對應的描述符之間的距離,sij為1是表明輸入的是兩個相似的特征點對應的圖像塊,而sij為0是表明輸入的是兩個不相似的特征點對應的圖像塊。α為不相似的描述符之間的最小距離。
損失函數的圖像如圖4所示,當不相似的描述符之間的距離小于α的時候,損失函數大于0,網絡將進行訓練,反之表明網絡已經滿足要求。

圖4 損失函數曲線
在訓練完成之后,我們將不再需要兩個網絡,我們只需要使用一個網絡來提取描述符。大量的前期工作表明這種方式訓練得到的描述符遠遠由于手工提取的描述符,為了達到實時性的要求,我們使用GPU進行加速,因此完全可以滿足機器人對實時性的要求。
回環檢測是SLAM系統中非常重要的部分,由于我們在逐幀計算位姿的時候會有一定誤差,隨著時間的積累這個誤差會變得越來越大,因此我們必須通過一定的手段來消除這種誤差[3]。目前比較通用的便是回環檢測,所謂回環檢測就是一個場景識別系統,場景識別系統可以識別出來相同或者相近的地點。具體到機器人中,當機器人運動一段時間后又回到之前來過的地方,由于計算位姿的累積誤差,所以機器人計算到的位置和原來的位置并不相同,那么此時我們可以通過回環檢測重新計算兩個回環匹配幀之間的位姿從而消除這種誤差。
傳統的回環檢測主要是利用局部描述符構建了一個視覺詞袋,由于局部描述符有著各種局限性所以這樣方式構建的回環檢測系統具有很多問題,比如對于光照變化,視角變化,環境變化不夠魯棒,此外視覺詞袋規模較大,在系統運行的過程中需要加載到內存中,消耗了大量的資源。基于深度學習的場景識別可以有效地克服視角,光照和環境等變化,此外由于基于深度的場景識別可以生成全局的描述符,因此表征一幅圖片可以用更少的空間,大大節約了資源,在匹配階段也可以加快速度。因此在本文中我們將使用基于深度學習的場景識別系統來進行回環檢測。
所謂場景識別系統,即將高維空間的圖像映射成一個維度較低的空間中的描述符,映射過程中我們需要低維度的描述符可以保持圖像之間的相似關系。因此我們采用triplet形式的損失函數來對網絡進行訓練。我們為提取到的樣本特征選取鄰近的同類樣本特征和鄰近的異類樣本特征,以此來構建一個三元組,對于N個訓練樣本,可以隨機產生大量的三元組,本文涉及到的基于三元組約束的距離度量學習模型(point to point Relative Distance Constrained Metric Learning,RDCML)要求同類樣本特征的距離和異類樣本特征的距離被一個大的間隔分開。基于上述的描述,我們的損失函數為如下公式,其中α為正負樣本之間的間隔,即正樣本之間的距離要比負樣本之間的距離小α以上。在訓練過程中α由人為指定,α越小網絡越容易收斂,然而效果會比較差,α越大網絡越難收斂會導致訓練時間變長甚至不收斂,但是效果會比較好,因此我們需要在訓練過程中對訓練時間和精度進行權衡。

基于深度學習的SLAM系統如圖5所示,首先機器人以一定的時間間隔、一定的角度姿態拍攝圖像。 得到圖像后,先利用FAST提取圖像中的關鍵點,取以關鍵點為圓心一定半徑的圖像塊,提取出來的圖像塊輸入已經訓練好的深度學習網絡,得到其描述符。輸出圖像塊描述符,用其描述符與上一幅圖像提取出的描述符進行最近鄰匹配,利用匹配點計算出相鄰兩幀圖片之間的相對位姿。
基于深度學習的場景識別方法在表征一篇圖片時可以大大節約空間資源,在匹配過程中的速度也能有效提高,在構建場景識別的深度學習網絡過程中我們使用三個結構完全相同,全職共享的CNN網絡,用AlexNet提取圖像的特征之后,計算參考幀和同類幀以及異類幀之間的距離,通過距離比較器和反向傳播訓練出一個深度學習模型。在實際使用時,我們使用一個net生成的全局描述符即可。如果檢測到匹配幀則對誤差就行修正。
人工智能現階段的導航依靠坐標位置并不能有效完成,但視覺SLAM中的三維地圖或網格地圖都只能進行基本的路徑規劃功能,所以,我們要運用深度學習構建語義地圖,來為機器人提供語義信息以輔助其導航。
在視覺SLAM中構建語義地圖主要運用的是全卷積網絡。這與傳統的卷積神經網絡不同,將全連接層改成卷積層,以將圖像中各個像素區分開來,機器人要通過此來找準圖中每個像素對應的是實際場景中的哪個物體,從而規劃出準確的導航路線。語義地圖是在三維坐標系中構建的,需要在坐標系中算出其位置,經變換,映射到初始坐標系中構成語義地圖。人工智能就依靠此更加精確地運作。

圖5 改進后的視覺SLAM系統
本文提出構建了一種基于深度學習的視覺SLAM系統,利用深度學習強大的特征抽取能力,我們構建的系統在理論上可以達到更高的精度。同時在內存消耗,提高效率方面也有著不俗的表現。同時我們構建的語義地圖,可以有效地利用圖像的信息,這些語義信息對于機器人導航非常有意義。但是目前計算量較大,無法用CPU進行實時計算,所以必須用GPU計算,后續可以針對計算量做一些優化。此外,我們只做了理論設計,沒有進行實際的驗證,所以我們后續還需要實現整套系統,從而驗證我們設計的有效性。