點雲及其經典論文介紹


這篇博客會介紹點雲的基本知識,重點介紹最近兩年發表的部分經典論文,有什么建議歡迎留言!

點雲基本介紹

點雲是某個坐標系下的點的數據集,包含了豐富的信息,可以是三維坐標X,Y,Z、顏色、強度值、時間等等。下面的圖表分別展示了點雲在三維空間可視化以后的效果和數據格式。點雲的數據獲取方式有很多種,比較常見的是三維激光掃描儀進行數據采集,它有三大類:

  • 星載(星載LiDAR采用衛星平台,運行軌道高、觀測視野廣,基本可以測量到地球的每一個角落,為三維控制點和數字高程模型的獲取提供了新的途徑,有些星載激光雷達還具有觀察整個天體的能力)
  • 機載:機載主要借助無人機(UAV/UAS)進行大規模的點雲數據采集。
  • 地面分為三小種:地上三維激光掃描、車載MMS、手持激光掃描。

avatar

x y z
0.07388 0.16975 -0.19326
0.15286 0.15050 0.24355
0.18606 0.15050 0.29081

從上面的數據示例可以看出,點雲本質上是一長串點(Nx3矩陣,其中n是點數),這帶來兩個問題。第一,在幾何上,點的順序不影響它在空間中對整體形狀的表示,例如,相同的點雲可以由兩個完全不同的矩陣表示,如下圖所示。我們希望不論點雲順序怎樣,模型可以從中得到相同的特征。第二,點雲在空間中經過剛性變換后,如旋轉或者平移,點雲的坐標會變。有時我們為了方便對點雲做處理(如分類等),需要將其旋轉到正面或者側面(做旋轉),此時,模型得到的點雲數據(N*3矩陣)將會完全不同。我們希望點雲做變換之后不會影響模型的結果。
avatar

傳統的點雲處理方式包括兩大類:

  • 將點雲數據投影到二維平面。此種方式不直接處理三維的點雲數據,而是先將點雲投影到某些特定視角再處理,如前視視角和鳥瞰視角。同時,也可以融合使用來自相機的圖像信息。通過將這些不同視角的數據相結合,來實現點雲數據的認知任務。比較典型的算法有MV3D和AVOD。
  • 將點雲數據划分到有空間依賴關系的體素(voxel)。此種方式通過分割三維空間,引入空間依賴關系到點雲數據中,再使用3D卷積等方式來進行處理。這種方法的精度依賴於三維空間的分割細膩度,而且3D卷積的運算復雜度也較高。

接下來我們會介紹從17年至今比較經典的關於點雲的論文,包括PointNet,PointNet++,GeoNet,Kd-Net、SO-Net以及做數據上采樣的PU-Net。

PointNet

此處是PointNet的位置

PointNet++

此處是PointNet++的位置

GeoNet

  • 論文名 GeoNet: Deep Geodesic Networks for Point Cloud Analysis
  • 作者 Tong He,Haibin Huang,Li Yi

GeoNet是一種基於測地距離的點雲分析深度網絡,發表在2019年的CVPR上。論文貢獻包括兩個:開發了一種數據表示以及提出了如何將其運用到下游任務中的方法。為了方便理解論文內容,我們首先來介紹一下測地距離這個概念。

測地距離

我們先從點雲的研究任務說起。點雲的形狀分析是點雲的重要任務之一,主要包括三個方面的特征,集合特征、統計特征和拓撲特征。集合特征主要有法向量、曲率等,統計特征主要包括模型頂點間的集合關系、頂點的曲率分布等,拓撲特征主要有突出的特征點、臨界點、骨架、Reeb圖等,其中骨架是對點雲主要特征的一種可視化描述,符合人類的視覺特征。
從目前已有的工作來看,拓撲特征是點雲的重要特征之一,對點雲的分類、簡化、檢索等研究有重要的作用。尋找提取點雲拓撲特征的簡單、有效、快速的方法對點雲的形狀分析與理解具有重要的意義,測地線就是其中的一種。
測地線是連接曲面上給定的兩點之間的最短路徑,測地線的長度就是這兩點之間的測地距離。根據計算結果的精確性,三維模型的測地距離的計算方法可以分為兩大類:精確的方法和近似的方法。可以看做是圖論上計算兩個點之間的最短路徑的計算方法,采用dijkstra等。

