論文地址:《Very Deep Convolutional Networks for Large-Scale Image Recognition》
思維導圖:https://mubu.com/explore/5JnjDt1vIng
一、背景
LSVRC:大規模影像識別挑戰賽
ImageNet Large Scale Visual Recognition Challenge 是李飛飛等人於2010年創辦的影像識別挑戰賽,自2010起連續舉辦8年,極大地推動計算機視覺發展。比賽專案涵蓋:影像分類(Classification)、目標定位(Object localization)、目標檢測(Object detection)、視訊目標檢測(Object detection from video)、場景分類(Scene classification)、場景解析(Scene parsing)。
VGG Net由牛津大學的視覺幾何組(V
isual G
eometry G
roup)參加2014年ILSVRC提出的網路模型,它主要的貢獻是展示了卷積神經網路的深度(depth)是演算法優良效能的關鍵部分。
二、Abstract
Q1:做了什麼?
研究了“卷積網路的深度”在大規模的影像識別環境下對準確性的影響(即神經網路的深度與其效能之間的關係)。
Q2:怎麼做的?
使用一個非常小的卷積核\((3\times3)\)對網路深度進行評估,評估發現將網路深度加至16層-19層,效能有了顯著提升。
Q3:做得怎麼樣?
在ImageNet Challenge 2014競賽中,定位賽道獲得第一名,分類賽道獲得第二名。
三、Architecture
論文提出了多種規模的網路架構(不同規模深度不盡相同),下圖為其中效能表現良好的網路架構之一:VGG16結構圖。
1、輸入
- 規格:3@224x224(3個通道,寬高畫素均為224);
- 唯一的預處理操作:計算出3個通道的平均值,在每個畫素上減去平均值(處理後迭代更少,收斂更快);
2、卷積
- 大部分網路架構使用非常小的3x3卷積核貫穿整個網路;
- 部分網路架構除了3x3卷積核之外還使用了1x1卷積核;
- 卷積層步長(stride)=1,3x3卷積核的填充(padding)=1;
- 所有隱藏卷積層都配備了ReLU非線性啟用。
3、池化
- 整個網路架構的池化總共由5個“MAX池化層”實現;
- 池化操作在一系列卷積操作之後執行;
- 池化視窗為2x2,步長=2。
4、分類器
所有卷積操作之後跟有3個全連線層(FC層):
- 前2個FC層:均為4096通道;
- 最後1個FC層:1000個通道;
- 全連線層之後是SoftMax分類器。
四、Dicussion
所有的ConvNet配置如圖所示,VGG結構全部都採用較小的卷積核(3x3,部分1x1):
1、3x3卷積核的作用(優勢)
兩個3×3的卷積層串聯相當於1個5×5的卷積層(二者具有等效感受野5x5),3個串聯的3×3卷積層串聯的效果相當於一個7×7的卷積層;
下圖展示了為什麼“兩個3x3卷積層”與“單個5x5卷積層”具有等效的5x5的感受野。
1)作用1:減少網路層引數
- 對於兩個3x3卷積核,所用的引數總量為\(2\times3^2\times{channels}\)(假設通過padding填充保證卷積層輸入輸出通道數不變);
- 對於單個5x5卷積核,引數量為\(5^2\times{channels}\);
- 引數量減少了\((1-\frac{2\times3^2\times{channels}}{5^2\times{channels}})\times100\%=28\%\)。
2)作用2:增加更多的非線性變換
2個3x3卷積層擁有比1個5x5卷積層更多的非線性變換(前者可以使用兩次ReLU啟用函式,而後者只有一次),使得卷積神經網路對特徵的學習能力更強。
2、1x1卷積核的作用
1)作用1:降低運算量
不影響輸入輸出的維度情況下(即圖片寬高尺寸不變),降低了大量運算,同時改變了維度(通道數);
2)作用2:提高非線性
卷積之後再緊跟ReLU進行非線性處理,提高決策函式的非線性。
五、Classification Framework
1、訓練
1)引數設定
- 使用了mini-batch的梯度下降法(帶有衝量),batch_size設為256,衝量設為0.9;
- 前兩個FC層使用了dropout(失活概率為0.5),用來緩解過擬合;
- 訓練通過權重衰減(L2懲罰因子設定為\(5\times{10}^{-4}\))進行正則化;
- 學習率初始化為0.01
- 當驗證集準確率穩定時,學習率減少為原來\(\frac{1}{10}\);
- 整個訓練過程,學習率總共降低3次,學習在37萬次迭代後停止(74個epochs)。
2)預訓練
- 先訓練較淺的網路A,待A效能收斂之後,將A的網路權重儲存下來;
- 再複用A網路的權重來初始化後面的幾個複雜模型
- 只對“前四個卷積層”、“後三層全連線層”複用A的網路權重,其它的中間層都是隨機初始化;
- 隨機初始化,均值是0,方差是0.01,bias是0。
- 只對“前四個卷積層”、“後三層全連線層”複用A的網路權重,其它的中間層都是隨機初始化;
3)多尺度訓練
Q1:什麼是多尺度訓練(Multi-scale)?
詳見:https://www.cnblogs.com/xxxxxxxxx/p/11629657.html
通俗點講,就是將一張圖片先進行等比例縮放到不同尺寸(實現1張圖片變多張圖片),再在縮放後的圖片中隨機裁剪出指定尺寸區域得到更多的影像。
就這樣,實現了訓練集的資料增強。
Q2:作用是什麼?
資料增強,有利於預防過擬合。
Q3:步驟是什麼?
- 步驟1:將原始影像縮放到不同尺寸S;
- Q:S設為多大合適呢?(兩種解決方法A1、A2)
- S過小,裁剪到224x224的時候,就相當於幾乎覆蓋了整個圖片,這樣對原始圖片進行不同的隨機裁剪得到的圖片就基本上沒差別,就失去了增加資料集的意義;
- S過大,,裁剪到的圖片只含有目標的一小部分,也不是很好。
- A1:單尺度訓練(將S設為一個固定值)
- 論文評估了S=256和S=384兩種單尺度模型;
- A2:多尺度訓練(將S設為一個區間\([S_{min}, S_{max}]\))
- 論文隨機從[256,512]的區間範圍內進行抽樣,這樣原始圖片尺寸不一,有利於訓練,這個方法叫做尺度抖動(scale jittering),有利於訓練集增強。
- Q:S設為多大合適呢?(兩種解決方法A1、A2)
- 步驟2:從縮放後的圖片隨機裁剪224x224區域的圖片;
- 步驟3:對裁剪後的圖片進行水平翻轉和隨機RGB色差調整(改變訓練影像中 RGB 通道的強度);
2、測試
測試階段與訓練階段主要有兩點不同:
- 對於測試集同樣採用Multi-scale,將影像縮放到尺寸Q,但是Q可以≠訓練尺度S;
- 將“FC全連線層”轉換為“等效卷積層”
- 第一個FC層轉為“7x7卷積層”;後兩個FC層均轉為“1x1卷積層”;
- 二者為什麼可以進行轉換?
- 轉換的作用是什麼?
- ①可以實現與FC層同樣的效果(即可以獲得與FC層相同的輸入輸出);
- ②去除了FC層必須要求“輸入影像尺寸固定”的限制條件(詳見:https://blog.csdn.net/qq_31347869/article/details/89484343
六、Classification Experiments
1、Single Scale Evaluation
- 若S採用單尺度,設Q=S;若S採用多尺度,設\(Q=0.5(S_{min}+S_{max})\);
- 通過“A-LRN”證明,網路中加入LRN沒什麼用;
- 通過比較A-E的“top-1 val.error”和“top-5 val.error”發現,網路深度越深,訓練效能越好,且深度達19層時,效能趨於飽和;
- 通過比較D和C,證明3x3卷積效果優於1x1卷積;
- 通過將“B”和“帶有5x5卷積的淺層網路”,發現兩個3x3卷積效果優於單個5x5卷積(即使二者具有等效的感受野);
- 通過比較單尺度S和多尺度S,發現尺度抖動有利於訓練集資料增強。
2、Multi-Scale Evaluation
- 保持S為單尺度(\(S=256 or S=384\)),檢視多尺度Q的效能(\(Q=\{S-32, S, S+32\}\));
- 令S為多尺度(\(S\in[S_{min}, S_{max}]\)),檢視多尺度Q的效能(\(Q=\{ S_{min}, 0.5(S_{min}+S_{max}, S_{max}) \}\));
- 證明測試時的尺度抖動導致了更好的效能。
3、Multi-Crop Evaluation
- 將“稠密\(ConvNet\)(即未進行多裁剪)評估”與“多裁剪影像評估”進行比較;
- 通過平均其soft-max輸出來評估兩種評估技術的互補性;
- 證明了使用多裁剪影像表現比密集評估略好,而且這兩種方法確實是互補的(因為它們的組合優於其中的每一種)。
4、ConvNet Fusion
- 檢視多個卷積網路融合結果;
- ILSVRC提交的是單規模網路;post-提交的是多規模網路;
- 表現最好的多尺度模型(配置D和E)的組合,它使用密集評估將測試誤差降低到7.0%,使用密集評估和多裁剪影像評估將測試誤差降低到6.8%。
七、我的總結
VGGNet網路特點:
- 層數深(VGG擁有5段卷積,每段卷積內包含2-3個卷積層),同時每段尾部配有最大池化層,適用於大型資料集;
- 網路簡潔,使用了同樣大小的卷積核尺寸(3x3)和最大池化尺寸(2x2)貫穿整個網路架構;
- 採用“幾個小濾波器(3x3)卷積層的串聯組合”替代“一個大濾波器(5x5或7x7)卷積層”,效果更好;
- 訓練和測試階段都對資料集進行了Multi-scale將圖片縮放並取樣,實現了資料增強;
- 測試階段將全連線層轉換為等效卷積層,去除了FC層對輸入影像尺寸的限制;
- 採用多GPU並行訓練,每個GPU處理部分資料。