三維深度學習中的目標分類與語義分割

(轉載的文章,僅供學習,如有侵權請隨時聯繫刪帖)

在過去的幾年中,基於RGB的深度學習已經在目標分類與語義分割方面取得了非常好的效果,也促進了很多技術的發展,深度學習在現實生活中的應用也越來越多。但是在很多實際應用中,例如自動駕駛中,只使用RGB信息是遠遠不夠的,因爲我們不僅僅想要知道周圍有什麼物體,還想要知道物體具體的三維信息(位置,運動狀態等),因此,三維方面的深度學習也逐漸發展了起來並取得了不錯的效果。

三維數據的表示方法

point cloud:點雲,也就是三維座標系統中點的集合,這些點通常以x,y,z座標來表示,並且一般用來表示物體的外表形狀。當然,除了最基本的位置信息以外,也可以在點雲中加入其他的信息,如點的色彩信息等。大多數的點雲是由3D掃描設備獲取的,如激光雷達,立體攝像機,深度相機等。

Mesh:網格,是由一組凸多邊形頂點以及凸多邊形表面組成的,也叫做非結構化網格。多邊形網格是希望通過一種易於渲染的方式來表示三維物體模型。在三維可視化等方面有很大的作用。現在有很多種方法來將點雲轉換成多邊形網格。

Voxel:體素,概念上類似於二維空間中的最小單位--像素,體素可以看作是是數字數據在三維空間分區中的最小單位,體素化是一種規格化的表示方法,在很多方面都有着重要的應用。

Multi-View Images:多視角圖片,是通過不同視角的虛擬攝像機從物體模型中獲取到的二維圖像的集合。多視圖通常需要使用比較多的圖片來構建完整的三維模型,在固定圖片數量的情況下,很容易受到物體自遮擋等因素的影響。

圖1:三維模型的表示方法(來源:stanford bunny)

三維深度學習的難點與挑戰:

點雲的非結構化

二維圖像是結構化的,可以使用一個二維矩陣進行表示,但是在三維表示方法中,點雲以及多邊形網格都是非結構化的,想要直接輸入到神經網絡架構中是非常困難的,而將點雲數據進行體素化,然後使用深度學習模型進行特徵提取的方法雖然效果很好,但是由於這種方法佔用的內存太多,導致只能使用比較小分辨率的體素網格。

點雲姿態變換的類別不變性

物體在三維空間中的姿態是任意的,將物體點雲進行旋轉平移操作,雖然改變了點雲中的點的座標,但是物體的類別其實是沒有改變的,因此在三維深度網絡架構過程中需要考慮到如何保證神經網絡對於姿態的不變性。

點雲數據的多樣性

實際場景中得到物體多種多樣,點雲的大小差距也很大,模型能否處理不同尺度的點雲也是非常大的挑戰,還有就是,現在的點雲數據集相較於二維方面的數據集來說,還是比較小的,這對於深度學習來說也是一個不小的挑戰。

三維深度學習的方法

基於體素化的方法

這種方法的核心思想就是將無序的點雲進行體素化,使之變成規格化的表示方法,然後使用3D CNN網絡架構進行特徵學習,來達到分類或是目標檢測的目的。其中,比較有代表性的文章有3D ShapeNets [1],VoxNet [2]等,圖2就是3D ShapeNets的網絡架構以及數據的可視化圖片。

 

圖2:3D ShapeNets(來源:[1])

3D ShapeNets 的網絡架構很簡單,前三層是卷積層,第四層是全連接層,並且爲了降低對外形的影響,網絡中沒有使用池化層,當然還有一些細節上的處理,包括對2.5D點雲進行識別時的NextBestView預測的方法,這裏就不詳細講解了,感興趣的可以查看原論文。

其實這種方法可以看作是模擬二維深度學習的過程,只是將圖片變成了體素網格,2D CNN變成了3D CNN,確實在分類方面取得了很好的性能。

但是這種方法也存在着很明顯的缺點,首先,由於使用的是3D CNN和三維體素網格,導致計算過程中佔用內存很大,且需要較長時間訓練;這種情況下輸入的體素網格的分辨率(30*30*30)也很低,所以還會存在局部信息的丟失,也就導致這種方法很難應用於大場景物體檢測與定位中。

基於多視角圖片的方法

區別於體素化的方法,多視角圖片在處理三維問題核心思想是,希望通過使用物體在不同視角下的圖片來將三維物體的表面特徵完整表示出來,接下來就可以直接使用現在非常成熟的2D CNN技術進行識別與檢測。這種技術的思想想並不難理解,其實跟人眼分類物體的方法相似,如果在某一個角度無法正確對物體進行分類,那麼我們可以換一個角度試着去進行分類,多視角的方法就是使用了這種思想。在這方面比較具有代表性的論文就是Multi-view CNN [3]。

