1. 程式人生 > >深度學習研究理解10:Very Deep Convolutional Networks for Large-Scale Image Recognition

深度學習研究理解10:Very Deep Convolutional Networks for Large-Scale Image Recognition

本文是牛津大學 visual geometry group(VGG)Karen Simonyan 和Andrew Zisserman 於14年撰寫的論文,主要探討了深度對於網路的重要性;並建立了一個19層的深度網路獲得了很好的結果;在ILSVRC上定位第一,分類第二。

一:摘要

……

從Alex-net發展而來的網路主要修改一下兩個方面:

1,在第一個卷基層層使用更小的filter尺寸和間隔;

2,在整個圖片和multi-scale上訓練和測試圖片。

二:網路配置

2.1配置

2.1.1 小的Filter尺寸為3*3

卷積的間隔s=1;3*3的卷基層有1個畫素的填充。

1:3*3是最小的能夠捕獲上下左右和中心概念的尺寸。

2:兩個3*3的卷基層的有限感受野是5*5;三個3*3的感受野是7*7,可以替代大的filter尺寸

3:多個3*3的卷基層比一個大尺寸filter卷基層有更多的非線性,使得判決函式更加具有判決性。

4:多個3*3的卷積層比一個大尺寸的filter有更少的引數,假設卷基層的輸入和輸出的特徵圖大小相同為C,那麼三個3*3的卷積層引數個數3*(3*3*C*C)=27CC;一個7*7的卷積層引數為49CC;所以可以把三個3*3的filter看成是一個7*7filter的分解(中間層有非線性的分解)。

2.1.2 1*1 filter:

作用是在不影響輸入輸出維數的情況下,對輸入線進行線性形變,然後通過Relu進行非線性處理,增加網路的非線性表達能力。

Pooling:2*2,間隔s=2;

2.2 結構

和之前流行的三階段網路不通的是,本文是有5個max-pooling層,所以是5階段卷積特徵提取。每層的卷積個數從首階段的64個開始,每個階段增長一倍,直到達到最高的512個,然後保持。

基本結構A:

Input(224,224,3)→64F(3,3,3,1)→max-p(2,2)→128F(3,3,64,1)→max-p(2,2) →256F(3,3,128,1)→256F(3,3,256,1)→max-p(2,2)→512F(3,3,256,1)→512F(3,3,512,1)→max-p(2,2)→512F(3,3,256,1)→512F(3,3,512,1)→max-p(2,2)→4096fc→4096fc→1000softmax

8個卷基層,3個全連線層,共計11層;作者只說明瞭使用3*3filter的原因,至於層數,階段數,特徵數為什麼這麼設計,作者並沒有說明。

引數個數:網路E和OverFeat模型引數差不多


B:在A的stage2 和stage3分別增加一個3*3的卷基層,10個卷積層,總計13層

C:在B的基礎上,stage3,stage4,stage5分別增加1*1的卷積層,13個卷基層,總計16層

D:在C的基礎上,stage3,stage4,stage5分別增加3*3的卷積層,13個卷基層,總計16層

E:在D的基礎上,stage3,stage4,stage5分別增加3*3的卷積層,16個卷基層,總計19層

三,分類框架

3.1訓練引數設定

      Minibatch=256,其它的都一樣。

作者發現,儘管VGG比Alex-net有更多的引數,更深的層次;但是VGG需要很少的迭代次數就開始收斂。這是因為

1,深度和小的filter尺寸起到了隱式的規則化的作用

2,一些層的pre-initialisation

pre-initialisation:網路A的權值W~(0,0.01)的高斯分佈,bias為0;由於存在大量的ReLU函式,不好的權值初始值對於網路訓練影響較大。為了繞開這個問題,作者現在通過隨機的方式訓練最淺的網路A;然後在訓練其他網路時,把A的前4個卷基層(感覺是每個階段的以第一卷積層)和最後全連線層的權值當做其他網路的初始值,未賦值的中間層通過隨機初始化。

Multi-scale 訓練

      把原始 image縮放到最小邊S>224;然後在full image上提取224*224片段,進行訓練。

方法1:在S=256,和S=384上訓練兩個模型,然後求平均

方法2:類似OverFeat測試時使用的方法,在[Smin,Smax]scale上,隨機選取一個scale,然後提取224*224的圖片,訓練一個網路。這種方法類似圖片尺寸上的資料增益。

3.2 測試

測試階段的方法和OverFeat測試方法相同,首先選定一個scale:Q,然後在這個圖片上應用卷積網路,在最後一個卷積階段產生unpooled FM,然後利用sliding window方法,每個pooling window產生一個分類輸出,然後融合各個pooling window的結果,得到最終分類。這樣比10-view更加高效,只需計算一次卷積過程。

3.3 部署細節

      利用C++ Caffe toolbox,在4個Titan Gpu上平行計算,比單獨GPU快3.75倍,每個網路差不多2-3周。

四,分類實驗

4.1 測試階段single-scale對比

A vs A-LRN:A-LRN結果沒有A好,說明LRN作用不大。

A vs B,C,D,E:越深越好

A vs C:增加1*1filter,即增加額外的非線性確實提升效果

C vs D:3*3的filter比1*1filter要好,使用較大的filter能夠捕捉更大的空間特徵。

訓練方法:在scale區間[256;512]通過scale增益來訓練網路,比在固定的兩個S=256和S=512,結果明顯提升。Multi-scale訓練確實很有用,因為ZF論文中,卷積網路對於縮放有一定的不變性,通過multi-scale訓練可以增加這種不變性的能力。

4.2 Multi-scale訓練