GeoNet計算測地距離

GeoNet其實就是利用網絡來計算測地距離。我們假設\(\chi = \{ x_{i} \}\)表示點雲,每個點的維度為3 。那么我們可以為點\(x_{i}\)定義它的鄰居節點為\(B_{r}(x_{i})=\{ x_{j}|d_{E}(x_{i},x_{j}) \le r\}\) 。其中\(d_{E}(x_{i},x_{j})\)表示兩個節點之間的歐式距離。也就是說將\(x_{i}\)為球心,半徑為r內的節點划為它的鄰居節點。這是GeoNet關於鄰域的定義。基於此我們繼續定義\(G_{r}(x_{i})=\{ g_{i,j}=d_{G}(x_{i},x_{j})|x_{j} \in B_{r}(x_{i}) \}\),其中\(d_{G}表示測地距離\),即\(G_{r}(x_{i})\)表示 \(x_{i}\)到鄰域內每個點的測地距離的集合。GeoNet的目標是利用神經網絡擬合映射關系:\(f:x_{i} \to G_{r}(x_{i})\),它的網絡結構如下圖所示。
avatar
如圖所示,GeoNet由兩個模塊組成:特征提取模塊以及測量匹配模塊。其中特征提取模塊利用PointNet++提取點雲的局部特征,再將其輸入解碼器,同時還將原始的點雲輸入解碼器(skip connection),這樣解碼器可以對點雲的局部特征和總體特征做處理。測量匹配模塊利用特征抽取模塊得到的特征向量為每個節點計算其鄰域測地距離。但該模塊的目的並不是計算出准確的測地距離,而是在模型不斷擬合測地距離的過程中,其參數矩陣會隱含的提取出一些特征。(筆者私以為,GeoNet的作用就是進行特征提取,在訓練模型計算測地距離的過程中,模型的參數包含了點雲的一些特征)

論文中還詳細介紹了GeoNet如何與下游任務:分類、分割等做融合,並給出了示例。

Kd-Net

  • 論文名 Escape from Cells: Deep Kd-Networks for the Recognition of 3D Point Cloud Models
  • 作者 Roman Klokov,Victor Lempitsky

Kd-Net是一種基於Kd-tree的網絡,我們先對Kd-tree加以介紹。

Kd-tree

KD樹是從二叉搜索樹發展來的,是一種高維索引樹形數據結構,常用於大規模高維數據密集的查找比對的使用場景中,主要是最近鄰查找以及近似最近鄰查找,在CV中主要是圖像檢索和識別的高維特征向量的查找和比對。
我們舉例講述如何構建一個三維的KD樹。我們可以在第一層選擇用節點的第一維數據作為分類依據,第二層用第二維數據,第三層用第三維數據,第四層用第一維數據,以此類推。用圖中的數據來說明:

  • 根節點為(3,1,4),分類依據為3。
  • 拿到第二個數據(2,3,7),先與根節點(3,1,4)比較,第一層節點的分類維度為一,(2,3,7)的第一維數據小於根節點的第一維數據,所以下一步與根節點的左節點做比較,發現左節點為空,將(2,3,7)放在左節點。
  • 拿到第三個數據(2,1,3),先與根節點(3,1,4)比較,第一層節點的分類維度為一,(2,1,3)的第一維數據小於根節點的第一維數據,所以下一步與根節點的左節點做比較。左節點為(2,3,7),第二層節點的分類維度為二,(2,1,3)的第二維數據比(2,3,7)的第二維數據小,下一步與其左節點作比較。左節點為空,將(2,1,3)插入該點。
    avatar
    KD樹構建過程
    avatar
    二維KD樹的表示方法

利用Kd_tree構建Kd-net

