在3D Point Cloud Data上有效地使用深度學習取特徵 PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation

自從CNN在Image相關的task取得巨大突破之後,大家也開始嘗試著用類似方法處理3D Computer Vision相關的問題,今年的CVPR也特別開個一個3D Computer Vision的Track,可見這一塊越來越火熱。3D Computer Vision在Robotics或是自駕車領域十分重要,如何重建3D場景與物體、或是在3D空間中辨識物體樣態甚至追蹤,都是機器人或是自駕車做決策的重要模塊。一般提到3D相關的資料來源,目前常用的有RGB-D與Point Cloud:RGB-D是在原本的Image中加上一個Depth的channel,因此可以用常用的CNN架構做處理與學習;至於Point Cloud的Data,不論是用電腦自動Render產生的,或是用LiDAR sensor所採集的,所得到的資料都具有無序(Unordered Set)的特性,只是一群具有(x,y,z)座標的點所構成的。以下可以看到由自駕車的LiDAR Sensor所採集到的單一禎Point Cloud:
以上是用64環的LiDAR Sensor所採集的Data呈現的樣子,可以看出這樣的Data相較於Image非常的稀疏,若是想要用3D CNN在這樣的Data上去取得有用的特徵,就只能先把3D空間做Voxelization,切割成一個個的Voxel Grid,並且計算每個Grid裡的Point Cloud點的特徵,當作每個Grid的Input Channel(像是Image中的RGB channels),就可以放進3D CNN做Classification或是其他的Feature Learning,如下圖所示:
這樣的前處理有幾個大問題:一個是原本的資料太過稀疏,這樣許多Grid中的值都是0,不利於特徵學習;另一個是不管怎麼樣表示Grid中的Input Channel,都算是Hand-Crafted Feature,多多少少限制了Deep Learning Model Capacity。因此今天介紹的這篇來自Stanford的CVPR 2017 Paper,巧妙地解決了這個問題,直接用Raw Point Cloud作為Input放進Deep Learning Model取出有用的Feature,在Point Cloud Classification與Segmentation問題上都有很好的表現。
要怎麼有效處理一堆無序且稀疏的Point Set呢?首先作者點出了這樣的Point Set有幾個特徵:Unordered、Local and Global Interaction among points、Invariance under geometric transformations。作者設計的PointNet架構,裡頭有三個重要的modules,分別處理這三個問題。
  1. Symmetric Functions for Unordered Input:為了使設計的model具有對Input排序不變的特性,這邊用Max Pooling這樣的對稱函數直接將所有點的資訊集中在一塊。由以上的PointNet架構可以看出,在Max Pooling前有許多的Multi-Layer Perceptron (MLP),雖然參數是共享的,但是是對每一個點分開作用。原本有n個點,分別具有 (x,y,z) 的三維座標,但是經由許多層MLP的特徵轉換下,被轉換到1024維的高維空間中, 最後用Max Pooling一次集中所有資訊得到整個Point Cloud的Global Feature。作者也在附錄中詳細用數學證明了,只要轉換到的空間維度夠高 (ex. 這邊實驗中用的1024維),就能近似所有作用在Unorderd Set上可能的函數(符合Deep Learning Model的初衷)。
  2. Local and Global Information Aggregation:由上圖可以看出,Global Feature只能拿來作Classification Task,如果想要做Part Segmentation之類與Local Structure相關的問題,則需要將Local Feature(n x 64)與Global Feature做Concatenation,就可以同時考慮Local與Global的情況下,準確對每個點做出Class Prediction。
  3. Joint Alignment Network:為了對各種幾何空間轉換有不變的特性,作者設計了一個T-Net的架構,類似Image中的Spatial Transformer Network,這樣的T-Net可以在Input或是中間的Feature Layer中學習出有效的Affine Transformation Matrix,讓不同的Point Cloud Data的Feature可以對齊在一塊。
