3D點雲|雲上的卷積神經網路及其部分應用
本次公開課由深藍學院開設,李伏欣老師主講,主要介紹了涵蓋3D點雲領域的研究,並重點介紹了李老師近期的最新工作內容。
李伏欣
美國俄勒岡州立大學助理教授

本次分享首先介紹了最近幾年兩篇經典論文中的3D點雲識別的工作,詳細介紹了PointNet++與PointNet;接著由傳統CNN入手,逐漸引入PointConv;最後將結合PointConv介紹了我們團隊最近的工作內容。
隨著深度感測器的普及,日後深度感測器在我們日常生活中將會變得更加普遍。我們都知道深度學習在2D影像識別中有了飛躍性的發展,研究點雲CNN的目的就是使深度學習在點雲上的應用更加廣泛。

提到點雲深度學習就一定離不開PointNet和PointNet++兩篇經典的點雲神經網路處理方法。PointNet中常用的有兩種操作:1×1 convolution 和Max-pooling,然而只有這兩種操作實際上對3D識別來講是遠遠不夠的。PointNet提取特徵的方式是對所有點雲數據提取了一個全局的特徵,顯然,這和目前流行的CNN逐層提取局部特徵的方式不一樣。
受到CNN的啟發,緊接著同一批作者發表了PointNet++,就更接近了傳統的CNN,相較於PointNet,它能夠在不同尺度提取局部特徵,通過多層網路結構得到深層特徵。PointNet++由以下幾個關鍵部分構成:Sampling(取樣層),Grouping(組合層),PointNet(特徵提取層)。
PointNet++作者使用的取樣演算法是farthest point sampling(最遠點取樣),相對於隨機取樣,這種取樣演算法能夠更好地覆蓋整個取樣空間,包括點雲數據特徵資訊和邊角資訊,這些都是隨機取樣所無法具備的。
雖然PointNet已經足夠優秀,但是PointNet缺少鄰域資訊,與傳統意義上通過周圍鄰域得到卷積結果十分不同,這也很難直接應用於後面的點雲CNN中。
為了引入點雲CNN,首先我們來回顧一下傳統的CNN。對於2D圖片來說,某個位置的輸出,不僅與該位置的輸入有關,還與此位置周邊位置的輸入有關,不同位置的輸入,具有不同的權重。下圖中X(i,j,k)可以看做影像的原始像素,W為卷積核,G為鄰域。卷積是一個加權求和的操作,由於位置坐標的像素值是固定值,卷積核上所有作用點以此作用於原始影像像素,並通過線性疊加把所有的作用結果累加,即是影像卷積的輸出。
實驗結果證明原結構大概需要8G記憶體,優化過後大概只需要佔用100M,極大的節省了記憶體佔用率,為後面構建大規模網路奠定了基礎,這樣一個PointConv layer就可以完整的對應到一層普通卷積層,優化過後的網路結構為:
當然,我們還可以來定義PointDeconv,在之前的PointNet++中,Deconvolution主要是通過插值的方法來實現的。例如在下層有了一個k鄰域,上層的點直接做插值來實現。而有了Pointconv以後可以在每次插值加入一層Pointconv,這樣PointDeconv 由兩部分組成:插值和 PointConv。首先,使用一個線性插值演算法來得到精細層的特徵的初始值,再在精細層上進行一個 PointConv 進行優化特徵,從而獲得較高精度的特徵值。
有了PointConv和PointDeConv,便可以根據傳統的卷積神經網路結構搭建一個U-Net網路,用於點雲的分類任務。如下圖所示,將所有的點先通過PointConv得到非常少的點,再通過一系列PointDeConv點數逐漸增多直至回到初始的點數,再對每個點進行1×1的卷積,便得到了點雲的U-Net。
根據上述提到的PointConv的有效性,可以把許多2D的工作進行推廣,擴展到點雲的應用,例如在電腦視覺中的運動估計。而在運動估計中最重要的環節就是配准,傳統方法中的SIFT等方法是可以輕鬆實現,但是隨著深度學習的推廣,如何在物體一直運動的情況下有效匹配像素點成為了深度學習運動估計的難題。
最直接的想法就是在相鄰兩幀之間分別做CNN,得到W×H×D維的特徵,在使用Cost Volume的方法用於像素匹配,Cost Volume方法的基本原理為:在W×H×D的特徵中,每一個特徵計算對應到另一個特徵d×d鄰域2範式,得到了W×H×D×d×d的匹配資訊。儘管得到的匹配資訊可能會很大,但是可以獲得更好的配准效果。那麼如何將配准問題運用到點雲上呢?
大體思路為:在相鄰的兩幀點雲Point Cloud1和Point Cloud2作為輸入連接PointConv layer得到Point Feature1 和Point Feature2,設以第一幀為target,則在Point Feature1有N個點的基礎上取k鄰域,計算的N×K維的Point Cost Volume,在連接PointConv layer後與貼到Point Feature1上便可以得到相關的運動資訊。
但是完整的實現還是需要完成許多細節,其中最重要的為coarse-to-fine,李老師的團隊根據2D里的optic follow中有一個很好的方法PWC-Net,實現了3D 點雲上的coarse-to-fine。原PWC-Net方法中是將輸入影像變小(例如16×16),在兩個16×16的基礎上計算Cost Volume,之後應用16×16得到的運動結果,先對第一幀的32×32的影像進行移動,在和第二幀的32×32進行匹配計算Cost Volume,以此類推,把所有層的結果加在一起,便可以得到最終的計算結果。這樣每次計算的Cost Volume取的鄰域並不會很大,計算新的Cost Volume時,可以直接應用上一次的運動結果。
在李老師團隊最新的工作PointPWC-Net中,因為有PointConv的存在,可以將PWC-Net中的downsample用PointConv替代,upsample用PointDeConv的方法替換,在Warping layer中,假設得到的輸入運動估計為(Δi, Δj, Δk),與原有輸入點(i, j, k)相加即可得到輸出(Δi+i, Δj+j, Δk+k)。這樣我們可以得到點雲中的運動估計。點雲里的Cost Volume可以把像素坐標值轉換為點雲數據,由於影像中的d×d是一個dense矩陣,而點雲是找K nearest neighbor,得到的Cost Volume的大小就直接去取決於K取值的大小為N×K。
在測試中與之前許多工作進行對比,由於ICP假設物體是剛性不變的,所以相較於ICP, PointPWC-Net有較大的提升。而與其他深度學習網路對比,由於大量使用了Max pooling操作,致使了很多特徵點丟失,PointConv可以替換CNN層的優勢便體現出來,在許多開源數據集上的表現十分良好。
另外李老師團隊介紹了另一個非常有意思的工作:如何清楚的知道CNN中是那些Feature起到了至關重要的作用呢?那麼需要優化一個mask,對輸入影像進行blur,將blur過後的影像重新放到之前CNN網路中預測,使預測的準確度儘可能的較低。例如在預測口琴的影像中,原影像的分類精度在99.9%,如果對人的嘴和手部與口琴接觸的地方進行blur,得到的結果就只有11.9%,相反,如果我們只顯示嘴部和手部與口琴接觸的影像,分類預測的精度達到了81.9%。
李老師團隊同時將這個有趣的工作推廣到了點雲中,但是與2D影像不同的是,2D影像可以通過blur進行操作就可以把影像的特徵給去掉了,而點雲中如果直接刪除特徵點,會在某些分類器中出現問題。基於上述問題,李老師團隊提出了一種點雲smooth方法,對部分點雲進行smooth逐漸變成一個球,來起到2D影像blur的作用。這樣在smooth的操作下將2D中優化mask的工作推廣到了點雲。例如人的點雲影像分類中,如果把人的頭部smooth掉後,人的點雲分類精度就從原來的0.79降到了0.15,便可以了解到人的頭部在點雲分類起到了至關重要的作用。
在公開課的最後,李老師給到了我們一些學習深度學習的建議。點雲與深度學習結合的應用範圍十分廣泛,例如三維重建、運動估計等,要想學好深度學習,首先需要學好機器學習的理論知識,例如Overfitting是什麼等基礎問題,寫一寫簡單的SVM程式碼。
在對機器學習有了一定的認識之後,再開始學習深度學習,深度學習本身沒有很難的知識點,難就難在做實驗,例如如何提高精度、怎樣對數據初始化可以得到較好的結果等。多學習別人在深度學習中使用的各種技巧,對提高深度學習程式碼精度有很大的幫助。很多時候自己寫一個深度學習的網路不如直接下載一個開源的深度學習網路的程式碼,在現有的基礎上對原工作進行修改。
相關文章
-
[Qi et al. CVPR 2017] C. Qi et al. PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation. CVPR 2017
-
[Wu, Qi and Fuxin 2019] W. Wu, Z. Qi, L. Fuxin. PointConv: Deep Convolutional Networks on 3D Point Clouds. CVPR 2019
-
[Graham et al. 2018] B. Graham and L. van der Maaten. Submanifold Sparse Convolutional Networks. CVPR 2018
-
[Choy et al. 2019] C. Choy, JY. Gwak, S. Savarese. 4D Spatio-Temporal ConvNets: Minkowski Convolutional Neural Networks. ICCV 2019
-
[Qi et al. NeuRIPS 2017] C. Qi et al. PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space. NeuRIPS 2017
-
[Su et al. 2018] H. Su et al. SPLATNet: Sparse Lattice Networks for Point Cloud Processing. CVPR 2018
-
[Xu et al. 2018] Y. Xu et al. SpiderCNN: Deep Learning on Point Sets with Parameterized Convolutional Filters. ECCV 2018
-
[Li et al. 2018] Y. Li et al. PointCNN: Convolution On X-Transformed Points. NeuRIPS 2018
-
[Jia et al. 2016] X. Jia et al. Dynamic Filter Networks. NeuRIPS 2016
-
[Simonovsky 2017] M. Simonovsky, N. Komodakis. Dynamic edgeconditioned filters in convolutional neural networks on graphs. CVPR 2017
-
[Wang et al. 2018] S. Wang et al. Deep parametric continuous convolutional neural networks. CVPR 2018
-
[D. Sun et al. 2018] D. Sun et al. PWC-Net: CNNs for Optical Flow Using Pyramid, Warping, and Cost Volume. CVPR 2018
-
[Wu et al. + Fuxin arXiv:1911.12408] W. Wu et al. PointPWC-Net: A Coarse-to-Fine Network for Supervised and Self-Supervised Scene Flow Estimation on 3D Point Clouds. arXiv:1911.12408
-
[Ziwen et al. + Fuxin arXiv:1911.10415] C. Ziwen et al. Visualizing Point Cloud Classifiers by Curvature Smoothing. arXiv:1911.10415
-
[Z. Qi, S. Khorram, L. Fuxin, AAAI 2020] Zhongang Qi, Saeed Khorram, LI Fuxin. Visualizing Deep Networks by Optimizing with Integrated Gradients. AAAI, 2020