GVCNN notes
思路總結(jié)與方法概括
GVCNN和MVCNN一樣翘簇,也是一種基于多視圖(multi-view)的锅铅、對三維物體進行識別分類的網(wǎng)絡(luò)結(jié)構(gòu)锁施。
在MVCNN中挑胸,各個view的CNN特征通過一個view pooling層被整合成一個特征向量。這么做的缺憾在于夷狰,view pooling層并不能關(guān)注每個view的區(qū)分性岭皂。而實際上,在使用multi-view來對一個三維物體進行表示時沼头,有些view之間的相似性可能會很高爷绘,而有些view之間的差別卻比較大,挖掘出這些view之間的相互聯(lián)系也許能夠幫助網(wǎng)絡(luò)更好地進行物體識別进倍。
而GVCNN的核心思路便是基于上述的觀測土至,它提出了一個c,用于對不同的view-level特征進行分組猾昆,并以組為單位對view-level特征進行聚合從而得到group-level的特征陶因,最后通過一個學(xué)習(xí)到的權(quán)重來將group-level特征整合成一個全局特征描述子,以用于最終的分類毡庆。引入Grouping Module的好處在于,它考慮了view之間的組內(nèi)相似性和組間區(qū)分性:相似度高的view被分到了同一組烙如,組內(nèi)特征對最終結(jié)果的影響因子是相同的么抗;而不同的組間具有相對明顯的區(qū)分性,因此每個組對最終結(jié)果的影響程度會不同亚铁。
具體結(jié)構(gòu)
整體流程
- 表示一個三維物體的多個view首先被送入一個全卷積網(wǎng)絡(luò)(Fully Convolutional Network)進行初步的特征提取蝇刀,得到每個view的Raw View Descriptor,這里的FCN對于各個view而言是共享的徘溢。假設(shè)我們用 n 個view來表示一個三維物體吞琐,那么經(jīng)過FCN,我們就會得到 N 個Raw View Descriptor然爆。
- 提出得到的Raw View Descriptor接著被送入余下的CNN中進行進一步的特稱提取站粟,得到與每個view相對應(yīng)的Final View Descriptor。類似地曾雕,這里的CNN也是view間共享的奴烙。相應(yīng)地,這里我們也會得到 N 個Final View Descriptor
- 同時剖张,由第1步提取得到的所有Raw View Descriptor還會被一起送入Grouping Module來進行組別的劃分切诀,并計算出各個組別的對應(yīng)權(quán)重。Grouping Module有兩個計算結(jié)果搔弄,分別是圖中的Grouping Scheme和Grouping Weight幅虑。其中Grouping Scheme用來對view-level的特征進行分組。而Grouping Weight則是分配給各個組的權(quán)重顾犹,用于接下來的特征整合倒庵。Grouping Module的具體細節(jié)將會在下文討論褒墨。
- 接著,由第2步得到的 N 個Final View Descriptor會根據(jù)第3步計算得出的結(jié)果來進行分組哄芜,分組的個數(shù)依賴于具體的數(shù)據(jù)貌亭,我們將分組個數(shù)記作 m 。
- 接下來认臊,在各個組內(nèi)進行view pooling操作(文章里使用的是average pooling)圃庭,得到 M 個Group Descriptor。
- 根據(jù)第3步得出的Grouping Weight對第5步得到的Group Descriptor進行加權(quán)求和失晴,得到最終的全局描述子shape descriptor剧腻。
- 使用一個全連接層對第6步得出的全局描述子進行分類。
Grouping Module
前面提到涂屁,Grouping Module的輸出有兩部分书在。一個是Grouping Scheme,用來確定如何劃分組別拆又。一個是Grouping Weight儒旬,是分配給每個組別的權(quán)重,權(quán)重表示每個組對最終的全局特征描述子的貢獻度帖族。
1. 計算區(qū)分度
在對各個view進行組別劃分之前栈源,先要得到每個view的區(qū)分度(Discrimination Scores),然后才能根據(jù)每個view的區(qū)分度來對其進行分組竖般。Grouping Module的輸入是 N 個Raw View Descriptor甚垦,這 N 個Raw View Descriptor首先被分別輸入到一個共享的全連接層中,得到 N 個相應(yīng)的輸出值涣雕。假設(shè)輸入的一組view為S = \{I_1,I_2,...,I_N\}艰亮, 對應(yīng)的全連接層的輸出值為\{O_{I_1},O_{I_2},...,O_{I_N}\},那么每個view的區(qū)分度的計算方式為:
\xi(I_i) = sigmoid(log(abs(O_{I_i})))
引入sigmoid函數(shù)挣郭,就使得區(qū)分度的取值落在0~1之間迄埃。注意到當(dāng)sigmoid的輸入高于5或小于-5時,其函數(shù)值便會趨向1或者0兑障,這將不利于分組的進行调俘。為了使得取值分布更加均勻,作者在sigmoid之前引入了abs和log函數(shù)旺垒。
2. 根據(jù)區(qū)分度進行分組
有了每個view的區(qū)分度彩库,便可以對其進行分組了。分組的思路十分簡單先蒋,具體如下:
首先將區(qū)間(0, 1)平均劃分為 N 個子區(qū)間骇钦,接著依次查看每個view的區(qū)分度,區(qū)分度落在同一個子區(qū)間的view就被認為屬于同一個組竞漾。最后便得到 M 個互不相交的分組 \{G_1, G_2,...,G_M\}眯搭,并且有 1\le M \le N窥翩。
3. 計算每個分組的權(quán)重
分組的權(quán)重用于對Group Descriptor進行加權(quán)平均,已得到最后的shape descriptor鳞仙。因此寇蚊,權(quán)重的計算原則是:一個區(qū)分性高的組,應(yīng)分配一個高的權(quán)重棍好,反之則應(yīng)該分配一個小的權(quán)重仗岸。權(quán)重的計算方式為:
\xi(G_j) = \frac{Ceil(\xi_{I_k} \times |G_j|)}{|G_j|}, \ \ \ \ I_k \in G_j
不過感覺論文這里應(yīng)該漏了累加或者Max之類的操作符,因為單從公式上來看借笙,并不知道I_k的具體取值扒怖。具體細節(jié)可能要去代碼中查看了。业稼。
實驗
實驗證明盗痒,GVCNN相對于MVCNN有2到3個百分點的提升。但有一部分的提升實際上是來自于GoogLeNet(GVCNN所使用的CNN baseline)相對于VGG-M(MVCNN所使用的CNN baseline)的優(yōu)勢低散。這樣看來俯邓,Grouping Module所帶來的實際性能提升其實只有一個百分點左右。
比起分類準(zhǔn)確率的提高熔号,論文中對Grouping Module的討論和實驗展示其實才是點睛之筆稽鞭。
從展示的分組樣例可以看出,Grouping Module對view的組別劃分還是十分到位的跨嘉。雖然最后的精度提升不是十分明顯川慌,但Grouping Module的作用仍值得肯定吃嘿。