以下可以看到一些PointNet在不同Task下的結果:
這篇論文探討的很完整,關於數學的證明內容也比較深,但是High-Level來看這樣的Network,解決了長久以來Point Cloud Data不能有效處理的大難題,有點像是當初AlexNet或是VGG出世的感覺,小編看好之後應該會變成3D Point Set Data的通用架構。在Code的部分也已經有了Tensorflow和PyTorch的Implementation,建議看論文的同時看下Code,對細節會有更多的了解。另外作者最近也又出了一篇PointNet++,Stack多個PointNet架構,並提出了有效Hierarchical Grouping的方式,取出Low-Level to High-Level的特徵,對於Local Feature Representation有了更好的學習方式,有興趣也可以參考看看。
Code:
Share the joy
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

近期文章

近期迴響

彙整

分類

其它

Chien-Yi Wang Written by:

3 Comments

  1. 益达
    十二月 13, 2017
    Reply

    你好,在这篇文章中,我有几个问题想请教你一下,谢谢!
    1. 为什么文章中“对齐”是什么意思呢?点云的transformations为什么会改变结构呢?
    2. 对称函数中的那个 γ 和h()不知道如何理解,
    对于深度学习,只了解一点,因此对于论文,感觉看的很吃力,问题可能比较低级。谢谢你的回答

    • 十二月 13, 2017
      Reply

      您好,感謝您的回應。
      1. 關於對齊一詞是從原文中align翻譯過來的,可能造成一些誤解請見諒,這邊的T-Net Transformation可以學習如何旋轉或是位移點雲,讓點雲在空間中的樣態一致,減少特徵學習的困難。有興趣也可以參考"Spatial Transformer Network“,概念應該是相似的。
      2. h continuous function即為在max pooling之前所做的所有mlp的空間轉換,將原本三維的點雲,投射到高維空間。Gamma continuous function則為max pooling之後的mlp操作,最後得到輸出的結果(classification)。
      這篇論文只用了最簡單的深度學習架構mlp,其貢獻在於如果證明只用mlp的操作就能近似所有作用在點雲集合上的函數,證明較為複雜難懂,跟其他深度學習的工作比起來會稍微吃力是正常的。有其他問題歡迎再留言 🙂

  2. 益达
    十二月 14, 2017
    Reply

    大哥。谢谢你的回复啊。。我搞懂了一些问题提。我是一个新手,开始学习点云没多久。对于点云的分割与语义理解只从pcl官网上学习了一些传统的方法! 对于深度学习,也只是了解一点皮毛,还没有系统的深入学习过!我们老师也不太懂,我的同学也没有做这方面的研究,!看到大哥的文章才能触类旁通,如果可以的话,可以给我一个邮件或者联系方式吗?我想想大哥学习学习交流交流~~
    我的邮件【wjszwzyd@gmail.com】
    ----------------------------------------------------------------------------
    如果大哥可以的话,可以给一点这方面的学习指导吗?cv领域实在太大了。我前面两个月看了看RGB图的场景理解,现在又学习点云。实在不知道如何学习了!!
    ----------------------------------------------------------------------------------
    【对于这篇文章。我还有几个问题】
    1. 对齐矩阵的目的是为了让变换后的矩阵的不变性不变,也就是说只能进行平移,旋转,均匀缩放,对于投影变换之类破坏结构的变换不能操作是吗?
    2. 为什么要将这个矩阵近似为正交矩阵?不理解为什么正交矩阵可以不损失信息?【矩阵论学习的不好】
    3. 在和成函数中,对于点集合的定义,为什么s为【0,1】^{m},这个代表什么意思呢?m是一个点集合的数量吗?
    4. h是一个mlp训练的函数,他的输入向量就是特征提取后的64维的对齐后的向量吗?通过h升维到1024吗?在那个不等式中,f(s)只说了是计算Hausdorff距离的,那个max{h(xi)}代表max pooling吗?那么这个不等式是为了给每个向量分配所属的点集合s吗?
    然后使用mlp将这些点集合分类?

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *