文章標題:SPLATNet: Sparse Lattice Networks for Point Cloud Processing
這是CVPR2018的一篇文章,作者是Hang Su ,他同時也是2015年MVCNN的作者,自然也是很厲害了。這個作者給我的感覺是基礎非常紮實,比如之前的MVCNN,最先把多視角機器視覺運用到三維物體感知中來;包括這次用到的bilateral convolution layers (BCLs) 和permutohedra lattice 等文章中最重要的兩個概念,都並非原創,而是來源於2015和2016年的會議發佈出來的成果,而且網上關於這兩個東西的博客不多,看來還是有點冷門的,這就提示我們,想要做出創新,就要先把已有研究成果吃透,特別要能夠看到那些被別人忽視的文章。
讀這篇文章很容易掉進陷阱,作者給挖了兩個坑,會直接影響理解論文的效果,我們在下面的講解中都會重點提到。
拿到論文先看摘要,它這裏囉嗦了半邊,其實就是一句話,本文用bilateral convolution layers (BCLs) 堆疊起來構造了一種新的網絡結構。
相關研究這裏就不說了。
直接看第三章,bilateral convolution layers。這個詞來自於文獻[22]和[25]:
[22]Learning Sparse High Dimensional Filters:Image Filtering, Dense CRFs and Bilateral Neural Networks . CVPR2016
[25]Permutohedral Lattice CNNs. ICLR 2015
但是筆者去看了這兩篇文章,感覺這裏其實叫Permutohedral Lattice CNNs更貼切。文獻[22]寫得亂七八糟得,提出了Bilateral Neural Networks這麼個詞,其實根本就只是把文獻[25]裏的Permutohedral Lattice CNNs換了換名字、換了個場合。
接着看文章,爲了講解方便,我們就繼續用文中BCL這個名詞。
第三章比較重要,首先講了BCL的輸入。這裏先區分兩個詞,input features 和lattice features ,前者是實打實的輸入特徵,其維度爲df,既可以是低階特徵,也可以是神經網絡提取的高階特徵,維度從幾到幾百均可;而後者是用來構造Permutohedral Lattice的特徵,只用低階特徵,如位置、顏色、法線,維度一般爲個位數。例如第四章文中給的SPLATNet3D 的實現結構,lattice features是位置,維度就只有3。
接着,就是文章的核心了,介紹了BCL的三個基本操作:Splat、Convolve、Slice,這裏文章介紹的不細緻,而且容易誤導人,建議有時間的同學去看看文獻[25]以及文獻[1]“Fast High-Dimensional Filtering Using the Permutohedral Lattice”會有個更深入的理解。
Splat。
這個操作就是把歐式空間變換成另外一個空間,怎麼變換?通過乘一個變換矩陣。變換矩陣一般是這樣
具體爲什麼定義成這樣就是數學問題了,在此就不贅述了。這裏d表示Permutohedral Lattice空間的維度。
爲了便於理解,給一個例子:歐式空間定義三個點,分別是(0,0,0)、(1,0,0)、(1,1,0)。令Permutohedral Lattice維度取d=2,則
用B2乘座標,得到經過變換後新的三點座標(0,0,0)、(2,-1,-1)、(1,1,-2)。這一過程如下圖所示:
右圖中,帶顏色的數字0,1,2都是餘數(即文獻[1]中的remainder)。這個餘數是怎麼算的呢?舉例說明,如(2,-1,-1)這個點,2和-1兩個數對3進行取模運算,得到的餘數都是2,所以這點就標成2;再比如(1,1,-2)對3取模,餘數都是1,所以這點就標成1。在整個Permutohedral Lattice空間都遵循這種規則進行標註,後面做卷積運算時會根據這些餘數進行相應操作。
如上圖所示的那樣,Permutohedral Lattice空間就是有多個單形不留縫隙地拼接而成,它不像歐式空間那樣座標軸互相垂直,而是成一定角度,分佈在平面上。它具有以下特點:
- 平面中任意一點所在的單形頂點都能以的時間內定義;
- 單形頂點周圍所有的頂點也能以的時間內定義;
- ...還有一些更專業,就不再列了。
關於這兩點我的理解僅限於,這種空間對於稀疏無序的數據,能夠更加高效地進行組織,便於查找和各種運算的進行。
把歐式空間裏的點變換到Permutohedral Lattice空間後,還要進行一步“炸裂”操作(這個名字是我杜撰的),如下圖:
也就是把單形裏的某個點的信息炸開到周圍三個頂點上,當然了,這個點帶的信息也就是它的特徵,不管64維也好128維也好,都要炸開到周圍三個頂點。這個所謂的“炸開”也是有一定依據的,會根據距離分配不同的權值,但是基本上炸開之後的特徵維度是不變的。
至此,Splat操作完成。所以,現在大家應該能夠體會到Splat的作用了,就是把原本在歐式空間中又稀疏、又不均勻的點按照一種新的形式組織了一下,方便進行後續運算。下面就是Convolve。
Convolve說起來就簡單了,Splat操作之後,點的特徵已經按照一定原則“分配”到各個單形的頂點上了,所以,位置也就很比較規整了,按照哈希表做索引,進行卷積操作就行了。
Slice。這是Splat的逆過程,把卷積運算後得到的Lattice頂點上的信息,“匯聚”到原來點的位置上。當然,如果“匯聚”到新的位置上也可以,新的點數也可以比原來的點數少,也可以分佈在不同維度的歐式空間上。這就和卷積操作變換圖片尺寸的效果有點類似。
至此,就把Permutohedral Lattice CNN模塊講完了,這就是BCL的核心內容了。
第四章就簡單了,無非就是介紹網絡的超參是如何設定的、網絡結構如何設計的,都是比較容易理解了。
第五章介紹了2D-3D融合的實現版本,無非就是多加了幾個concate的操作,網絡更加複雜一些,根據語義分割的任務特點加了多層次信息融合等等,也都不難理解。
第六章是實驗,證明了本文所提網絡的有效性。
第七章總結。
附錄部分——附錄部分可以看看網絡的設計參數,例如BCL的輸出特徵維度64-128-128-64-64-7等等,可以加深對網絡的認識。我最開始搞不清楚Splat投影是做什麼的,受到文中一句話的誤導:
以爲要把高維(如64,128)的特徵映射到低維(如3,6),非常彆扭。
直到看到附錄部分關於BCL輸出特徵維度的介紹,維度還是很高的,就才恍然大悟,才知道Splat中的“炸開”是帶着厚厚的特徵一塊“炸開”的。
小結
總體來說,這篇文章讀的還是挺費勁的,一方面是需要看很多額外資料,另一方面作者的論述確實容易把人帶偏。論文的代碼是用Caffe寫得,筆者還沒運行過代碼。後期有時間的話有可能會寫文章介紹代碼,看情況吧。
關於這篇文章的思路,有的同學可能會認爲比起PointNet、pointCNN來說好像複雜了很多,不知道意義何在。
但我覺得這篇文章可以拿來和基於樹的點雲處理網絡進行對比,比如KdNetwork、OCNN、octNet,這類基於樹的網絡也是要對點雲進行高效地組織,然後再套用成熟的神經網絡進行處理,但是需要額外步驟對數據進行處理,所以在端到端處理方面存在劣勢。而SPLATNet與之不同,它利用Permutohedral Lattice CNN層,把對點雲的組織這一步驟放到了每一次卷積操作中,實現了端到端的處理。從這個角度來說,SPLATNet還是有一定意義的。