孫 紅,凌岳覽
(上海理工大學光電信息與計算機工程學院,上海200093)
近年來,隨著相關技術的發展和需求的增加,使移動機器人能夠在陌生環境中實現全局定位成為了很多研究的重點問題之一,而使移動機器人實現全局定位的基礎在于讓機器人能夠充分準確的識別存在于陌生環境中的各種影響因素,包括對周圍障礙物體進行準確識別分類以及對環境進行局部分割等.
移動機器人主要是通過環境重建[1]、自身位置定位[2]和場景識別[3]三個方面來實現自主定位的.Meyer-Delius[4]團隊通過跟蹤障礙物位置在半靜止環境中的變更而產生噪點的觀測,有效的提升在半靜止環境中的魯棒性.Saarinen[5]等人以占用柵格的可遞歸特性,并結合NDT 地圖模型的高效創建特點,有效的表現出了環境的變化.Biber 團隊[6]通過“記憶清除(memory decay)”方法,即在長期定位移動的過程中添加最新得到的觀測結果,并對最早的記憶進行清除,這種基于采樣的更新環境變化的模型在機器人長期定位應用中具有較高的魯棒性.而在環境掃描識別中,主要有通過人工標注特征[7]和學習獲取特征[8]兩個方式,Arroyo[9]團隊通過環境亮度穩定的特點和多次人工設計的環境特征實現了基于機器人視覺的自主定位.Churchill 等人[10]采用了基于運行經驗的自主定位法,將曾經掃描過的環境記錄并將該記錄為經驗,使用視覺里程計將觀測的當前環境與經驗進行結合,以此來匹配環境定位,提升了同一環境下受到不同影響因素時的匹配效果,但該方法最好滿足在同一環境下的要求,容易導致信息爆炸.Arroyo 的團隊[11]使用了CNN 卷積深度網絡,將每一層的卷積特征與相應的圖像特征結合,通過實現特征傳遞來做到環境匹配,但卷積網絡模型一般是高維的,通過此方法來提升環境識別的準確度仍然是個問題.
目前移動機器人獲取周圍環境主要是靠激光雷達傳感器、深度傳感器等設備所采集的環境深度信息,或者是通過RGB 攝像頭采集信息建立三維環境,但三維環境中由于使用了三維卷積核,計算復雜度較大.而通過激光雷達傳感器和深度傳感器獲取的點云數據能夠不受天氣等復雜因素的影響,并且對環境的掃描精確度較高.目前處理點云數據常用的方法主要有將點云樣本柵格化,通過3D-CNN[12]對均勻分布的點云進行卷積處理,或者將三維點云數據映射到二維平面上進行處理,但可能造成計算的進一步復雜化.而對于一些較為復雜點云數據進行分割時,可采用基于曲率約束的K-means三維點云數據分割方法[13]進行處理.本文通過Pointnet 算法對點云數據直接提取點云特征.同時,本文在Pointnet++算法的基礎上提出了一種融合了多采樣特征提取(multi-kernel Feature extraction,MKF)的優化算法來解決點云數據可能密度分布不均的問題,通過多采樣特征提取的優化算法,當局部區域范圍內的點云密度不滿足要求時,擴大采集點云數據的尺度半徑使獲取的點云密度符合要求,提升處理效果的目的.在對點云樣本數據劃分局部采樣區域的過程中需要采用迭代最遠點采樣、K 近鄰算法[14]等方法對點云數據進行聚類.
深度圖像由一組無序的點組成,點云數據是一組n* 3 的矩陣,它具有無序性的特點.無序性是指點云中每個點的排列順序不影響它在空間中對整體結構和形狀的表示.大多數對點云的處理方法是先將點云數據映射為二維圖像組或是柵格化后再進行后續處理,但是這樣的處理方法往往會引起更加復雜的計算.而Pointnet[15]神經網絡模型的提出可以將點云數據直接作為網絡的輸入,并提取點云特征.
Pointnet 網絡模型運用深度神經網絡中的最大池函數來解決點云的無序性問題[15].由于對稱函數的輸出不會隨著輸入因子的排列順序改變而改變,所以可以通過對稱函數對點云集中所有點進行處理,進而得到點云集的全局特征.常用的對稱函數是g=max(),即

但是g=max()函數只計算了最大點,即整個點云集最遠的邊界點,這導致丟失了很多有意義的信息.而由于在高維空間中包含有冗余信息,所以可以將每個點映射到高維空間中,從而對很多有意義的信息進行了保留,在經過最大池函數運算后,接著通過多層感知器γ 得到點云的全局特征.

