一、簡介
論文全名:《Very Deep Convolutional Networks for Large-Scale Image Recognition》
2014年,牛津大學計算機視覺組(Visual Geometry Group)和Google DeepMind公司的研究員一起研發出了新的深度卷積神經網絡:VGGNet,並取得了ILSVRC2014比賽分類項目的第二名(第一名是GoogLeNet,也是同年提出的)和定位項目的第一名。
VGGNet探索了卷積神經網絡的深度與其性能之間的關系,成功地構築了16~19層深的卷積神經網絡,證明了增加網絡的深度能夠在一定程度上影響網絡最終的性能,使錯誤率大幅下降,同時拓展性又很強,遷移到其它圖片數據上的泛化性也非常好。到目前為止,VGG仍然被用來提取圖像特征。
VGGNet可以看成是加深版本的AlexNet,都是由卷積層、全連接層兩大部分構成。
二、VGGNet的特點
-
小卷積核和多卷積子層
-
卷積核的尺寸設置為(3x3)是因為這是捕獲左/右,上/下,中心概念的最小尺寸。
-
-
使用小卷積核(3x3)和多卷積子層代替一個卷積核較大的卷積層的好處一是可以減少參數,二是相當於進行了更多的非線性映射,可以增加網絡的擬合/表達能力。
-
相比於AlexNet中較大的卷積核尺寸(如11x11, 7x7),VGG通過降低卷積核的大小(3x3),增加卷積子層數來達到同樣的性能(VGG:從1到4卷積子層,AlexNet:1子層)。
-
VGG的作者認為兩個3x3的卷積堆疊獲得的感受野大小,相當一個5x5的卷積;而3個3x3卷積的堆疊獲取到的感受野相當於一個7x7的卷積。這樣可以增加非線性映射,也能很好地減少參數(例如7x7的參數為49個,而3個3x3的參數為27)
-
-
小池化核
相比AlexNet的3x3的池化核,VGG全部采用2x2的池化核。 -
通道數多
VGG網絡第一層的通道數為64,后面每層都進行了翻倍,最多到512個通道,通道數的增加,使得更多的信息可以被提取出來。 -
層數更深、特征圖更寬
由於卷積核專注於擴大通道數、池化專注於縮小寬和高,使得模型架構上更深更寬的同時,控制了計算量的增加規模。 -
全連接轉卷積(測試階段)
在網絡測試階段將訓練階段的三個全連接替換為三個卷積,使得測試得到的全卷積網絡因為沒有全連接的限制,因而可以接收任意寬或高為的輸入,這在測試階段很重要。
例如7x7x512的層要跟4096個神經元的層做全連接,則替換為對7x7x512的層作通道數為4096、卷積核為1x1的卷積。
全連接轉卷積的思路是參考了OverFeat的工作思路,如下圖所示,對14x14的圖像進行卷積操作,在得到5x5的feature map后的這一步,如果使用全連接,就會把它壓平再全連接,這樣就破壞了feature map的圖像位置關系,直接轉為一列特征。但是如果使用的是全卷積,最后會得到1x1xC的feature map,C是channel數,也是類別的大小。這個時候如果來了一張16x16的圖像,經過全卷積后就會得到2x2xC的feature map,這個時候可以對這個2x2的4個值做一個取最大或平均,就會變成一個值了,以此類推,來了更大的圖像,最后得到的feature map就是3x3xC,4x4xC,5x5xC的大小,輸出的大小和輸入的大小相關,但總是可以對這個輸出map池化(取最大)來得到這個類別的值。 -
用簡單模型初始化復雜模型
VGGNet在訓練的時候先訓級別A的簡單模型,再復用A網絡的權重來初始化后面的幾個復雜模型,這樣收斂速度更快 -
采用了Multi-Scale的方法來訓練和預測
可以增加訓練的數據量,防止模型過擬合,提升預測准確率。
三、 網絡結構
在這篇論文中分別使用了A、A-LRN、B、C、D、E這6種網絡結構進行測試,這6種網絡結構相似,都是由5層卷積層、3層全連接層組成,其中區別在於每個卷積層的子層數量不同,從A至E依次增加(子層數量從1到4),總的網絡深度從11層到19層(添加的層以粗體顯示),表格中的卷積層參數表示為conv<感受野大小>-<通道數>,例如con3-128,表示使用3x3的卷積核,通道數為128。為了簡潔起見,在表格中不顯示ReLU激活功能。
VGG16處理過程如下:
1、輸入224x224x3的圖片,經64個3x3的卷積核作兩次卷積+ReLU,卷積后的尺寸變為224x224x64
2、作max pooling(最大化池化),池化單元尺寸為2x2(效果為圖像尺寸減半),池化后的尺寸變為112x112x64
3、經128個3x3的卷積核作兩次卷積+ReLU,尺寸變為112x112x128
4、作2x2的max pooling池化,尺寸變為56x56x128
5、經256個3x3的卷積核作三次卷積+ReLU,尺寸變為56x56x256
6、作2x2的max pooling池化,尺寸變為28x28x256
7、經512個3x3的卷積核作三次卷積+ReLU,尺寸變為28x28x512
8、作2x2的max pooling池化,尺寸變為14x14x512
9、經512個3x3的卷積核作三次卷積+ReLU,尺寸變為14x14x512
10、作2x2的max pooling池化,尺寸變為7x7x512
11、與兩層1x1x4096,一層1x1x1000進行全連接+ReLU(共三層)
12、通過softmax輸出1000個預測結果
四、網絡復雜度分析
A、A-LRN、B、C、D、E這6種網絡結構的深度雖然從11層增加至19層,但參數量變化不大,這是由於基本上都是采用了小卷積核(3x3,只有9個參數),這6種結構的參數數量(百萬級)並未發生太大變化,這是因為在網絡中,參數主要集中在全連接層。
對於VGG16:
在內存使用方面最初的卷積層使用的內存最多;
在參數使用方面最后的卷積層參數數量最大;
五、模型評估方法
預初始化權重
對於深度網絡來說,網絡權值的初始化十分重要。為此,論文中首先訓練一個淺層的網絡結構A(網絡結構見上圖),訓練這個淺層的網絡時,隨機初始化它的權重就足夠得到比較好的結果。然后,當訓練深層的網絡時,前四層卷積層和最后的三個全連接層使用的是學習好的A網絡的權重來進行初始化,而其余層則隨機初始化。這也就是上一點提到的某些層的預初始化。(隨機初始化權重時,使用的是0均值,方差0.01的正態分布;偏置則都初始化為0)。
訓練圖像尺寸選擇
S是訓練圖像的最小邊,訓練尺度。
Q是測試圖像的最小邊,測試尺度。
對原始圖片進行等比例縮放,使得S大於224,然后在圖片上隨機提取224x224窗口,進行訓練。
單一尺度訓練:固定 S 的大小,對應了單一尺度的訓練,訓練多個分類器。訓練S=256和S=384兩個分類器,其中S=384的分類器用S=256的權重進行初始化;
多尺度(Multi-scale)訓練(尺度抖動):直接訓練一個分類器,每次數據輸入的時候,每張圖片被重新縮放,縮放的短邊S隨機從[256,512]中選擇一個,也可以認為通過尺度抖動(scale jittering)進行訓練集增強。圖像中的目標可能具有不同的大小,所以訓練時認為這是有用的。
模型評估
VGG在test的時候提出了輸入圖像Q未必要等於S,並且之后更是率先提出了全卷積網絡來實現dense評估。
-
單一尺度評估(single scale)
即測試圖像大小Q固定,若S固定,則Q=S;若S抖動,則Q=0.5(Smin+Smax)從表中可以看出:
-
LRN層無性能增益(A-LRN) VGG作者通過網絡A-LRN發現,AlexNet曾經用到的LRN層(local response normalization,局部響應歸一化)並沒有帶來性能的提升,而且還浪費了內存計算損耗。 因此在其它組的網絡中均沒再出現LRN層。
-
隨着深度增加,分類性能逐漸提高(A、B、C、D、E) 從11層的A到19層的E,網絡深度增加對top1和top5的錯誤率下降很明顯。
-
多個小卷積核比單個大卷積核性能好(B) VGG作者做了實驗用B和自己一個不在實驗組里的較淺網絡比較,較淺網絡用conv5x5來代替B的兩個conv3x3,結果顯示多個小卷積核比單個大卷積核效果要好。
-
訓練時的尺度抖動(S∈[256;512])得到了與固定最小邊(S=256或S=384)的圖像訓練相比更好的結果。這證實了通過尺度抖動進行的訓練集增強確實有助於捕獲多尺度圖像統計。
-
-
多尺度評估(multi-scale)
即評估圖像大小Q不固定,Q = {S{min}, 0.5(S{min} + S{max}), S{max}作者通過試驗發現當使用固定值S訓練時,Q的范圍在[S−32,S,S+32]之間時,測試的結果與訓練結果最接近,否則可能由於訓練和測試尺度之間的巨大差異導致性能下降。 實驗結果表明測試時的尺度抖動與在單一尺度上相同模型的評估相比性能更優,並且尺度抖動優於使用固定最小邊S的訓練。
-
多裁剪評估(multi-crop)
Dense(密集評估):即指全連接層替換為卷積層(第一FC層轉換到7×7卷積層,最后兩個FC層轉換到1×1卷積層),最后得出一個預測的score map,再對結果求平均。
multi-crop(多裁剪評估):即對圖像進行多樣本的隨機裁剪。對三個尺度上每個尺度進行50次裁剪(5x5大小的正常網格,並進行兩次翻轉)即總共150次裁剪的效果圖,然后通過網絡預測每一個樣本的結構,最終對所有結果平均。
多剪裁表現要略好於密集評估,並且這兩種方法是互補的,因為它們的結合優於它們中的每一種。
多裁剪圖像評估是密集評估的補充:當將ConvNet應用於裁剪圖像時,卷積特征圖用零填充,而在密集評估的情況下,相同裁剪圖像的填充自然會來自於圖像的相鄰部分(由於卷積和空間池化),這大大增加了整個網絡的感受野,因此捕獲了更多的上下文。 由於全卷積網絡被應用在整個圖像上,所以不需要在測試時對采樣多個裁剪圖像,因為它需要網絡重新計算每個裁剪圖像,這樣效率較低。使用大量的裁剪圖像可以提高准確度,因為與全卷積網絡相比,它使輸入圖像的采樣更精細。
六、參考資料
VGGNet相關:
https://my.oschina.net/u/876354/blog/1634322
https://blog.csdn.net/qq_31531635/article/details/71170861
https://www.cnblogs.com/TIMHY/p/10669978.html
OverFeat相關:
https://www.cnblogs.com/liaohuiqiang/p/9348276.html