了解了如何構建Kd-tree后,我們來看如何根據點雲構建Kd-tree進一步組成Kd-net。
下圖左邊是建好的Kd-tree,編號為8-15的是8個數據點。可以看到紫色的是第一次切割,藍色和紅色是第二層,綠色和橙色(或紅色?)是第三層。該示意圖用二維展示了三維點雲的kd-tree,在三維空間中,切割的方向是x,y,z軸。為了將點雲向量化,作者先用預訓練好的數據將葉子節點(8、9、12、13、14、15)向量化,然后根據公式逐層向上計算每個節點的向量表示,直到所有的節點都被向量化。
圖中的右半部分是Kd-net的結構圖,其中灰色的條表示網絡的節點,中間的圓圈是網絡的參數,第一層是所有數據點的向量表示。網絡經過一次前向傳播得到一個特征向量,即圖中標號為1的節點,該節點提取了所有數據的特征。標號為1的特征向量經過一個全連接層得到節點0,即分類結果。其中,相同顏色的圓圈表示網絡中的共享參數。節點之間共享參數的條件為:在Kd-tree中是同一層,且分割的方向都相同。可以看到節點8、9、12、13、14、15在同一層且分割的方向都相同:平行於y軸。
avatar
kd-tree和kd-net
avatar
kd-tree向量化公式

SO-Net

  • 論文名 SO-Net: Self-Organizing Network for Point Cloud Analysis
  • 作者 Jiaxin Li ,Ben M.Chen Gim Hee Lee

SO-Net是一種用於無序點雲深度學習的置換不變網絡結構。它有如下兩個特點:

  • SO-Net通過構建自組織映射(SOM)來模擬點雲的空間分布。
  • 基於SOM,SO-Net對單個點和SOM節點進行分層特征提取,最終用單個特征向量來表示輸入點雲。

在識別點雲重建,分類,對象部分分割和形狀檢索等任務中,So-Net網絡表現出的性能與最先進的方法相似或更好。另外,由於所提出的架構的並行性和簡單性,所以訓練速度比現有的點雲識別網絡快得多。這篇論文發表在2018年的CVPR上。

理解這篇文章的重點在於了解自組織網絡,我們先介紹什么是自組織網絡,再進一步介紹自組織網絡如何應用到點雲數據上。

自組織網絡

自組織(競爭型)神經網絡的結構一般由輸入層和競爭層構成,兩層之間的各個神經元實現雙向連接,而且網絡之間沒有隱含層,有時候競爭層各個神經元之間還存在橫向連接,其結構圖如下所示。學習算法上,它模擬生物神經元之間的興奮、協調與抑制、競爭等作用的信息處理來指導神經元競爭對輸入模型響應的機會,最后僅有一個神經元稱為競爭的勝利者,這一神經元則表示對輸入模型的分類。SOM一般可以用於分類和聚類等任務。

avatar
SOM是一種自組織神經網絡,它定義了獨特的激活神經元選擇策略、權重調整方法等。SOM的最重要的特點是可以做保序映射。1989年Kohonen給出一個SOM網的著名應用實例:把不同的動物按照其屬性映射到二維輸出平面上,使屬性相同的動物在SOM網輸出平面上的位置也相近。每種動物的輸入為一個29維的向量,前16個分量采用獨熱編碼,代表當前輸入的是哪一個動物,后13個分量是該動物的屬性值。最終的輸出結果如下圖所示,可以看出,屬性相同的動物挨在一起。即SOM將輸入空間壓縮並保留其拓撲空間映射在二維平面上。因此SOM可以用於數據壓縮和特征提取等任務。
avatar
我們可以用一個例子形象化的理解SOM擬合數據的過程。如下圖所示,藍色部分是訓練數據的分布,白色的小點是從該分布中抽取得到的當前訓練數據。首先SOM隨機的分布在數據空間中,我們選擇最接近當前訓練數據的SOM作為獲勝節點,用黃色突出顯示。選出獲勝節點后,我們更新獲勝節點及其周圍節點的參數,如圖中的第二個狀態所示,獲勝節點及其周圍節點被拉向訓練數據。經過都次迭代后,SOM網格趨向於接近訓練數據的分布。
avatar

