pointnet與pointnet++

PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation

1. 做了啥?

  • 設計了一個新的深度網絡架構,適用於無序的三維點集
  • 展示了這個網絡在形狀部分分割和語義理解任務中該如何訓練
  • 對網絡的穩定性和效率性做了分析
  • 說選定的神經元在網絡中計算出的三維特徵,並對其性能進行直觀的解釋

2. 怎麼做的?

在這裏插入圖片描述

  • 設計了一個深度學網絡,這個網絡直接使用三維點雲(點集:n x 3, n個點每個點有三個屬性x, y, z,表示空間座標)作爲輸入

  • 對於分類任務:可以從三維模型中採樣一個點雲作爲輸入,也可以在實際場景中提前分割出來的點雲;對於k個類別,網絡會輸出k個相對應的分數。

  • 對於分割任務:輸入:可以是單個對象,也可以是實際場景的子空間;輸出:n x m的分數矩陣,表示每個點在m個類上的得分

  • 對於每一個N×3的點雲輸入,網絡先通過一個T-Net將其在空間上對齊(旋轉到正面),再通過MLP將其映射到64維的空間上,再進行對齊,最後映射到1024維的空間上。這時對於每一個點,都有一個1024維的向量表徵,而這樣的向量表徵對於一個3維的點雲明顯是冗餘的,因此這個時候引入最大池化操作,將1024維所有通道上都只保留最大的那一個,這樣得到的1×1024的向量就是N個點雲的全局特徵。

  • 如果做的是分類的問題,直接將這個全局特徵再進過MLP去輸出每一類的概率即可;

  • 但如果是分割問題,由於需要輸出的是逐點的類別,因此其將全局特徵拼接在了點雲64維的逐點特徵上,最後通過MLP,輸出逐點的分類概率。

三維點雲介紹:三維點雲指歐氏空間中的點集,表示一種幾何形狀,主要有一下三個特性

  1. 無序性。與圖像中的像素陣列不同的是,點雲不需要點用特定順序組成,這些點直接存儲順序是任意的
  2. 點之間的相互作用。這些來自與歐氏空間,點與點之間有距離關係,相鄰的局部點組合成一個有意義的子集,表示三維模型的局部結構。故網絡也需要能夠捕獲局部結構,以及局部結構之間的相互作用。
  3. 變換不變性。例如在旋轉、平移下不應該改變點雲形狀
  • T-Net對齊解決旋轉平移不變性;升維後用對稱函數解決無序性3維->64維->1024維;
  • 遺留了一個問題:點與點之間的關係沒有學到,所以在場景分割任務中效果一般。

pointnet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space

在這裏插入圖片描述

1. 改進特徵提取方法

pointnet++使用了分層抽取特徵的思想,把每一次叫做set abstraction。分爲三部分:採樣層、分組層、特徵提取層。首先來看採樣層,爲了從稠密的點雲中抽取出一些相對較爲重要的中心點,採用FPS(farthest point sampling)最遠點採樣法,這些點並不一定具有語義信息。當然也可以隨機採樣;然後是分組層,在上一層提取出的中心點的某個範圍內尋找最近個k近鄰點組成patch;特徵提取層是將這k個點通過小型pointnet網絡進行卷積和pooling得到的特徵作爲此中心點的特徵,再送入下一個分層繼續。這樣每一層得到的中心點都是上一層中心點的子集,並且隨着層數加深,中心點的個數越來越少,但是每一箇中心點包含的信息越來越多。

2. 解決點雲密度不同問題

由於採集時會出現採樣密度不均的問題,所以通過固定範圍選取的固定個數的近鄰點是不合適的。pointnet++提出了兩個解決方案。
在這裏插入圖片描述

  1. 如上圖左所示,在每一個分組層都通過多個尺度(設置多個半徑值) 來確定每一個組,並經過 pointnet提取特徵之後將多個特徵 concat 起來,得到新特徵。
  2. 如上圖右所示。左邊特徵向量是通過2個set abstraction後得到的,每次set abstraction的半徑不一樣。右邊特徵向量是直接對當前層中所有點進行pointnet卷積得到。並且,當點雲密度不均時,可以通過判斷當前patch的密度對左右兩個特徵向量給予不同權重。例如,當patch中密度很小,左邊向量得到的信息就沒有對所有patch中點提取的特徵可信度更高,於是將右特徵向量的權重提高。以此達到減少計算量的同時解決密度問題。

3.對採樣密度的魯棒性

在這裏插入圖片描述
可以發現,加上dropout(DP),本來他的作用是防止過擬合,但是如右圖的結果顯示DP對各個密度的數據都有更好的魯棒性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章