Multi-view CNN 通過對多個視角的圖片學習到特徵,然後達到比使用單張圖片更好的性能。Multi-view CNN 主要分爲兩個步驟:1)使用在ImageNet預訓練好的VGG網絡提取特徵,2)將這些特徵組合在一起,然後再進一步的輸入到可訓練的CNN網絡中進一步的進行特徵學習然後輸出分類結果。

 

圖3:Multi-view CNN架構(來源:[3])

雖然這種方法取得了非常好的分類識別結果,但是,這種方法同樣存在很大的限制,首先就是網絡不允許我們無限制的使用各個視角的圖片,所以固定數量的多視角圖片可能無法將三維模型完全表示出來,很可能出現信息的丟失,比如物體自遮擋等。還有就是使用二維圖片本身就會損失一些三維上的結構信息。當然,在複雜場景下,上面的兩個限制就表現的更加明顯了。

基於點雲的方法

PointNet[4]

其實多視角圖片和體素化的方法都有着相似的中心思想,就是希望通過將點雲變換成規則化的、可以通過CNN直接進行處理的形式。而直接對點雲進行處理的深度學習方法跟上述兩種方法最大的不同就是,它是可以直接使用這些三維點的位置信息的。在這方面比較有代表性的就是PointNet方法。

PointNet主要是解決了兩個核心問題:點雲的無序化物體姿態變換的不變性

1)由於點雲是無序的,那麼最基本的就是需要保證的就是網絡對同一點雲的不同輸入順序的不變性,PointNet的解決方案是使用一個比較簡單的對稱函數,如圖4所示:

 

圖4:PointNet對稱函數(來源:[4])

其中h是特徵提取函數,在PointNet中就是MLP,g就是對稱函數,可以是max、average等函數,在PointNet中用的是max函數,γ則代表的是網絡更高層的特徵提取函數。

2)在解決點雲的無序性問題之後,還有一個非常重要的問題,那就是點雲的旋轉不變特性,點雲在旋轉過後的類別是不會發生改變的,所以PointNet在這個問題上參考了二維深度學習中的STN[5]網絡,在網絡架構中加入了T-Net網絡架構,來對輸入的點雲進行空間變換,使其儘可能夠達到對旋轉的不變性。

 

圖5:PointNet網絡架構(來源:[4])

圖5就是PointNet的整體網絡架構,整體的架構中主要使用了MLP層進行特徵提取以及T-Net層進行空間變換,並且在求解全局特徵(global feature)時使用對稱函數g(max pool)網絡支持分類和分割任務,對於分類任務來說,就是輸出整個點雲的類別,而分割任務則是輸出點雲中每一個點的分類結果。PointNet在這兩種任務中都取得了很好的結果

PointNet的實驗是非常詳細的,其中個人對其中一個實驗非常感興趣,就是輸入網絡中的所有的點只輸出了一個1*1024的全局特徵向量,所以說只有不到1024個關鍵點的特徵使用到了,而論文對全局特徵進行了反求,找出了是哪些關鍵點的特徵這個構成了這個全局向量,並將這些點繪製了出來,如圖6。

 

圖6:關鍵點可視化(來源:[4])

PointNet++[6]

雖然PointNet在分類和分割任務上都取得了很好的結果,但是論文指出PointNet存在着非常明顯的缺點,那就是PointNet只使用了全局的點雲特徵,而沒有使用局部點附近的特徵信息,爲了解決這個問題,PointNet++在網絡中加入了局部信息提取的方案,並且取得了更好的結果。

 

圖7:PointNet++網絡架構(來源:[6])

網絡最主要的部分就是圖7中的set abstraction部分,它首先是先尋找當前點雲中的關鍵點,然後根據距離信息尋找關鍵點附近的點構成一個小的點集,最後使用PointNet進行特徵求解。

通過重複上面的set abstraction部分,便可以不斷的對局部點雲中進行特徵提取,可以使網絡更好的利用局部信息。並且實驗也證明了PointNet++相對於PointNet有了不小的性能提升。當然網絡也使用了MSG和MRG的方法來解決當點雲密度不均勻時的採樣距離需要改變的問題,具體細節可以查看原論文。

雖然PointNet++達到了更好的效果,但是由於網絡加入局部信息之後的不再使用T-net,所以PointNet++有時候存在結果不穩定的情況,所以PointNet++的測試結果是對原始點雲進行多次旋轉求得的平均結果,可見網絡還有很大的改進空間。

最近這段時間也陸續出現了很多很不錯的直接處理點雲的深度學習論文,在這裏就不一一介紹了,對這個方向有興趣的同學可以去看看,應該會有很大的幫助,例如:PointCNN,PointSift,Graph CNNs等。

基於二維RGB圖像與三維點雲學習

Frustrum PointNet[7]

 

圖8:Frustrum PointNet物體定位流程(來源:[7])

由於無人駕駛技術的火熱,大規模場景物體定位問題一直受到很大的關注,而傳統的解決大規模場景物體定位的方法是在整個點雲上進行滑動窗口然後對窗口進行物體分類來確定物體的三維邊界,但是可想而知這種情況下的計算量太大很難達到實時預測。

考慮到現在二維深度學習方向的技術已經非常成熟,同時使用RGB和點雲信息在大規模三位物體定位中應該可以取得更好的成果,基於這個想法,Frustrum PointNet這篇文章就出現了。

上面圖8就是Frustrum PointNet的物體定位的主要流程圖,主要包含三個步驟:

1)使用二維圖像信息以及FPN網絡在二維圖像上找到物體邊界框。

2)使用相機的內參數信息將這個二維邊界框投射到三維空間,形成一個Frustrum(截椎體),現在就只需要在這個Frustrum裏面進行物體搜索,大大減少了搜索時間。

3)將PointNet加入了進來,使用PointNet直接對Frustrum中的點雲進行物體分割,而不是使用傳統的滑動窗口操作,從而使得分割的速度更快。當然,網絡還有一些其他的細節處理,比如對Frustrum裏的點雲進行座標的變換處理。通過以上的操作,使得論文的方法既魯棒又迅速,同時在KITTI 以及 SUN RGB-D 檢測中取得了更好的性能。

論文當然也存在着一些問題,那就是論文的二維物體定位之後才能進行三維定位,一旦二維出錯,那麼三維定位也將出現問題,當然這也是基於現在二維定位效果比三維好的情況下設計的。

SPLATNet[8]

 

圖8:BCL過程(來源:[8])

 

圖9:BCL2D->3D過程(來源:[8])

這篇文章使用了一種比較特殊的點雲處理方法。文章主要是使用了bilateral convolution layers(BCL)這種網絡架構,可以對點雲直接進行卷積操作,見圖9。

BCL主要有三個基本操作:Splat、Convolve、Slice:Splat是將歐式空間通過使用一個變換矩陣轉換成另外一個Permutohedral Lattice空間,並使用插值的方法將點的信息賦值給空間的頂點,從圖中可以看出Permutohedral Lattice空間是由多個三角形構成的,分佈在平面上,這個空間對於點雲這種稀疏無序的數據,能夠高效的進行組織和查找,並且方便各種運算的進行,如卷積運算。接下來就是Convolve,這就比較簡單了,由於點雲已經被投射到這個規格化的空間中,位置是比較規整的,只要按照哈希表做索引,進行卷積操作就可以了。Convolve結束之後使用Slice操作了,這是Splat的逆過程,就是把卷積後的Permutohedral Lattice空間上的點的信息轉換到原來歐式空間中的點上。

論文另一個吸引人的地方就是BCL2D->3D,可以將從多視圖圖像中提取的特徵利用Permutohedral Lattice投射到三維空間,使得二維圖像與點雲以一種學習的方法結合在一起,論文也通過這種方法取得了非常好的語義分割性能。

不過由於這篇論文在BCL方面講解的並不細緻,所以要是想要深入瞭解這方面的的內容的話,需要參考另外論文中的參考文獻1和25文獻才能真正理解這方面的一些詳細內容。

總結

三維方向的深度學習在過去幾年裏也已經發生了比較大的變化,已經從使用體素網格或者多視角圖像轉變爲了直接使用點雲進行學習,並且性能方面也有了很大的提高。不過,這個領域也是近期才快速的發展起來,並且隨着三維傳感器的進一步普及,這個領域的相關研究會得到更多的關注。而且現在的大規模數據集基本上是關於自動駕駛的,但是可以想象三維深度學習在三維醫療影像、智能機器人等也會發揮很大的作用。

參考文獻:

[1] Zhirong Wu et al., "3D ShapeNets: A deep representation for volumetric shapes," 2015 IEEE Conference on Computer Vision and Pattern Recognition (CVPR), Boston, MA, USA, 2015, pp. 1912-1920

[2] Zhi S, Liu Y, Li X, et al. LightNet: A Lightweight 3D Convolutional Neural Network for Real-Time 3D Object Recognition[C]// Eurographics Workshop on 3D Object Retrieval. 2017.

[3] Su H, Maji S, Kalogerakis E, et al. Multi-view Convolutional Neural Networks for 3D Shape Recognition[J]. 2015.

[4]Charles R Q, Su H, Mo K, et al. PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation[J]. 2016:77-85.

[5]Jaderberg M, Simonyan K, Zisserman A, et al. Spatial Transformer Networks[J]. 2015:2017-2025.

[6]Qi C R, Yi L, Su H, et al. PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space[J]. 2017.

[7]Qi C R, Liu W, Wu C, et al. Frustum PointNets for 3D Object Detection from RGB-D Data[J]. 2017.

[8]Su H, Jampani V, Sun D, et al. SPLATNet: Sparse Lattice Networks for Point Cloud Processing[J]. 2018.

[10]https://zhuanlan.zhihu.com/p/26806047

發佈了83 篇原創文章 · 獲贊 129 · 訪問量 77萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章