室外點雲語義分割的特點:
劇烈變化的點密度是點雲室外場景語義分割的難點。
pointcnn
pointconv(論文翻譯:https://zhuanlan.zhihu.com/p/63189649
https://zhuanlan.zhihu.com/p/69597887)
DGCNN
ShellNet(有室外)
論文:Hierarchical Point-Edge Interaction Network for Point Cloud Semantic Segmentation
https://zhuanlan.zhihu.com/p/85417276
SGPN
PointNet
論文全稱:Deep Learning on Point Sets for 3D Classification and Segmentation
會議名稱:Computer Vision and Pattern Recognition (CVPR) 2017
項目地址:https://github.com/charlesq34/pointnet
PointNet++
論文全稱:Deep Hierarchical Feature Learning on Point Sets in a Metric Space
會議名稱:Conference on Neural Information Processing Systems (NIPS) 2017
項目地址:https://github.com/charlesq34/pointnet2
SEGCloud
論文全稱:Semantic Segmentation of 3D Point Clouds
會議名稱:International Conference of 3D Vision (3DV) 2017, Spotlight
項目地址:無
RSNet
論文全稱:Recurrent Slice Networks for 3D Segmentation of Point Clouds
會議名稱:Computer Vision and Pattern Recognition (CVPR) 2018, Spotlight
項目地址:https://github.com/qianguih/RSNet
PointSIFT
論文全稱:A SIFT-like Network Module for 3D Point Cloud Semantic Segmentation
會議名稱:Computer Vision and Pattern Recognition (CVPR) 2018
三維數據的表示方法
- point cloud:點雲,也就是三維坐標系統中點的集合,這些點通常以x,y,z坐標來表示,並且一般用來表示物體的外表形狀。當然,除了最基本的位置信息以外,也可以在點雲中加入其他的信息,如點的色彩信息等。大多數的點雲是由3D掃描設備獲取的,如激光雷達,立體攝像機,深度相機等。
- Mesh:網格,是由一組凸多邊形頂點以及凸多邊形表面組成的,也叫做非結構化網格。多邊形網格是希望通過一種易於渲染的方式來表示三維物體模型。在三維可視化等方面有很大的作用。現在有很多種方法來將點雲轉換成多邊形網格。
- Voxel:體素,概念上類似於二維空間中的最小單位--像素,體素可以看作是是數字數據在三維空間分區中的最小單位,體素化是一種規格化的表示方法,在很多方面都有着重要的應用。
- Multi-View Images:多視角圖片,是通過不同視角的虛擬攝像機從物體模型中獲取到的二維圖像的集合。多視圖通常需要使用比較多的圖片來構建完整的三維模型,在固定圖片數量的情況下,很容易受到物體自遮擋等因素的影響。

圖1:三維模型的表示方法(來源:stanford bunny)
三維深度學習的難點與挑戰:
點雲的非結構化
二維圖像是結構化的,可以使用一個二維矩陣進行表示,但是在三維表示方法中,點雲以及多邊形網格都是非結構化的,想要直接輸入到神經網絡架構中是非常困難的,而將點雲數據進行體素化,然后使用深度學習模型進行特征提取的方法雖然效果很好,但是由於這種方法占用的內存太多,導致只能使用比較小分辨率的體素網格。
點雲姿態變換的類別不變性
物體在三維空間中的姿態是任意的,將物體點雲進行旋轉平移操作,雖然改變了點雲中的點的坐標,但是物體的類別其實是沒有改變的,因此在三維深度網絡架構過程中需要考慮到如何保證神經網絡對於姿態的不變性。
點雲數據的多樣性
實際場景中得到物體多種多樣,不同對象的點雲在尺度上差距很大,模型能否處理不同尺度的點雲也是非常大的挑戰,還有就是,現在的點雲數據集相較於二維方面的數據集來說,還是比較少的,這對於深度學習來說也是一個不小的挑戰。
三維深度學習的方法
基於體素化的方法
這種方法的核心思想就是將無序的點雲進行體素化,使之變成規格化的表示方法,然后使用3D CNN網絡架構進行特征學習,來達到分類或是目標檢測的目的。其中,比較有代表性的文章有3D ShapeNets [1],VoxNet [2]等,圖2就是3D ShapeNets的網絡架構以及數據的可視化圖片。

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網絡中進一步的進行特征學習然后輸出分類結果。

雖然這種方法取得了非常好的分類識別結果,但是,這種方法同樣存在很大的限制,首先就是網絡不允許我們無限制的使用各個視角的圖片,所以固定數量的多視角圖片可能無法將三維模型完全表示出來,很可能出現信息的丟失,比如物體自遮擋等。還有就是使用二維圖片本身就會損失一些三維上的結構信息。當然,在復雜場景下,上面的兩個限制就表現的更加明顯了。
基於點雲的方法
PointNet[4]
其實多視角圖片和體素化的方法都有着相似的中心思想,就是希望通過將點雲變換成規則化的、可以通過CNN直接進行處理的形式。而直接對點雲進行處理的深度學習方法跟上述兩種方法最大的不同就是,它是可以直接使用這些三維點的位置信息的。在這方面比較有代表性的就是PointNet方法。
PointNet主要是解決了兩個核心問題:點雲的無序化和物體姿態變換的不變性。
1)由於點雲是無序的,那么最基本的就是需要保證的就是網絡對同一點雲的不同輸入順序的不變性,PointNet的解決方案是使用一個比較簡單的對稱函數,如圖4所示:

其中h是特征提取函數,在PointNet中就是MLP,g就是對稱函數,可以是max、average等函數,在PointNet中用的是max函數,γ則代表的是網絡更高層的特征提取函數。
2)在解決點雲的無序性問題之后,還有一個非常重要的問題,那就是點雲的旋轉不變特性,點雲在旋轉過后的類別是不會發生改變的,所以PointNet在這個問題上參考了二維深度學習中的STN[5]網絡,在網絡架構中加入了T-Net網絡架構,來對輸入的點雲進行空間變換,使其盡可能夠達到對旋轉的不變性。

圖5就是PointNet的整體網絡架構,整體的架構中主要使用了MLP層進行特征提取以及T-Net層進行空間變換,並且在求解全局特征(global feature)時使用對稱函數g(max pool)。網絡支持分類和分割任務,對於分類任務來說,就是輸出整個點雲的類別,而分割任務則是輸出點雲中每一個點的分類結果。PointNet在這兩種任務中都取得了很好的結果。
PointNet的實驗是非常詳細的,其中個人對其中一個實驗非常感興趣,就是輸入網絡中的所有的點只輸出了一個1*1024的全局特征向量,所以說只有不到1024個關鍵點的特征使用到了,而論文對全局特征進行了反求,找出了是哪些關鍵點的特征構成了這個全局向量,並將這些點繪制了出來,如圖6。

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

網絡最主要的部分就是圖7中的set abstraction部分,它首先是先尋找當前點雲中的關鍵點,然后根據距離信息尋找關鍵點附近的點構成一個小的點集,最后使用PointNet進行特征求解,。
通過重復上面的set abstraction部分,便可以不斷的對局部點雲中進行特征提取,可以使網絡更好的利用局部信息。並且實驗也證明了PointNet++相對於PointNet有了不小的性能提升。當然網絡也使用了MSG和MRG的方法來解決當點雲密度不均勻時的采樣距離需要改變的問題,具體細節可以查看原論文。
雖然PointNet++達到了更好的效果,但是由於網絡加入局部信息之后的不再使用T-net,所以PointNet++有時候存在結果不穩定的情況,所以PointNet++的測試結果是對原始點雲進行多次旋轉求得的平均結果,可見網絡還有很大的改進空間。
最近這段時間也陸續出現了很多不錯的直接處理點雲的深度學習論文,在這里就不一一介紹了,對這個方向有興趣的同學可以去看看,應該會有很大的幫助,例如:PointCNN,PointSift,Graph CNNs等。
基於二維RGB圖像與三維點雲學習
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]


這篇文章使用了一種比較特殊的點雲處理方法。文章主要是使用了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文獻才能真正理解這方面的一些詳細內容。
總結
三維方向的深度學習在過去幾年里也已經發生了比較大的變化,已經從使用體素網格或者多視角圖像轉變為了直接使用點雲進行學習,並且性能方面也有了很大的提高。不過,這個領域也是近期才快速的發展起來,並且隨着三維傳感器的進一步普及,這個領域的相關研究會得到更多的關注。而且現在的大規模數據集基本上是關於自動駕駛的,但是可以想象三維深度學習在三維醫療影像、智能機器人等也會發揮很大的作用。
鏈接:https://zhuanlan.zhihu.com/p/46742217
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。