通過運用Pointnet 神經網絡結構能夠解決點云的無序性,并將點云通過多層感知器進行高維空間映射,同時采用最大池化層進行特征整合,用以直接對點云數據進行深度學習處理.采用Pointnet 結構可以基于點云數據對物體進行分類識別和環境語義分割.
但是在對局部特征進行處理和點云密度近密遠疏的情況下,Pointnet 的處理效果并不理想,在此基礎上提出了Pointnet++,該網絡結構是在Pointnet 結構的基礎上進行優化,在為了處理局部特征Qi 等人[16]提出了采用分層結構.該結構一共分為三個部分,分別是采樣部分、分組部分和特征提取部分.首先在采樣層中使用迭代最遠點采樣(FPS)選取一定數量合適的質心點,接著在分組層中通過鄰域算法在選取的質心點一定區域內選取合適的點集,然后在特征提取層中對點集重復迭代使用Pointnet,從而生成新的中心點,接著送入下一個分層結構繼續重復步驟.隨著不斷重復分層結構,所提取的中心點個數越來越少,但其中包含的信息越來越多,從而解決了局部特征的問題.接著為了解決點云樣本有時呈現出密度近密遠疏的特點,本文提出一種多采樣特征提取(MKF)的方法,即當在預定采樣kernel 的范圍內點云密度不足時,擴大kernel 半徑選取更多的點云提取其特征,提取多個采樣特征,放棄低密度特征而采用高密度點云的特征,來解決點云密度過低的情況,該方法可根據局部區域范圍內的點云密度,及時調整點云的采集范圍,使采集到的點云密度符合要求,從而能夠提升處理效果.
在卷積神經網絡中一般采用較小的kernal 范圍,但當點云樣本出現密度近密遠疏的情況時,由于尺度半徑選擇的問題,可能會產生點云密度過低,導致處理效果不理想的問題.

圖1 多采樣特征提取Fig.1 Multi-sampling feature extraction
為了處理這一問題,當預定采樣kernel 的范圍內點云密度過低不滿足要求時,擴大采樣尺度半徑,增加采樣范圍,從而能夠選取更多的點云數據.當選擇多個采樣區域時,放棄低密度區域而采用高密度點云的區域特征.如圖1 所示,kernel_r1 區域擁有足夠的點云密度,則對采樣質心和所采樣質心附近鄰域點進行Pointnet 處理后,得到局部特征F1.在kernel_r2 區域范圍內點云密度并未滿足處理精度要求,則擴大采樣尺度半徑,在kernel_r2'區域重新采樣,當滿足采樣密度需求后,再通過Pointnet 得到局部特征,從而解決了點云樣本密度近密遠疏時,點云密度無法滿足處理精度的問題.

表1 MKF Pointnet++采樣流程Table 1 MKF Pointnet++sampling process
采樣具體流程如表1 所示,首先設置模型的初始參數,接著將深度傳感器等設備所采集到的點云樣本數據輸入進模型,并對輸入的點云樣本數據進行局部區域的劃分.然后通過迭代最遠點的方法獲取該局部區域內指定數量的質心點,再根據鄰域規則,對上述所選擇質心點的一定范圍內選取點云集,若該點云集的密度符合點云密度要求,則對點云數據采用Pointnet 模型處理從而獲得點云特征向量.若該區域點云密度不足,則進一步擴大采樣尺度半徑,并重新進行采樣,對低密度尺度半徑內的采樣進行舍棄,直至該區域的點云密度能符合要求,再輸入Pointnet 模型處理獲得特征向量.
為了驗證本文所提出的基于MKF 優化的Pointnet++網絡結構在物體目標識別和環境局部分割的可行性和精確性.本文首先以ModelNet40[17]為數據集,分別采用Pointnet 和MKF Pointnet++算法進行物體識別分類效果進行對比,并與各公開算法的識別精度進行對比.接著使用公開數據集S3DIS Dataset[18],并采用 Pointnet++和 MKF Pointnet++進行環境語義分割處理,通過兩者準確率的對比,比較兩者的分割效果.
實驗1.Pointnet 和MKF Pointnet++在物體識別上的對比
首先使用MKF Pointnet++算法對ModelNet40 點云數據集進行分類訓練,將點云數據集分為7 組,其中5 組作為訓練樣本,剩下2 組作為測試樣本,每組樣本都包含了所有標簽.先輸入訓練樣本,對模型進行訓練.在訓練樣本中,分別以batch=50、100、150…600 為 Sampling & Grouping Layer,對每一層 Sampling & Grouping Layer 使用 mini point net 進行訓練,共訓練150 代.具體訓練參數為batch_size=16,decay_rate=0.7,learning_rate=0.001,max_epoch=150,num_point=1024,得到訓練過程數據如表2 所示.

