轉載:https://zhuanlan.zhihu.com/p/44809266
轉載:https://blog.csdn.net/ShuqiaoS/article/details/83659553
1 簡介
此系列論文首先提出了一種新型的處理點雲數據的深度學習模型-PointNet,並驗證了它能夠用於點雲數據的多種認知任務,如分類、語義分割和目標識別。不同於圖像數據在計算機中的表示通常編碼了像素點之間的空間關系,點雲數據由無序的數據點構成一個集合來表示。因此,在使用圖像識別任務的深度學習模型處理點雲數據之前,需要對點雲數據進行一些處理。目前采用的方式主要有兩種:
1、將點雲數據投影到二維平面。此種方式不直接處理三維的點雲數據,而是先將點雲投影到某些特定視角再處理,如前視視角和鳥瞰視角。同時,也可以融合使用來自相機的圖像信息。通過將這些不同視角的數據相結合,來實現點雲數據的認知任務。比較典型的算法有MV3D和AVOD。
2、將點雲數據划分到有空間依賴關系的voxel。此種方式通過分割三維空間,引入空間依賴關系到點雲數據中,再使用3D卷積等方式來進行處理。這種方法的精度依賴於三維空間的分割細膩度,而且3D卷積的運算復雜度也較高。
不同於以上兩種方法對點雲數據先預處理再使用的方式,此論文的作者提出了直接在點雲數據上應用深度學習模型的方法,稱為PointNet。
2 理論基礎
點雲數據是在歐式空間下的點的一個子集,它具有以下三個特征:
無序
點雲數據是一個集合,對數據的順序是不敏感的。這就意味這處理點雲數據的模型需要對數據的不同排列保持不變性。目前文獻中使用的方法包括將無序的數據重排序、用數據的所有排列進行數據增強然后使用RNN模型、用對稱函數來保證排列不變性。由於第三種方式的簡潔性且容易在模型中實現,論文作者選擇使用第三種方式,既使用maxpooling這個對稱函數來提取點雲數據的特征。
點與點之間的空間關系。
一個物體通常由特定空間內的一定數量的點雲構成,也就是說這些點雲之間存在空間關系。為了能有效利用這種空間關系,論文作者提出了將局部特征和全局特征進行串聯的方式來聚合信息。
不變性。
點雲數據所代表的目標對某些空間轉換應該具有不變性,如旋轉和平移。論文作者提出了在進行特征提取之前,先對點雲數據進行對齊的方式來保證不變性。對齊操作是通過訓練一個小型的網絡來得到轉換矩陣,並將之和輸入點雲數據相乘來實現。
作者對他們模型進行了進一步的理論分析,並提出了兩個定理,PointNet的理論基礎:
定理1證明了PointNet的網絡結構能夠擬合任意的連續集合函數。其作用類似證明神經網絡能夠擬合任意連續函數一樣【1】,在這里γ和h可以認為是多層感知模型(MLP)網絡,MAX可以使用MaxPooling取代。同時,作者發現PointNet模型的表征能力和maxpooling操作輸出的數據維度(K)相關,K值越大,模型的表征能力越強。
定理2(a)說明對於任何輸入數據集S,都存在一個最小集Cs和一個最大集Ns,使得對Cs和Ns之間的任何集合T,其網絡輸出都和S一樣。這也就是說,模型對輸入數據在有噪聲(引入額外的數據點,趨於Ns)和有數據損壞(缺少數據點,趨於Cs)的情況都是魯棒的。定理2(b)說明了最小集Cs的數據多少由maxpooling操作輸出數據的維度K給出上界。換個角度來講,PointNet能夠總結出表示某類物體形狀的關鍵點,基於這些關鍵點PointNet能夠判別物體的類別。這樣的能力決定了PointNet對噪聲和數據缺失的魯棒性。如圖所示,作者通過實驗列出了PointNet學習到的以下幾個物體的關鍵點。
3 PointNet系列模型結構
3.1 PointNet
PointNet的模型結構如上圖所示,其關鍵流程介紹如下:
1、輸入為一幀的全部點雲數據的集合,表示為一個nx3的2d tensor,其中n代表點雲數量,3對應xyz坐標。
2、輸入數據先通過和一個T-Net學習到的轉換矩陣相乘來對齊,保證了模型的對特定空間轉換的不變性。
3、通過多次mlp對各點雲數據進行特征提取后,再用一個T-Net對特征進行對齊。
4、在特征的各個維度上執行maxpooling操作來得到最終的全局特征。
5、對分類任務,將全局特征通過mlp來預測最后的分類分數;對分割任務,將全局特征和之前學習到的各點雲的局部特征進行串聯,再通過mlp得到每個數據點的分類結果。
3.2 PointNet++ 論文鏈接:https://papers.nips.cc/paper/7095-pointnet-deep-hierarchical-feature-learning-on-point-sets-in-a-metric-space.pdf
While PointNet uses a single max pooling operation to aggregate the whole point set, our new architecture(PointNet++) builds a hierarchical grouping of points and progressively abstract larger and larger local regions along the hierarchy.這里PointNet++是由一系列set abstraction level組成,並且在不同尺度上進行link concat。
PointNet提取特征的方式是對所有點雲數據提取了一個全局的特征,顯然,這和目前流行的CNN逐層提取局部特征的方式不一樣。受到CNN的啟發,作者提出了PointNet++,它能夠在不同尺度提取局部特征,通過多層網絡結構得到深層特征。PointNet++由以下幾個關鍵部分構成:
采樣層(sampling)
激光雷達單幀的數據點可以多達100k個,如果對每一個點都提取局部特征,計算量是非常巨大的。因此,作者提出了先對數據點進行采樣。作者使用的 采樣算法是最遠點采樣(farthest point sampling, FPS),相對於隨機采樣,這種采樣算法能夠更好地覆蓋整個采樣空間。
組合層(grouping)
為了提取一個點的局部特征,首先需要定義這個點的“局部”是什么。一個圖片像素點的局部是其周圍一定曼哈頓距離下的像素點,通常由卷積層的卷積核大小確定。同理,點雲數據中的一個點的局部由其周圍給定半徑划出的球形空間內的其他點構成。 組合層的作用就是找出通過采樣層后的每一個點的所有構成其局部的點,以方便后續對每個局部提取特征。
特征提取層(feature learning)
因為PointNet給出了一個基於點雲數據的特征提取網絡,因此可以用mini-PointNet將局部區域的圖形編碼成特征向量。值得注意的是,雖然組合層給出的各個局部可能由不同數量的點構成,但是通過PointNet后都能得到維度一致的特征(由上述K值決定)。
上述各層構成了PointNet++的基礎處理模塊。如果將多個這樣的處理模塊級聯組合起來,PointNet++就能像CNN一樣從淺層特征得到深層語義特征。對於分割任務的網絡,還需要將下采樣后的特征進行上采樣,使得原始點雲中的每個點都有對應的特征。這個上采樣的過程通過最近的k個臨近點進行插值計算得到。完整的PointNet++的網絡示意圖如上圖Figure2所示。
▎不均勻點雲數據的特征提取 || 在非均勻采樣密度下的魯棒特征學習
非均勻采樣密度:non-uniform sampling density
不同於圖片數據分布在規則的像素網格上且有均勻的數據密度,點雲數據在空間中的分布是不規則且不均勻的。雖然PointNet能夠用於對各個點雲局部提取特征,但是由於點雲在各個局部均勻性不一致,很可能導致學習到的PointNet不能提取到很好的局部特征。比如說,在越遠的地方激光雷達數據通常變得越稀疏,因此在稀疏的地方應該考慮更大的尺度范圍來提取特征。為此,作者提出了兩種組合策略來保證更優的特征提取。
多尺度組合(multi-scale grouping, MSG):
比較直接的想法是對不同尺度的局部提取特征並將它們串聯在一起,如下圖(a)所示。但是因為需要對每個局部的每個尺度提取特征,其計算量的增加也是很顯著的。
多分辨率組合(multi-resolution grouping, MRG):
為了解決MSG計算量太大的問題,作者提出了MRG。此種方法在某一層對每個局部提取到的特征由兩個向量串聯構成,如下圖(b)所示。第一部分由其前一層提取到的特征再次通過特征提取網絡得到,第二部分則通過直接對這個局部對應的原始點雲數據中的所有點進行特征提取得到。
訓練時,為了保證網絡能夠適應不同的點雲密度,論文作者采用了隨機選取的dropout概率θ,其范圍在[0,p]之間,其中p≤1。實際操作中,為了避免產生空集,作者取p=0.95。這兩個結構中,MSG的計算量非常大,因此作者提出了其替代結構MRG。
分割問題下的點雲特征傳遞(特征之間的skip link 和上采樣運算)
經過了前面的做法后,點雲內包含的點的數量相比較原始輸入是減小了的。因此,對於像分割這一類問題,就需要將點的個數恢復成原始水平,這里采取的是基於距離插值的層級傳遞策略,並且通過level直接跳躍鏈接起來方法(We adopt a hierarchical propagation strategy with distance based interpolation and across level skip links)。論文中采取基於k近鄰的距離加權平均的逆運算(inverse distance weighted average)的方法實現插值, 論文中默認取p=2,k=3,公式如下:
3.3 Frustum-PointNet
上述的PointNet和PointNet++主要用於點雲數據的分類和分割問題,Frustum-PointNet(F-PointNet)將PointNet的應用拓展到了3D目標檢測上。目前單純基於Lidar數據的3D目標檢測算法通常對小目標檢測效果不佳,為了處理這個問題,F-PointNet提出了結合基於圖像的2D檢測算法來定位目標,再用其對應的點雲數據視錐進行bbox回歸的方法來實現3D目標檢測。F-PointNet的網絡結構如下圖所示。
可以看到,F-PointNet主要由以下幾部分構成:
視錐生成(frustum proposal):
首先通過2D目標檢測器來定位圖片中的目標以及判斷它們的類別。對每一個檢測到的目標,通過標定好的傳感器的內參和它們之間的轉換矩陣得到其對應的點雲數據中的各點,即點雲視錐。作者使用的2D目標檢測模型是基於VGG網絡的FPN作為特征提取器,並用Fast R-CNN來預測最終的2D bbox。
3D實例分割(3D instance segmentation):
對每個得到的點雲視錐,通過旋轉得到以中心視角為坐標軸的點雲數據。對轉換后的點雲數據用PointNet(或PointNet++)進行實例分割。實例分割是一個二分類問題,用於判斷每個點屬於某個目標或者不屬於。
3D邊界框回歸(3D box estimation):
將上一步實例分割的結果作為mask得到屬於某個實例的所有點雲,計算其質心作為新的坐標系原點。通過一個T-Net進行回歸得到目標質心和當前坐標原點的殘差。將點雲平移到計算得到的目標質心后,通過PointNet(或PointNet++)對3D bbox的中心、尺寸和朝向進行回歸得到最終的輸出。此步驟采用的回歸方式和Faster R-CNN中類似,不直接回歸,而是回歸到不同尺寸和朝向的錨點(anchors)。
綜上所述,F-PointNet是一個多步驟的3D目標檢測算法。如下圖所示,為了應對點雲數據中各個目標的視角不變性和得到更准確的bbox回歸(通過縮小需要回歸的值的取值范圍),算法需要進行三次坐標轉換。模型的loss和2D的目標檢測一樣是包含分類以及回歸的多任務loss。同時,作者提出了一種被稱為corner loss的損失函數來對目標的中心、朝向和大小進行聯合優化,避免由於某一方面的不准確而主導loss。
參考資料
- Universal_approximation_theorem
- http://www.cvlibs.net/datasets/kitti/eval_object.php?obj_benchmark=3d
- PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation
- PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space
- Frustum PointNets for 3D Object Detection from RGB-D Data