用於大尺度圖片識別的非常深的卷積網絡
使用一個帶有非常小的(3*3)的卷積核的結構去加深深度,該論文的一個十分重要的改進就是它將卷機網絡的深度增加到了16-19層,且可以用於比較大224*224的圖片當中
其最大的特點就是采用了大量卷積核尺寸為3*3的卷積層,小尺寸的卷積核可以大大減少計算量。其網絡層數從11層到19層不等,主要由卷積層、池化層和全連接層組成,這一點延續了AlexNet的特點。該網絡最后幾層采用的是全連接層,而且全連接層的輸出節點很大(4096),這種設計雖然對提升模型效果有幫助,但是會帶來大量的參數量,這也是后續一些做模型加速和壓縮算法關注的點,最常見的做法就是使用其他網絡層比如卷積層替代這些全連接層
1.配置說明
在訓練中,網絡的輸入大小是固定的224*224圖片,對圖片做的唯一預處理操作是將訓練集中圖片每個像素減去他們的平均RGB值。使用了3*3大小的接受域(即卷積核),從下面的圖中我們也可以看出也用網絡C的配置中使用了1*1大小的接受域,可以看作是一個輸入channels的線性轉換(后面跟着非線性函數ReLU)。stride設置為1;對於3*3接受域padding設置為1;使用了5個max-pooling層,都跟在卷積層的后面,窗口設置為2*2,stride設置為2。之后還跟着3個全卷積層,前兩個有4096個channels,最后一個的輸出節點數是1000,因為ImageNet數據集的類別數是1000
只有網絡A-LRN帶有LRN(local response normalization)歸一化方法,從下面可見其並沒有改善性能,而且還增加內存消耗和計算時間
有A-E 6個不同深度的網絡,從網絡A的11層(8個卷積層和3個全連接層)到網絡E的19層(16個卷積層和3個全連接層)。網絡的寬度(即通道的數量)從第一層的64,在經過一個max-pooling層后增加一倍,直到到達512層
之前的網絡在第一個卷積層都是使用比較大的卷積核,如11*11且stride=4或7*7帶着stride=2,這個網絡使用的是3*3且stride=1的。可見兩個3*3卷積層(中間沒有空間池化層)等價於一個5*5層,三個卷積層等價於一個7*7層。
那么使用三個3*3卷積層替換一個7*7卷積層的好處是:
- 使用一個ReLU函數替換了三個ReLU函數,使決策函數更具分辨力
- 減少了參數的數量:假設三層3*3卷積層的輸入和輸出都是C個通道數,其參數有3*(32C2)=27C2,7*7的卷積層的參數有72C2=49C2
在網絡C中添加了1*1卷積層,在不影響卷積層的接受域的情況下增加決策函數的非線性,並沒有改變輸入輸出的channels的數量
2.分類框架
1)訓練
batch size設置為256,momentum設置為0.9。正則化將weight decay(L2 penalty multiplier)設置為5*10-4,對於前兩個全連接層的dropout正則化方法設置dropout ratio為0.5。學習率初始設置為10-2,並且當驗證集的准確率停止上升時,lr = lr/10。總之學習率衰減了3次,學習停止在了74 epochs。所以我們推測盡管我們的網絡對比2012的網絡有着更多的參數和更大的深度,由於(a)更大的深度和更小的卷積核大小和(b)某一層的預初始化帶來的隱含正則化效果,我們的網絡只需要很少的epoch去收斂
網絡權重的初始化是十分重要的,由於深度網絡中梯度的不穩定性,初始化不佳會使學習陷入停滯。
為了規避這個問題,當我們訓練的是如網絡A這種比較淺的網絡時使用的是隨機初始化。然后,當訓練更深層次的架構時,我們與net A一起初始化前四個卷積層和最后三個全連接層(中間的層都隨機初始化)。對於預初始化的層我們不減少他們的學習率,而是在學習的過程中允許他們改變。對於隨機初始化,我們是從均值為0方差為10-2的正態分布對權重進行采樣的。偏置bias設置為0.
為了獲得固定大小224*224的輸入圖片,對重置大小的訓練圖片進行隨機剪切。為了讓增加訓練集,隨機剪切后還進行了隨機水平翻轉和隨機RGB顏色變換
訓練圖片大小的設置:
S:isotropically-rescaled訓練圖片的最小邊,稱其為訓練尺度
當crop size被固定為224*224時,理論上S可以設置為任何不小於224的值。當S=224時,說明crop時剪切的是整個圖片的數據;當S遠遠大於224時,crop將對應於圖像的一小部分,包括一個小對象或一個對象部分。
考慮了兩種設置訓練尺度S的方法:
- 一種是固定S的大小,對應於單尺度訓練(注意在采樣裁剪中的圖片內容仍能夠代表多尺度圖片數據)。在這個實驗中設置了兩個固定的S大小,即256和384。根據配置,我們一開始使用S=256進行訓練,為了加速S=384的網絡,將weight初始化為在S=256時預訓練時得到的值,lr=10-3
- 另一個方法是設置S為多尺度,即每個圖片重置大小的S的值隨機在某個范圍[Smin,Smax]取值(設置Smin=256,Smax=512)。 因為圖片中的對象可能是不同的大小,在訓練時將其作為考量是十分有效的。通過尺度抖動,該多尺度能夠被看作是一種訓練集增強方式,即單模型被訓練去在一個大尺度范圍中識別對象。因為速度的原因,我們通過微調有着同樣配置,即預訓練時有着固定的S=384的單尺度模型的所有層來訓練多尺度模型,
2)測試
Q:預定義的圖片重置大小的最小圖片邊,稱為測試尺度
Q不需要等於訓練尺度S,我們也會使用水平翻轉來增加測試數據集
multi-crops
由於全卷積網絡應用於整個圖像,因此不需要在測試時對多個crops進行采樣(Krizhevsky et al., 2012),效率較低,需要網絡對每個crops重新計算。同時,像Szegedy等人(2014)所做的那樣,使用大量的crops集可以提高精度,因為與全卷積網絡相比,它可以對輸入圖像進行更精細的采樣。
同時,multi-crop評價是dense評價的補充,由於不同的卷積邊界條件:當應用一個ConvNet到一個crop中時,卷積特征映射將用0填充,然而在dense評估的情況下,對於相同crop,其填充自然來自於鄰近的部分圖像(由於卷積和空間池化),這大大增加了整體網絡接受域,所以能夠捕捉更多的上下文。雖然我們相信在實踐中多crops的增加計算時間並不證明准確性的潛在收益,為了參考,我們使用每個尺度50個crops(5 × 5個規則網格,2次翻轉)來評估我們的網絡,總共是3種尺度以上的150個crops,相當於Szegedy et al. (2014)中4尺度以上的144個crops
3.結果
1)圖片單尺度的評估-test
從結果可見A-LRN的效果並沒有比A好,所以后面的B-E網絡都沒有使用BN層
我們也可以看見分類錯誤隨着網絡層次的增加分類的錯誤率在降低。可見在同一個深度的網絡中C和D中,使用了1*1卷積核的C的性能差於使用了3*3的D。但是從C優於B我們又可以看出額外的非線性函數還是有用的,從D優於C可見使用並非微不足道的卷積核(即3*3的效果比1*1的好)能更好地獲取空間內容
由上圖可見(S在[256;512]兩個值)的訓練效果是優於(S=256或S=384)的。這證實了通過尺度抖動增強訓練集確實有助於捕獲多尺度圖像統計量。
2)圖片多尺度的評估-test
Q={S-32,S+32}。與此同時,在訓練時使用了尺度抖動,即S在[256;512]兩個值時,它將允許在測試時網絡被應用在更寬的尺度范圍中,Q={Smin, 0.5(Smin+Smax), Smax}
由下圖可見在測試時的尺度抖動導致更好的性能
3)multi-crop評估
使用dense和multi-crop兩種評估方法,還通過平均兩者的softmax輸出來評估兩者的互補性。由下表可見multi-crop比dense的效果要好一些,且兩者是互補的,因為他們兩者結合的結果比他們各自的結果都要好