表2 MKF Pointnet++訓練準確率與誤差表Table 2 MKF Pointnet++training accuracy and error table
分析上述表2 可知,分層結構的MKF Pointnet++在每一層Sampling &Grouping Layer 上準確率都是逐步上升的,不同的迭代次數都繼承上一代的最后一層分類結果.將通過訓練樣本得到的分類模型,輸入2 組測試樣本,測試得到每個標簽的分類準確率.
接著使用Pointnet 算法對同一點云數據集進行分類訓練,同樣將7 組點集中的5 組作為訓練樣本,剩下2 組作為測試樣本,對模型進行訓練.設置的訓練參數為batch_size=16,decay_rate=0.7,learning_rate=0.001,m ax_epoch=150,num_point=1024,同樣將測試樣本輸入到得到的訓練模型中,得到每個標簽的分類準確率.

圖2 MKF Pointnet++和Pointnet 的識別率對比Fig.2 Comparison of MKF Pointnet++and Pointnet recognition rates
將MKF Pointnet++與Pointnet 算法得到的測試準確率繪制如圖2 所示的對比曲線,由圖2 可以看出,總體上MKF Pointnet++在物體識別準確率上要優于Pointnet 算法,在部分標簽上MKF Pointnet++的識別準確率相比Pointnet 有了很大的提升.在部分低密度的點云樣本情況下,MKF Pointnet++仍能有較好的識別效果.
為了進一步說明MKF Pointnet++在物體識別方面的準確率,使用各公開算法得到在數據集ModelNet40 下的物體識別的準確率,最終結果如表3 所示.從表3 中看出 Light-Net[19]、Primitive-GAN[20]和 Pointnet 算法的準確率較為接近,高于 3DShapeNets[17]算法的準確率,而 MVCNN[21]和 MKF Pointnet++算法的準確率要高于實驗中的其他算法,可以看出這兩種算法在物體識別分類上都有較好的效果.

表3 各公開算法識別準確度對比Table 3 Comparison of recognition accuracy of public algorithms
實驗2.基于Pointnet++和MKF Pointnet++的環境分割
MKF Pointnet++算法是對Pointnet++算法的進一步優化,為了驗證MKF Pointnet++在環境分割效果上要優于Pointnet++,將兩種算法進行實驗對比,分析其在環境分割上的準確率.
實驗2 中采用公開數據集S3DIS Dataset,本次使用的環境樣本共6 個區域,前5 個區域為訓練樣本,區域6 為測試樣本.首先采用MKF Pointnet++算法進行環境分割,設置具體訓練參數如下:batch_size=6,learning_rate=0.001,max_epoch=50,num_point=2048,test_area=6.訓練結束后將測試樣本區域6 輸入進通過訓練得到的MKF Piontnet++環境分割模型,得到相應的測試準確率.
接著采用Pointnet++算法同樣在局部區域范圍內對環境進行分割,得到環境分割的測試準確度.Pointnet++和MKF Pointnet++算法的測試準確度對比結果如圖3 所示.從圖3 中可以看出MKF Pointnet++算法在大部分環境分割上要優于Pointnet++的效果.

圖3 MKF Pointnet++和Pointnet++的準確率對比Fig.3 MKF Pointnet++and Pointnet++accuracy comparison
表4 是MKF Pointnet++和Pointnet++算法在部分環境下進行分割的準確率比,MKF Pointnet++在大多數環境樣本中的分割效果均優于Pointnet++,部分環境分割準確率有較大的提升,但在少量環境中Pointnet++的分割效果較MKF Pointnet++更優,分析其原因可能是在部分區域擴大采樣區域半徑達到了設定最大值,但仍未滿足點云密度需求,所以MKF Pointnet++并無擴大采樣半徑的算法優勢,導致了Pointnet++在這些環境中的分割準確率更高.

表4 MKF Pointnet++和Pointnet++的準確率比Table 4 MKF Pointnet++and Pointnet++accuracy ratio
圖4 所示的是Pointnet++和MFK Pointnet++對環境中的各個物體進行分割的效果圖.

圖4 環境分割效果圖Fig.4 Environmental segmentation effect map
從圖4 Pointnet++和MKF Pointnet++環境分割效果圖來看,可以發現在整體環境分割的效果上MKF Pointnet++和Pointnet++都有不錯的效果,但是基于MKF 的Pointnet++在處理低密度的點云時有更好的效果,物體分割的識別精度也比Pointnet++更高.

