前言
3D Deep Learning 的應用很廣泛,相關的研究也越來越多,要追上這些研究不是一朝一夕就能做到,但只要持之以恆,也能跟上,今天要透過 CVPR 2017 的 3D Deep Learning tutorial 影片來入門,因為整個 tutorial 長達三個小時,所以我把文章切成三份,今天是第一份 - 如何對具有 regular structure 的 3D data 做 deep learning。
這是 CVPR 2017 3D Deep Learning tutorial 的影片,想深入看完的讀者可以參考:
3D data 的應用
首先,我們知道 3D data 現在的應用很廣泛,尤其在蓬勃發展的自駕車和 AR/VR 領域:
再加上近年來 Deep Leanrning 正夯,這也就促成了 3D Deep Learning 的相關研究。
3D DL 研究問題的大致分類
3D DL 研究問題可以大致分成三類:
- 3D geometry analysis:例如辨識一坨 3D data 是什麼物體、辨識一坨 3D data 由哪些部分組成、3D data registration 等等
- 3D-assisted image analysis:利用 3D data 來輔助 image 分析,例如 cross-view image retrieval、intrinsic decomposition 問題。
- 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,我們下次見!
延伸閱讀
- 3D Deep Learning 入門(二)- Deep learning on point cloud
- Multi-view Convolutional Neural Networks for 3D Shape Recognition
- 3D Shape Segmentation with Projective Convolutional Networks
- 3D Shape Reconstruction from Sketches via Multi-view Convolutional Networks
- 3D ShapeNets: A Deep Representation for Volumetric Shapes
- OctNet: Learning Deep 3D Representations at High Resolutions