3D Deep Learning 入門(一)- Deep learning on regular structures


Posted by Po-Jen on 2020-10-18

前言

3D Deep Learning 的應用很廣泛,相關的研究也越來越多,要追上這些研究不是一朝一夕就能做到,但只要持之以恆,也能跟上,今天要透過 CVPR 2017 的 3D Deep Learning tutorial 影片來入門,因為整個 tutorial 長達三個小時,所以我把文章切成三份,今天是第一份 - 如何對具有 regular structure 的 3D data 做 deep learning。

這是 CVPR 2017 3D Deep Learning tutorial 的影片,想深入看完的讀者可以參考:

CVPR 2017 3D Deep Learning Tutorial

3D data 的應用

首先,我們知道 3D data 現在的應用很廣泛,尤其在蓬勃發展的自駕車和 AR/VR 領域:

再加上近年來 Deep Leanrning 正夯,這也就促成了 3D Deep Learning 的相關研究。

3D DL 研究問題的大致分類

3D DL 研究問題可以大致分成三類:

  1. 3D geometry analysis:例如辨識一坨 3D data 是什麼物體、辨識一坨 3D data 由哪些部分組成、3D data registration 等等
  2. 3D-assisted image analysis:利用 3D data 來輔助 image 分析,例如 cross-view image retrieval、intrinsic decomposition 問題。
  3. 3D systhesis:例如從一張照片產生出 3D data,或是從殘缺的 data 還原出完整的 data。

3D data representation

3D data 跟 2D image 的一個重要不同之處在於,3D data 有很多種 representation 的方法,所以在研究 3D DL 問題時,多了一個自由度(如果你是 researcher,今天想要辨識一個 3D data 是什麼物體,你會選什麼表示法來達到最好的 accuracy 呢?):

如果要分類的話,大致又有兩類:

所以就產生了很豐富的各種研究:

最直覺的想法,我們能否做 3D CNN?

如果是 rasterized form(有固定的結構),就可以做,不過會有其他挑戰,之後會說明:

如果是 irregular form,那當然就沒辦法:

Multi-view representation 的研究介紹

Multi-view representation 的基本想法有點像反向的 structure from motion,用很多張 2D image 儲存 3D 資訊:

Classification - Multi-view CNN

首先,讓我們來看看 classification 問題吧。

這個部分要介紹的研究是 Multi-view CNN,基本概念是,我們可以把一個 3D model 從很多個角度各拍一張照,利用這多張影像中來產生一個 feature vector,再用一個 softmax 層得到各種 class 的機率:

要怎麼產生 feature vector 呢?最直覺的做法當然就是 CNN,而 MVCNN 就分別讓 12 張影像都各自通過一個 CNN:

看到這邊可能會有一個問題,這個方法能做到 orientation-invariant 嗎?他們的做法是讓 CNN_1 的每個 branch 都 share 同樣的 parameters,讓 CNN 自己想辦法學到 orientation-invariant 的 feature。

MVCNN 在當時也算是 state-of-the-art 的方法:

Part segmentation - Projective CNN

接下來要討論的問題是 part segmentation,這個問題的目的是要把物體中的各組成部分切出來:

有一種做法跟 MVCNN 的概念很像,就是從很多不同的角度去拍 3D Shape,然後分別通過各自的 FCN,投影到同樣的 surface,之後再切出各個 part:

其中 FCN 的架構是長這樣:

這個方法有一些缺點,像太多張圖會有 redundancy、slow to train 等等:

Multi-view representation 的一些研究難點

Volumetric representation 的研究介紹

Volumetric representation 的常見來源

因為是 volumetric,做 3DCNN 就很直覺

3DCNN 的方法因為 voxelize 後的 loss,不敵 MVCNN

下圖中的 3DShapeNet 跟 VoxNet 都是 3DCNN 的方法:

太 sparse 也是個問題

以下圖來說,最右邊的 voxel grids 有最高的 resolution,但其中只有 2.41% 的 grid 有 data:

你想想看如果你做 3D CNN,但有一堆 weight 接到的 input data 是空的,那這樣是不是很難 train?

一個較 compact 的 representation - Octree

所以有研究者想到可以用 octree 來儲存 input,藉此解決資料太 sparse 的問題:

octree 的表示法也產生了一些研究 - O-CNN、OctNet

但因為 octree 中的 neighbor 不是空間中的 neighbor,所以需要更多實作上的技巧

似乎還有很多深入的細節可以探討,如果你有興趣可以去看看 paper。

O-CNN 以結果來說,比直接做 3DCNN 還要好

總結

今天帶大家從很基礎的地方入門了 3D Deep Learning,上面的總結算是很簡短,如果你對詳細內容有興趣,可以再去看看影片、甚至是上面提到的 paper。

之後會再 po 出第二和第三部分,要注意的一點是,上面提到的觀念是在 2017 年的研究小結,也許三年後的現在已經有些結論不同了,不過能夠從 2017 年一路追到最新的研究,才比較容易有整體觀,也容易了解各個方法的演進跟優缺點變化,對於以後自己要開發新的演算法也更有幫助。

等到三個部分分享完後,未來有機會也想深入分享更多厲害的研究,例如 PointPillars、PointFusion 、Voxel-FPN 等等,3D DL 讚讚讚,stay tuned,我們下次見!

延伸閱讀

  1. 3D Deep Learning 入門(二)- Deep learning on point cloud
  2. Multi-view Convolutional Neural Networks for 3D Shape Recognition
  3. 3D Shape Segmentation with Projective Convolutional Networks
  4. 3D Shape Reconstruction from Sketches via Multi-view Convolutional Networks
  5. 3D ShapeNets: A Deep Representation for Volumetric Shapes
  6. OctNet: Learning Deep 3D Representations at High Resolutions

#Deep Learning









Related Posts

[ 學習筆記系列 ] 很基礎的 Command Line 與 Git

[ 學習筆記系列 ] 很基礎的 Command Line 與 Git

【 JavaScript 學習筆記 】迴圈

【 JavaScript 學習筆記 】迴圈

npm 是什麼? yarn 是什麼?

npm 是什麼? yarn 是什麼?




Newsletter




Comments