圖5 Pointnet++和MKF Pointnet++識別效果對比圖Fig.5 Comparison of the recognition effect of Pointnet++and MKF Pointnet++
圖5(a)的局部分割區域是沙發點云圖,可以發現MKF Pointnet++的分割效果要優于Pointnet++.同樣如圖5(b)所示,Pointnet++無法對柜子完全分割,相比之下 MKF Pointnet++的識別分割效果更好.又如圖5(c)環境中,Pointnet++在密度不足的環境上識別分割效果并不理想,Pointnet++將柱子錯識別成墻體,而MKF Pointnet++能夠完整的識別出整根柱子.
綜上分析可知,MKF Pointnet++進行多采樣特征優化后,在局部環境的分割處理和低密度點云的環境分割處理上都有優于Pointnet++的表現.
為了進一步排除系統初始化的時間影響,記錄在算法迭代中期較為穩定的實時性,實時性記錄實驗數據參數batch_size=6,max_epoch=50,num_point=1024,cur_epoch=40 如表5 所示.

表5 實時性對比Table 5 Real-time comparison
分析表5 可知,在模型大小上Pointnet 算法遠高于Pointnet++和MKF Pointnet++算法,由于MKF Pointnet++比Pointnet++多了采樣尺度選擇模塊,在模型容量上要略高.在實時性方面,雖然Pointnet 有較好的實時性,但Pointnet++和MKF Pointnet++通過增加了分層結構和多尺度采樣,在識別準確度上要遠高于Pointnet 算法,而在環境分割上MKF Pointnet++的分割效果上要優于Pointnet++.
實驗3.不同點云密度的物體識別
針對Pointnet++在低密度點云的環境下識別效果不佳的情況,MKF Pointnet++提出了一種基于多采樣特征的優化方法.實驗3 在不同點云密度的情況下,對比MKF Point net++、Pointnet++以及Pointnet 在物體識別上的準確度.
實驗3 中對進行物體識別的樣本點云密度進行修改,將num_point 參數分別修改為1024、512 和256.接著在不同樣本點云密度的情況下,分析對比Pointnet、Pointnet++和MKF Pointnet++三種算法對物體的識別效果,對比結果如圖6 所示.

圖6 不同點云密度下的識別效果對比Fig.6 Comparison of recognition effects under different point cloud densities
由圖6 可知,在點云密度不同的情況下Pointnet、Pointnet++和MKF Pointnet++有不同的識別效果,在點云密度為1024 時,此時點云密度足夠高,三種算法都能有不錯的識別效果,MKF Pointnet++略高于Pointnet++和Pointnet,而當點云密度下降時,Pointnet 和Pointnet++的識別準確率都有較為明顯的下降.當點云密度降低至256 時,Pointnet 和Pointnet++的識別準確率較MKF Pointnet++相差較大.所以,在點云樣本低密度情況下MKF Pointnet++通過擴大采樣半徑,仍能保持較優的識別效果.
對障礙物體進行識別分類和環境分割都是移動機器人實現全局定位的技術基礎,所以本文在點云數據下研究MKF Pointnet++算法在物體識別分類和環境分割方面的效果.實驗對比表明,在基于MKF 優化的Pointnet++算法在物體識別分類與環境分割的效果上都優于Pointnet 以及Pointnet++,而且在點云低密度的環境下,MKF Pointnet++算法也有更好的識別效果.MKF Pointnet++算法的可行性與精確性能為移動機器人實現全局定位提供更好的技術保證.
通過MKF 對Pointnet++算法進行優化,在物體識別分類和環境分割應用上有較好的表現,但仍有進一步改進和研究的地方.
1.MKF Pointnet++算法在每一分層結構中都需要判斷是否滿足點云密度需求,如果不滿足需要重新進行采樣,這樣會大大增加算法的時間,使算法無法滿足實時性要求.所以在后續研究上可以通過改變采樣方式或跨層采樣特征結合的方式改進這方面問題.Qi 等人[16]提出將處理后的采樣點特征通過距離插值和跨越跳級鏈路的跨層傳播策略.可以將該方向作為下一步的研究方向,能夠減少MKF Pointnet++算法的采樣時間.
2.在選取局部區域的質心點后,采用了K 近鄰迭代查詢的規則選取質心點一定范圍內的點集,這種方式在空間表述的局部鄰域上,不能有效的滿足固定的范圍尺度.后續可研究其他能夠代替K 近鄰查詢規則的方法,從而提升在局部采樣區域點集獲取的效率.