SO-Net

將SOM應用到點雲數據上,效果如下圖所示。可以看到,剛開始SOM數據點是隨機分布在空間中,經過一段時間的訓練可以可以擬合三維飛機形狀的數據分布。
avatar
可知,SOM可以擬合點雲的數據分布。基於此,作者設計了SO-Net,具體結構如下圖所示。輸入N3的點雲數據,構建mm的SOM矩陣提取數據特征后,經過歸一化,特征提取,和池化等操作后,得到m*384的特征矩陣,在經過全連接層和池化層,得到輸入數據的特征向量,進一步做分類和分割。

(這邊的具體過程沒太看懂,感覺論文講的有點混亂,符號似乎也有點問題,比如在做歸一化的時候,是不是km*3?如果有看懂的小伙伴請留言謝謝!)
avatar

PU-Net

  • 論文名 PU-Net: Point Cloud Upsampling Network
  • 作者 Lequan Yu,Xianzhi Li,Chi-Wing Fu等

PU-Net在點雲上進行上采樣,即輸入一個點雲,輸出一個更密的點雲,且它落在輸入點雲隱含的幾何體(比如表面)上。PU-Net的核心思想,是學習到每個點多個粒度(從局部到全局)下的特征,再在特征空間中擴大點集,最后將擴大的點集映射回三維。提取特征的方法基於PointNet++。其網絡結構如下圖所示:
avatar

如圖所示,PU-Net主要分為四個過程:

  • Patch Extraction:這一過程其實是提取點雲的若干個部分。在模型表面上隨機選擇M個中心點,然后指定一個測地線距離d,將測地線距離范圍內的點和中心點一起作為一個Patch。采用不同的測地線距離d可以形成不同尺寸的patch。
  • Point Feature Embedding:這一過程包括兩個階段,特征提取和特征融合。PU-Net采用PointNet++進行特征提取,即先對數據進行下采樣,然后學習特征。針對多個層次的特征,PU-Net采用三元插值算法進行特惠裝呢個融合,圖中綠色的部分即為通過紅色的數據點插值得到的數據。
  • Feature Expansion:特征擴展的目的是將NC的特征矩陣擴展為rNC,其中r是上采樣率。我們可以先將NC擴展到rNC,在通過兩個11的卷積核學習特征,再合並為一個rNC2的特征矩陣。
  • Coordinate Reconstruction:坐標重建的過程是將擴大的特征空間再映射回三維空間的過程。通過多個全連接層,將rNC2的矩陣轉化為rN3。

在這個過程中,值得一提的是,PU-Net為了使新生成的點均勻分布在數據表面,設計了兩種損失函數:

  • 重建損失:為了使數據分布在數據模型表面。采用Earth Move Distance衡量生成的點雲和ground truth之間的距離。其中\(\phi\)是一個從生成點雲到ground truth的雙射函數。
    公式為:$$L_{rec}=d_{EMD}(S_{p},S_{gt})=min_{\phi : S_{p}\to S_{gt}} \sum_{x_{i}\in S_{p}} | x_{i}-\phi(x_{i}) |_{2}$$
  • 排斥損失:如果只有重建損失,那么從一個點派生出來的r個點可能會聚集在一起,為了使這些點分開,需要增加排斥損失,其中距離越大,公式中的權重越大。
    公式為:$$L_{rep}=\sum^{\hat{N}}{i=0} \sum{i'\in K(i)} \eta (| x_{i'} -x_{i}|)w(| x_{i'}-x_{i} |)$$

總損失的計算公式為:

\[L(\theta )= L_{rec}+\alpha L_{rep} +\beta \| \theta \|^{2} \]

其中\(\beta \| \theta \|^{2}\)是正則化項。

PU-Net的效果圖如下所示:
avatar
可以看出,它可以補全數據點中殘缺的部分,上采樣的效果非常好。

持續更新...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM