深度學習研究理解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的方法” 。