方法1:single-scale訓練 S,multi-scale測試 {S-32,S,S+32}

方法2:multi-scale訓練[Smin;Smax],multi-scale測試{Smin,middle,Smax}

結果:此處結果為B’


1 B vs B’, C vs C’,……:single-scale訓練,利用multi-scale測試,有0.2%的top-5提升。

2 B-256 vs B-384 ……:single-scale在256和348上訓練,無論用什麼測試方法,結果基本上差不多。說明網路在單個scale上提取能力有限。

3 multi-scale訓練,multi-scale測試,對於網路提升明顯,D’和E’的top-5分類達到了7.5%。

4.3 模型融合

通過結果求平均,融合上面不同網路的結果。


模型融合結果如上圖,比較有意思的是,模型D和E兩個頂尖模型融合的結果比融合7個模型的結果還要好。這個比較有意思,模型融合個數多,反而沒有兩個網路的好。這個是為什麼?沒有想明白。

4.4和其他網路比較

本文的結果和博文9中的結果有一些差距,感覺可能是訓練平臺和方法的原因,不同的訓練平臺和方法對於結果也有影響。


五,定位

5.1 定位網路

和OverFeat的方法類似,使用模型D(引數最少,表現最好)通過迴歸函式來替換分類器,兩種分類方法:SCR(single-classregression),用一個迴歸函式來學習預測所有類別的bounding box;PCR(per-class regression)每個類別有自己單獨的一個迴歸函式。

訓練:分別在S=256和S=384上訓練兩個模型,網路反饋學習時,探究了兩種情況1,fine tuning整個網路;2,只調整全連線層。

測試:

第一種測試框架:定位網路只應用在影象的裁剪中心,用於比較不同的網路修改下效能。


1,發現fine-tuning整個網路的定位效能,比值調整全連線層權值的定位結果要好。

2,PCR比SCR結果好,這個和OverFeat的結果相反。

所以最好的定位方法是採用PCR,fine-tuning整個網路。

第二種測試框架:利用OverFeat的貪婪融合過程(不使用offset pooling),在整個影象上密集應用定位網路;首先根據softmax分類結果給定bounding box的置信得分,然後融合空間相似的bounding box,最後選取最大置信得分的bounding box。

在不同scale下,定位結果。

1,適當的scale對於定位結果有影響S=384好於S=256。

2,multi-scale比single-scale好。

3,multi-model fusion會更好。

和其它state-of-the-art方法比較:

在使用較少的scale下,在不使用offset pooling情況下,本文的結果比OverFeat提高很多;曹成這種提高的原因主要在於網路結構上的不同,好網路,好分類,好定位,估計還有好檢測。

六,結論

深度是獲得好結果的關鍵。

一些理解和困惑

感覺本文在網路探討階段和博文9中探索最優網路比較類似;都是首先提出一個結果不錯的基礎網路A,然後在網路A上進行一些列的修改,一步一步地提高網路效能,進而探索好的網路設計應該是什麼樣的;博文9平衡網路各個因素探討的方式比本文比計較複雜度情況下增加深度,更加精細。而且兩篇文章的關於深度的結論相同,深度可以提升結果,但是深度會飽和。

這裡最大的疑問就是他們的網路A是怎麼提來的。

博文9中的A結構:

Input(224,224,3)→64F(7,7,3,s=2) →max-p(3,3,3)→128F(5,5,64) →max-p(2,2,2) →256F(3,3,128)→256F(3,3,256)→256F(3,3,256)spp(6*6,3*3,2*2,1*1)→4096fc→4096fc→softmax

感覺博文9的結構借鑑了Alex-net,ZF-net和本文的VGG,例如這種三段式結構是從瘦身版的Alex-net和ZF-net中來的,第一個卷積層有64個filter而不是96個,感覺是借鑑了本文第一卷積層的結構;還有就是可能依據本文或OverFeat中剔除了LRN。

但是本文的結構就找不到關係了, 5階段,filter的個數尺寸,網路結構等64-128-256-512-512;使用3*3小filter作者已經解釋了原因,但是這個關鍵的網路結構作者並沒有給出具體的設計依據,而是直接給出了結果;感覺一個是憑藉經驗,再有就是憑藉實驗;結合博文9中的觀點,感覺VGG網路還可以利用其中層析替換思想來提高分類結果。

裡一個困惑,就是“PCR比SCR結果好,這個和OverFeat的結果相反”;OverFeat中在三scale下 SCR-vs-PCR為31.3-vs-44.1;SCR要明顯好於PCR,OverFeat作者的解釋是PCR頂層有更多的迴歸函式,繼而有更多的引數,而每個類別的訓練樣本有限,導致每個類別的迴歸函式不能夠很好的訓練;但是本文作者的網路中PCR明顯好於SCR,訓練樣本並沒有增多,現在感覺OverFeat這種每類訓練樣本少的解釋合理性有待商榷;此外網路結構不同感覺是兩個結果區別的關鍵,除卷積提取階段不同外;全連線層的結構也不同OverFeat網路是4096-1024-regression;本文的網路是4096-4096-regression;從對比來看造成這種差距的原因估計是網路結果上的問題;但是這個可以解釋為什麼本文的結果比OverFeat的結果好,如果用網路結構來解釋PCR比SCR好,感覺有些牽強。所以感覺PCR和SCR兩種預測bounding box方法的影響因素,還是有些不明白。“還有一個不同的地方就是在上面的測試中,本文給出了圖片真正的分類,然後更具真是的類比,預測bounding box;而不是採用先預測分類,在預測bounding box的方法” 。