撥雲見日——SPLATNet文章理解

文章標題: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空間就是有多個單形不留縫隙地拼接而成,它不像歐式空間那樣座標軸互相垂直,而是成一定角度,分佈在平面上。它具有以下特點:

 

  1. 平面中任意一點所在的單形頂點都能以的時間內定義;
  2. 單形頂點周圍所有的頂點也能以的時間內定義;
  3. ...還有一些更專業,就不再列了。

關於這兩點我的理解僅限於,這種空間對於稀疏無序的數據,能夠更加高效地進行組織,便於查找和各種運算的進行。

 

把歐式空間裏的點變換到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還是有一定意義的。
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章