重读经典(点云深度学习开山之作):《Deep learning on point clouds for 3D scene understanding》(持续更新中)
本文介紹的是 PointNet 作者的博士論文:3D場景理解中的點云深度學習。從上圖可以看到,整個博士論文主要貢獻有兩塊:一是點云深度學習的網絡架構(PointNet 和 PointNet++);二是在3D場景理解中的應用(Frustum Pointnets 和 FlowNet3D)。在本文中,將會按照博士論文篇幅順序對 PointNet 和 PointNet++ 進行一次詳解介紹。關于后面兩章 3D 場景理解中的應用 感興趣的朋友可以看論文原文,這里就不介紹了。
文章目錄
- Abstract
- Acknowledgments
- Introduction & Background
- Deep Learning on Point Sets: PointNet
- Problem Statement
- PointNet Architecture
- Experiments
- Appendix
- From PointNet to PointNet++
- Problem Statement
- PointNet++ Architecture
- Experiments
- Appendix
- Conclusion and Outlook
- 參考文獻
Abstract
首先是論文摘要,可以看到摘要篇幅不長,主要有兩段:
- 第一段介紹點云是一種常用的幾何數據類型,在計算機視覺、計算機圖形學和機器人領域有著廣泛的應用。廉價的 3D 傳感器的出現使得點云數據可以廣泛獲得,而當前對自動駕駛汽車的興趣突顯了可靠和高效的點云處理的重要性。然而,由于點云自身格式的不規則,目前的卷積深度學習方法不能直接用于點云處理。大多數研究人員將點云數據轉換為規則的3D體素網格或圖像集合,這使得點云數據量變得巨大,同時也出現點云量化和其他問題。在本論文中,提出了一種新的神經網絡 (PointNet和PointNet++),可直接處理點云,同時考慮了點云輸入的排列不變性。網絡對物體分類和部件分割到語義場景解析的各種應用提供了統一的架構,同時對各種輸入擾動和數據損壞具有高效和魯棒性。理論分析表明網絡可以逼近任何連續的集合函數,并解釋了它的魯棒性。在 PointNet++ 中,我們進一步研究了點云中的局部內容,研究了 3D 掃描中采樣密度不均勻的挑戰,并設計了學習適應不同采樣密度的網絡層。
- 本文提出的架構打開了新的以 3D 為中心的場景理解方法。我們展示了如何將 PointNets 技術應用于機器人領域中兩個重要的感知問題:3D物體檢測 和 3D場景流估計。在 3D物體檢測 方面,我們提出了一種新的基于 frustum 的檢測框架,實現了點云中的 3D實例分割 和 3D非模態的box估計 。我們的模型,稱為 Frustum PointNets,得益于點云提供的精確幾何信息,能夠通過在輸入上應用非參數和數據驅動的幾何變換來規范化學習問題。在大規模的室內和室外數據集上進行評估,我們的實時檢測器都取得了最好的檢測效果。在場景流估計方面,我們提出了一種新的深度網絡 FlowNet3D,該網絡學習從兩幀點云中恢復 3D 運動流。與以往側重于二維表示和優化光流的工作相比,我們的模型直接優化了三維場景流,在實際 LiDAR 掃描的評估中顯示出巨大的優勢。由于點云的普遍存在,我們的體系結構并不局限于上述兩種應用,甚至不局限于三維場景理解。本文最后對其它潛在的應用領域和未來的研究方向進行了討論。
- 這里可以看到作者的摘要寫的還是很簡短的,前面介紹了設計的網絡結構,后面介紹了兩個具體感知應用。
Acknowledgments
下面是論文致謝,總共有五段:
- 作者第一段是感謝導師 Leonidas Guibas 教授 (Leo教授目前是美國兩院院士)。對我來說,Leo 是一位非凡的導師,也是一個學術榜樣。他總是保持純真,對新問題保持好奇心。我仍然感謝 Leo 對我的第一個項目的支持,這是小組中的第一個深度學習項目。自從那個項目以來,我們一直在一起學習和成長。現在我經常驚訝于 Leo 在這些新主題上的淵博知識,以及他擁有的深刻洞察力。非常感謝 Leo 經常提醒我要思考得更深,在研究中超越工程層面。最后但同樣重要的是,我感謝 Leo 給我的自由,無論是在選擇研究課題還是選擇職業道路上。Leo 給了我他的建議,但讓我決定我真正想做的是什么。 最后作者還感謝了論文閱讀委員會和答辯委員會們對論文的建議和評論。
- 第二段作者感謝的是博士期間一同工作的同學、同事。特別感謝的是 Hao Su,其也是 PointNet 共同一作和PointNet++ 作者之一。第三段作者感謝的是 Google 和 Nuro 公司,正是因為在這兩家公司實習,作者才去研究了點云上的深度學習以及物體檢測,作者也感謝了兩次實習的其他合作同事。第四段就是感謝家人,最后感謝了英偉達捐贈的 GPU 以及其它組織的支持。
Introduction & Background
論文前兩章導論和背景知識部分這里就不詳細介紹了,具體內容大家可以看論文原文。
首先是介紹研究背景,最近,我們觀察到許多新興的應用需要感知 3D 環境或與 3D 對象交互。例如,在自動駕駛中,為了做出駕駛決策,機器人汽車需要意識到周圍的行人和汽車,并理解他們的動作。在增強現實(AR)中,AR 眼鏡配備了深度攝像頭來感知和理解 3D 幾何圖形,以便在正確的位置顯示虛擬對象,例如冰箱門上的虛擬菜單。許多 3D 場景理解問題不能通過直接編程的方法來結局,因此需要數據驅動的方法來解決。最近深卷積神經網絡(CNNs)在 2D 圖像理解中的成功啟發了我們,我們也希望在 3D 數據理解中受益于深度學習,從而實現 3D深度學習。
然而,與用 2D像素數組表示的圖像不同,3D 具有許多常見的表示,如下圖所示:點云、多邊形結構、體素結構、深度圖等。其中,點云是從物體表面采樣的空間中的一組點,通常由激光雷達或深度相機等 3D 傳感器采集。在眾多的 3D 表示中,對于 3D 場景的理解,我們特別關注點云,原因有兩個。
- 首先,點云可能是最接近原始傳感器數據的表示形式。點云編碼來自傳感器的全部信息,沒有任何量化損失(如體積表示)或投影損失(如多視圖表示),因此是三維場景理解中是端到端學習的首選。
- 其次,點云在表示上非常簡單:它只是點的集合,避免了網格組合的不規則性和復雜性(如多邊形、多邊形大小和連通性的選擇),因此更容易學習。點云也不需要像在體積表示中那樣選擇分辨率,或者像在多視圖圖像中那樣選擇投影視點。
盡管點云其簡單性和普及性很強,但幾乎沒有任何關于點云的表示學習工作,大多數現有的點云特征都是針對特定任務手動制作的。近年來,用深度神經網絡處理點云的研究成果很少。然而,由于點云是不規則的,這些方法幾乎都是先將點云轉換為其他規則表示,然后再應用現有的深層網絡結構。
- 一個例子是將點云轉換為二進制占用網格(如果其中有點,則體素為1,如果為空,則為0),然后在體積網格上應用 3DCNN。然而,這存在非常高的空間和計算成本。在3DCNN 中,存儲和計算開銷隨著網格分辨率的增加呈三次曲線增長。更糟糕的是,由于掃描儀只從物體表面捕獲點,許多體素都是空的,因此浪費了大量的計算。由于昂貴的成本,大多數工作只使用非常粗糙的網格,例如分辨率為 30x30x30x30,這反過來會導致較大的量化誤差。
- 除了將點云體素化到體網格和使用 3D CNN,還可以將點云投影到 2D 平面上或從 2D 平面繪制 2D 圖像,然后使用流行的 2D CNN,但是,由于投影,某些3D信息會丟失,并且選擇哪個視點進行投影并不總是顯而易見的。
- 此外,人們可以首先從點云中提取手工制作的特征,然后使用簡單的全連接網絡來處理它們。然而,通過這種方式,特征學習是通過手工制作的特征來實現的。
由于所有這些轉換都有不足之處,一個吸引人的研究問題是:我們能否直接在點云上實現有效的特征學習? 答案是肯定的,下面作者就開始介紹了自己的研究工作(PointNet/PointNet++/Frustum PointNets/FlowNet3D),可以看作是摘要的擴充版,后面還會再詳細介紹這里就跳過了。
在背景知識部分:
- 作者介紹了所使用的數據集:MNIST、ModelNet40、ShapeNetPart、SHREC15、S3DIS、ScanNet、SUN RGB-D、FlyingThings3D、KITTI,可以看到作者博士期間的工作量還是很大的。
- 然后從五個方面介紹了相關工作:Point Cloud Descriptors、Deep Learning on Unordered Points、Deep Learning on Other 3D Representations、3D Object Detection、Scene Flow Estimation。背景知識部分這一章,作者寫的還是很詳細的,值得學習。
Deep Learning on Point Sets: PointNet
在本章,我們開始學習 PointNet。下圖是 PointNet 的應用,包括物體分類、部件分割、語義分割。雖然點云在表示上很簡單,但在實際處理中面臨著兩個挑戰。
- 首先,點云只是一組點,因此這些點的排列組合應是不變的,這句話其實是說在處理點云數據時無論這些點如何排列組合,所表示的物體都是確定的。
- 其次,還需要考慮剛體運動的不變性。即無論怎么進行旋轉平移操作,點云所表示的物體也都是確定的。
為了解決上面兩個問題,作者構造了一個由神經網絡組成的對稱函數,從而保證了它對輸入點云序列的不變性。與一般論文所不同的是,作者除了進行了實驗評估,還進行了理論分析,證明了所設計的網絡可以逼近任何連續的集合函數。更有趣的是,網絡學會了通過一組稀疏的關鍵點來總結輸入點云,根據可視化,關鍵點大致對應于對象的骨架。
Problem Statement
下面介紹下我們要處理的問題。假設點云數據集為 {Pi∣i=1,…,n}\left\{P_{i} \mid i=1, \ldots, n\right\}{Pi?∣i=1,…,n},每個點 PiP_iPi? 可以由坐標 (x,y,z)(x,y,z)(x,y,z) 以及其它特征通道來表示(如顏色等),這里為了簡化,每個點只包含坐標 (x,y,z)(x,y,z)(x,y,z) 通道。
對于物體分類任務,設計的網絡對 kkk 個候選類輸出 kkk 個分數;對于部件分割和語義分割,設計的網絡會輸出 n×mn \times mn×m 個分數,每一個點會有 mmm 個類別分值。
PointNet Architecture
先來看一下輸入的點云數據,它有三個主要的性質:
- 無序性。與圖像的像素數組或體素網格中的體素數組所不同,點云是一個無特定順序的點的集合。換句話說,一個網絡在處理 NNN 個點時應該能保證對這些點 N!N!N! 個排列組合輸入時保持不變。
- 點之間的相互作用。每個點并不是完全孤立的,它們與相鄰的點形成了一個有意義的子集。因此,模型需要能夠從鄰近的點捕獲局部特征。
- 剛體變換不變性。作為一個幾何體,網絡在物體經過不同剛體變換后學到的表征應該是不變的。例如,旋轉或平移所有的點不應該修改全部點的類體和每個點的分割結果。
下面著詳細紹下 PointNet 網絡結構。從下圖可以看到,分類網絡和分割網絡有很大一部分比例是共用的。整個網絡有三個關鍵模塊:
- 1)最大池化層 作為一個對稱函數聚合所有點的信息;
- 2)局部和全局特征組合結構;
- 3)兩個對齊網絡對齊輸入點云和點云特征。
- 無序點云對稱函數。為了讓模型對點云的排列組合保持不變,可以有三種辦法:1)對輸入的點云順序進行排序;2)使用 RNN 網絡,講輸入看作是一個序列,但是使用全局的排列組合來進行數據增強;3)使用簡單的對稱函數聚合每個點的信息。例如 +++ 和 ?*? 運算符是對稱二元函數,其實是我們學過的加法或乘法交換律。
我們的思想是通過對點集上的變換元素應用對稱函數來逼近定義在該點集上的通用函數,即:
f({x1,…,xn})≈g(h(x1),…,h(xn))f\left(\left\{x_{1}, \ldots, x_{n}\right\}\right) \approx g\left(h\left(x_{1}\right), \ldots, h\left(x_{n}\right)\right) f({x1?,…,xn?})≈g(h(x1?),…,h(xn?))
其實,f:2RN→R,h:RN→RKf: 2^{\mathbb{R}^{N}} \rightarrow \mathbb{R}, h: \mathbb{R}^{N} \rightarrow \mathbb{R}^{K}f:2RN→R,h:RN→RK$ , g:RK×?×RK?n→Rg: \underbrace{\mathbb{R}^{K} \times \cdots \times \mathbb{R}^{K}}_{n} \rightarrow \mathbb{R}g:nRK×?×RK??→R 是一個對稱函數。在實驗上,我們的基本模式很簡單,使用多層感知機來近似函數 hhh,ggg 是一個最大池化函數。使用這些基本模塊就可以構建一個簡單的 PointNet 網絡。如下圖所示。
Experiments
Appendix
From PointNet to PointNet++
Problem Statement
PointNet++ Architecture
Experiments
Appendix
Conclusion and Outlook
參考文獻
論文鏈接:Deep Learning On Point Clouds For 3D Scene Understanding
總結
以上是生活随笔為你收集整理的重读经典(点云深度学习开山之作):《Deep learning on point clouds for 3D scene understanding》(持续更新中)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 卖房有多少花活?小麦抵首付刚被叫停 西瓜
- 下一篇: Omniserv.exe - Omnis