最近在學3D方向的語義分析。
師兄推薦了一個哔哩大學的将門創投 | 斯坦福大學在讀博士生祁芮中台:點雲上的深度學習及其在三維場景了解中的應用!的寶藏視訊,我會多看幾遍,并寫下每次觀看筆記。up主的個人網頁:http://stanford.edu/~rqi
下文的截圖都源自講解的PPT,在我的資源:祁芮中台點雲講解.pdf
具體代碼實作可參照:PointNet++代碼的實作
全篇手碼,内容較多會持續更新。
帶問号的句子都是乘上引下的重點作用,文章分為三篇,這是第二篇,請耐心食用。
正文繼續
第二代網絡結構——PointNet++
先了解PointNet的缺陷
左邊是3D的CNN,類似于2D,把2D的卷積變成了3D而已。網絡有多級的特征學習,有不斷地對特征的抽象,同時有平移不變性的特點。
與之相比我們看一下PointNet,剛開始做一個高維映射,再做池化。
本質上要麼對一個點操作,要麼對所有點的全局特征操作,這樣實際上沒有一個局部的概念。No local context,是以比較難對精細的特征進行學習,是以在分割的問題中有一定的局限性。
另外因為沒有local context,是以在平移不變性上也有所缺陷。我們知道點雲的輸入是xyz的坐标,假設對點雲做一個平移,那所有的xyz都不一樣了,導緻所有的特征都不一樣了,最後的全局特征也不一樣了,分類也會不一樣。若單個物體還好辦,我們可以把他的平移到坐标系的中心,把他的大小歸一化到一個球裡邊。如果場景中有多個物體就不好辦了,因為究竟對哪個物體做歸一化呢,是以有平移不變性的缺陷。
針對上面的問題提出了第二代網絡PointNet++,核心的想法是在局部的區域,重複的疊代性的去使用PointNet。
在小區域使用PointNet生成新的點,組成新的點集,又可以定義新的小區域,進而實作多級的特征學習,因為實在區域中我們可以使用局部坐标系,也可以實作平移的不變性。同時因為我們在小區域還是使用的PointNet,對點的順序無關,整個網絡還是保持置換的不變性。
用一個具體的例子來了解,多級的點雲特征學習是怎麼實作的:
有一個2D的字母A,每一個有坐标xy
先找一個局部的區域,紅點周圍的小區域,想學這個小區域的特征。因為不想受整體平移的影響,第一步先把這個小區域的點轉換到一個局部的坐标系。
在這個局部坐标系下使用一個pointnet,來提取特征
提取完特征會得到一個新的點,這個點不僅有xy代表小區域在整個點雲中的位置,還有一個向量特征F代表這個小區域的幾何形狀。F在高維的特征空間中。
我們重複這個操作,得到另一個區域的代表點
經過一系列操作後就會得到一組新的點,數量上少于原來的點,但每個點代表了周圍區域的幾何特點,這個操作叫做點集的簡化。
我們可以重複set abstraction點集抽象化的過程,實作一個多級的網絡。下圖展示了兩級,使得點的數量越來越少,代表的特征區域越來越大,和卷積神經網絡概念很相似。最後我們對所有的這些得到的點進行point就會得到一個global feature,我們可以用來做整個點的分類。
也可以把最後的這個點再重新傳回到原來的點上,這個傳的方法既可以通過3D點的插值,也可以是通過另一種基于poinetnet的方式。最後實作segmentation
那麼問題來了
如何選擇小區域的大小?
怎麼選擇feature的寬度?如何選擇poinetnet作用球的半徑?
在CNN中現在流行選擇非常小的kernel,VGG中大量應用3×3的kernel(核心)。但在poinet cloud中不一定,因為poinet cloud中常見的現象是采樣率的不均勻。比如說有一個densite camera采到的圖像,近的點很密遠的點稀疏,密的地方沒關系,稀疏的地方有問題,極端的情況隻有一個點,特征不好提取。
我們用一個量化的實驗,從1024個點逐漸減少點的數量密度,不均勻減少。
PointNet ++在開始時,功能強大得到更高的分類精确度,但是小區域作用,使其在密度下降後受到較大的影響。
由上面得出kernel(核心)太小的話會因為采樣率的不均勻而受影響。
針對這個問題,設計一個新型的網絡結構,來智能去學習如何綜合不同區域大小的特征來得到一個魯棒的學習層。背後的原理是,我們希望在密集的地方相信這個特征,在稀疏的地方不信這個特征去看一個更大的區域。
下圖簡單的方法是(a)通過一個multi-scale的結構,把不同半徑區域的特征聯合在一起(2D的例子),我們訓練過程對随機的輸入的dropout,迫使我們的網絡學習如何去應對這些損失的資料,如何結合不同尺度上結合資料的性能特征。另一個例子是(b),不是在同一級中綜合不同尺度信号,而是在不同網絡集中去綜合,可以節省計算,因為下級的特征是計算好的,隻需要把他池化拿來用就可以。(a)中需要對不同尺度分别計算。(這裡b說沒時間細講,我也沒聽懂)
下圖展示了采用了上圖結構的網絡和原來的 PointNet++比對資料的丢失變得更加魯棒,丢失70%的點對分類無影響。
同時這個網絡在場景分割上做一個評估。
單角度拍攝的局部點雲分割,上上上圖MSG起作用了。
另一個PointNet++的性能是,他不局限于在2D3D的euclidean space
,他可以在任意的空間。下圖是一個對可變形物體分割的資料集,想要對馬和貓進行分類,雖然a和b的外形相似,但不同類,a和c雖然外形不相似但屬于同一類。我們依靠的不是xyz這種外形上的表達,而是希望在物體表面有一種基于内在特征的學習。
以上充分驗證了PointNet++的靈活性。
連結:
點雲上的深度學習及其在三維場景了解中的應用————PointNet(一)
點雲上的深度學習及其在三維場景了解中的應用————3D Scene Understanding with PointNet and PointNet++(三)