论文笔记:DGCNN(EdgeConv)
生活随笔
收集整理的這篇文章主要介紹了
论文笔记:DGCNN(EdgeConv)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Dynamic Graph CNN for Learning on Point Clouds
DGCNN
1、四個問題
要解決什么問題?
-
使用深度學習處理3D點云。
-
設計一個可以直接使用點云作為輸入的CNN架構,同時可以獲取足夠的局部信息,可適用于分類、分割等任務。
用了什么方法解決?
- 提出了一個新的神經網絡模塊——EdgeConv。
- EdgeConv是可微的,并能嵌入已有的網絡架構中。
- EdgeConv的優點:
- 包含了局部領域信息;
- 通過堆疊EdgeConv模塊或循環使用,可以提取到全局形狀信息;
- 在多層系統中,特征空間中的相對關系包含了語義特征。(注:點云中形狀近似的部分,在特征空間中距離較小。)
效果如何?
- 在標準數據集ModelNet40和S3DIS上取得了state-of-the-art的效果。
還存在什么問題?
- EdgeConv考慮了點的坐標,與領域點的距離,忽視了相鄰點之間的向量方向,最終還是損失了一部分局部幾何信息。
2、論文概述
2.1、簡介
- 最近的算法傾向于搜索點云中的語義線索和一致性,而不是像角點和邊緣點這樣顯著的幾何特征。僅僅通過傳統方法如計算或者微分這類的方法提取的幾何信息顯然不夠用,所以現在更多地需要基于學習的方法(源自于通過對有標簽或無標簽的數據集的統計分析得到的相關信息)。
- 文中主要考慮點云分類和分割任務。
- 傳統的解決辦法是,提取handcrafted的特征來獲取點云的幾何信息。
- 近來,深度學習在圖像處理領域的大獲成功,催化了使用數據驅動方法來從點云學習特征的研究。
- 由于常規的深度網絡的輸入都是規則結構的數據,而點云則是不規則的數據:每個點在空間中都是連續分布的,并且任何點在順序上的置換都不會改變空間分布。
- 一類常用的方法是,將點云轉換為volumetric representation(體表示),也就是3D網格,隨后便可以采用3D的CNN網絡來提取特征。
- 然而,這種方法會造成quantization artifacts,和額外的內存占用,導致難以提取高分辨率或者細粒度特征。
- 另一類方法,則是可以直接將不規則的點云作為輸入的深度網絡,即PointNet系的網絡。
- PointNet,通過獨立地處理每個點,能實現置換不變性(permutation invariance)。隨后使用一個對稱函數(symmetric function)來聚合特征。
- 之后,一些基于PointNet的改進網絡會考慮點的局部特征,而不是分開處理。這樣可以讓網絡提取到局部特征,提高模型的性能。
- 然而這類算法,在處理局部區域的點的時候為了保證置換不變性,而導致過于獨立。這樣會忽視點之間的幾何相關信息,導致丟失一部分局部特征信息。
- 為了解決這個問題,就提出了EdgeConv,在保證置換不變性的同時捕獲局部幾何信息。
- 貢獻:
- 提出了一個新的操作,EdgeConv,可以直接在點云上操作。EdgeConv能在在保證置換不變性的同時捕獲局部幾何信息。
- DGCNN模型可以在動態更新圖的同時,在語義上將點聚合起來。
- EdgeConv可以被集成,嵌入多個已有的點云處理框架中。
- 使用EdgeConv搭建的DGCNN網絡,在多個基準數據集上取得了state-of-the-art的效果。
2.2、方法
2.2.1、Edge Convolution
- 假設一個F維點云有n個點,定義為:X=x1,...,xn∈RFX={x_1, ..., x_n} \in R^FX=x1?,...,xn?∈RF。最簡單地情況下,F=3,即三維坐標。當然也可能包含額外的坐標,包含顏色、表面法線等等的信息。
- 在一個深度神經網絡中,后面的層都會接受前一層的輸出,因此更一般的情況下,維度F也可以表示某一層的特征維度。
- 假設給定一個有向圖G=(ν,?)G = (\nu, \epsilon)G=(ν,?),用來表示點云的局部結構,其中頂點為ν={1,...,n}\nu = \{1,...,n\}ν={1,...,n},而邊則為?∈ν×ν\epsilon \in \nu \times \nu?∈ν×ν。在最簡單地情況下,我們建立一個KNN圖G。假設距離點xix_ixi?最近的點xji1x_{j_{i1}}xji1??, …, xjikx_{j_{ik}}xjik??包含許多有向邊緣(i,ji1),...,(i,jik)(i, j_{i1}), ..., (i, j_{ik})(i,ji1?),...,(i,jik?)。
- 我們定義邊緣特征為:eij=hΘ(xi,xj)e_{ij} = h_{\Theta}(x_i, x_j)eij?=hΘ?(xi?,xj?),其中hΘ:RF×RF→RF′h_{\Theta}: \mathbb{R}^F \times \mathbb{R}^F \rightarrow \mathbb{R}^{F^{'}}hΘ?:RF×RF→RF′,是一些使用一些可學習的參數Θ\ThetaΘ構成的非線性函數。
- 最后在EdgeConv操作上添加一個通道級的對稱聚合操作□\square□,完整公式為:xi′=□j:(i,j)∈?hΘ(xi,xj)x_i^{'} = \square_{j:(i, j)\in \epsilon} h_{\Theta} (x_i, x_j)xi′?=□j:(i,j)∈??hΘ?(xi?,xj?)。
- 關于公式中的hhh和□\square□有四種可能的選擇:
- hΘ(xi,xj)=θjxjh_{\Theta}(x_i, x_j) = \theta_j x_jhΘ?(xi?,xj?)=θj?xj?,聚合操作采用求和操作:xi′=∑j:(i,j)∈?θjxjx_i^{'} = \sum_{j:(i, j)\in \epsilon} \theta_j x_jxi′?=∑j:(i,j)∈??θj?xj?。
- hΘ(xi,xj)=hΘ(xi)h_{\Theta}(x_i, x_j) = h_{\Theta}(x_i)hΘ?(xi?,xj?)=hΘ?(xi?),只提取全局形狀信息,而忽視了局部領域結構。這類網絡實際上就是PointNet,因此PointNet中可以說使用了特殊的EdgeConv模塊。
- hΘ(xi,xj)=hΘ(xj?xi)h_{\Theta}(x_i, x_j) = h_{\Theta}(x_j - x_i)hΘ?(xi?,xj?)=hΘ?(xj??xi?)。這種方式只對局部信息進行編碼,在本質上就是將原始點云看做一系列小塊的集合,丟失了原始的全局形狀結構信息。
- 第四種,也是文中采用的,hΘ(xi,xj)=hΘ(xi,xj?xi)h_{\Theta}(x_i, x_j) = h_{\Theta}(x_i, x_j - x_i)hΘ?(xi?,xj?)=hΘ?(xi?,xj??xi?),這樣的結構同時結合了全局形狀信息以及局部領域信息。
2.2.2、動態圖CNN
- 假設第l層的輸出為Xl={x1l,...,xnl}?RFlX^l = \{ x_1^l, ..., x_n^l \} \subseteq \mathbb{R}^{F_l}Xl={x1l?,...,xnl?}?RFl?,而X0X^0X0就是輸入點云。
- 實驗表明,每次都重新計算每一層上的圖中的點在特征空間中的最近鄰點,是有用的。這也是動態圖CNN與普通的圖CNN的不同之處。
- 因此,將包含了這樣的圖的網絡命名為動態圖CNN(Dynamic Graph CNN, DGCNN)。
- 每一層都會得到一個不同的圖Gl=(νl,?l)G^l = (\nu^l, \epsilon^l)Gl=(νl,?l)。
- 每一層的邊緣特征為(i,ji1),...,(i,jik)(i, j_{i1}), ..., (i, j_{ik})(i,ji1?),...,(i,jik?),取決于點xilx_i^lxil?的klk_lkl?個最近鄰的點xji1lx_{j_{i1}}^lxji1?l?, …, xjiklx_{j_{ik}}^lxjik?l?。
- 更新公式:xil+1=□j:(i,j)∈?lhΘl(xil,xjl)x_i^{l+1} = \square_{j:(i, j)\in \epsilon^l} h_{\Theta}^l (x_i^l, x_j^l)xil+1?=□j:(i,j)∈?l?hΘl?(xil?,xjl?)。
2.2.3、實現細節
- 網絡結構見下圖:
- 整體的網絡結構與PointNet的很類似,都使用了一個空間變換單元,最后計算了一個全局信息。
- 分類網絡中包含了兩個EdgeConv層,后面接上了一個池化操作和3個全連接層,然后得到分類結果。
- 分割網絡使用了三個EdgeConv層,后面接上了三個全連接層,最后每個點都會輸出一個預測分數。
- 對于每個EdgeConv模塊,我們都是用共享邊緣函數:hl(xil,xjl)=h(xil,xjl?xil)h^l(x_i^l, x_j^l) = h(x_i^l, x_j^l-x_i^l)hl(xil?,xjl?)=h(xil?,xjl??xil?),而這個函數是用一個多層感知機實現的,聚合操作□=max\square=max□=max即為最大池化。
- KNN圖中的K值是一個超參,分類網絡中K=20,而在分割網絡中K=30。
2.3、與其他方法比較
- 主要跟兩類方法做對比:一個是PointNet系列,一個是圖CNN系列。
- PointNet是我們的網絡的一種特殊情況,即取KNN圖的K=1,即圖中的邊都為空。PointNet中的邊緣特征函數為h(xi,xj)=h(xi)h(x_i, x_j) = h(x_i)h(xi?,xj?)=h(xi?),僅僅考慮了全局幾何信息而丟棄了局部信息。PointNet中的聚合操作□=max\square=max□=max(或者∑\sum∑),其實就相當于全局最大池化(或平均池化)。
- PointNet++試著通過在局部區域使用PointNet來提取點云的局部結構信息。PointNet++的邊緣特征函數也是h(xi,xj)=h(xi)h(x_i, x_j) = h(x_i)h(xi?,xj?)=h(xi?),聚合操作也是最大池化。
- 注:圖神經網絡這部分還不熟悉,先留個坑。
- 下圖顯示了不同特征空間的距離,證實了在更深層上的距離也能在長距離范圍內攜帶語義信息。
2.4、實驗驗證
2.4.1、分類任務
- 分類結果:
- 模型復雜度:
- 網絡中不同組件的有效性:
- 不同K近鄰值的情況:
- 不同點數下模型的性能:
2.4.2、分割任務
- 分割結果:
- 可視化結果:
- 分割結果比較:
- 驗證時隨機丟棄一些點的分割結果:
- 在ShapeNet上的實驗結果:
2.4.3、室內場景分割
- 實驗結果:
- 分割結果對比:
3、參考資料
總結
以上是生活随笔為你收集整理的论文笔记:DGCNN(EdgeConv)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 论文笔记:Image Caption(S
- 下一篇: 论文笔记:MTCNN