【網絡結構】VGG-Net論文解析


@

0. 論文鏈接

論文鏈接

1. 概述

  VGG提出了相對AlexNet更深的網絡模型,並且通過實驗發現網絡越深性能越好(在一定范圍內)。在網絡中,使用了更小的卷積核(3x3),stride為1,同時不單單的使用卷積層,而是組合成了“卷積組”,即一個卷積組包括2-4個3x3卷積層(a stack of 3x3 conv),有的層也有1x1卷積層,因此網絡更深,網絡使用2x2的max pooling,在full-image測試時候把最后的全連接層(fully-connected)改為全卷積層(fully-convolutional net),重用訓練時的參數,使得測試得到的全卷積網絡因為沒有全連接的限制,因而可以接收任意寬或高為的輸入,另外VGGNet卷積層有一個顯著的特點:特征圖的空間分辨率單調遞減,特征圖的通道數單調遞增,這是為了更好地將HxWx3(1)的圖像轉換為1x1xC的輸出,之后的GoogLeNet與Resnet都是如此。另外上圖后面4個VGG訓練時參數都是通過pre-trained 網絡A進行初始賦值。上圖為VGG不同版本的網絡模型,較為流行的是VGG-16,與VGG-19。
  另外在某篇博客看到一段對VGG-Net與GoogLe-Net的總結,摘取至此(會在最后的參考鏈接給出引用):

GoogLeNet和VGG的Classification模型從原理上並沒有與傳統的CNN模型有太大不同。大家所用的Pipeline也都是:訓練時候:各種數據Augmentation(剪裁,不同大小,調亮度,飽和度,對比度,偏色),剪裁送入CNN模型,Softmax,Backprop。測試時候:盡量把測試數據又各種Augmenting(剪裁,不同大小),把測試數據各種Augmenting后在訓練的不同模型上的結果再繼續Averaging出最后的結果。

2. 網絡結構

2.1 卷積核

  使用3x3小卷積核,是能夠獲取上下左右中心信息的最小卷積核,同時在某些“卷積組”使用1x1卷積核,stride=1,padding=1(為了保證卷積層后像素保持不變),2個3x3卷積層堆疊起來相當於一個5x5卷積層,3個3x3卷積層堆疊起來相當於一個7x7卷積層。但一些3x3卷積層堆疊起來與直接一個7x7卷積層有什么好處呢?作者給出了如下幾個理由:

  1. 相當於組合了3個非線性修正層而不是只有一個,這樣使得決策函數識別性更強。
  2. 減少了參數的數量,假設有C個3x3卷積組,那么參數各位為:\(3(3^2C^2) = 27C^2\),而C個7x7卷積層他的參數為\(7^2C^2 = 49C^2\)
  3. 小卷積核代替大卷積核的正則作用帶來性能提升。作者用三個conv3x3代替一個conv7x7,認為可以進一步分解(decomposition)原本用7x7大卷積核提到的特征,這里的分解是相對於同樣大小的感受野來說的。

  1x1卷積核是在保持空間維度不變的情況下,進行了一個線性映射並且多加上了一層非線性修正層,是一種增加決策函數“非線性”(non-linearity)而不影響卷積層感受野的方式。

2.2 池化核

  相對於AlexNet使用的3x3池化核,VGG使用2x2池化核,stride為2的max pooling,從而獲取更細節的信息。

2.3 全連接層

  VGG最后三個全連接層在形式上完全平移AlexNet的最后三層,VGGNet后面三層(三個全連接層)為:

  1. FC4096-ReLU6-Drop0.5,FC為高斯分布初始化(std=0.005),bias常數初始化(0.1)
  2. FC4096-ReLU7-Drop0.5,FC為高斯分布初始化(std=0.005),bias常數初始化(0.1)
  3. FC1000(最后接SoftMax1000分類),FC為高斯分布初始化(std=0.005),bias常數初始化(0.1)

  在某個測試階段(whole-image)作者將FC層利用conv層代替,如下圖(上半部分是訓練階段,此時最后三層都是全連接層(輸出分別是4096、4096、1000),下半部分是測試階段(輸出分別是1x1x4096、1x1x4096、1x1x1000),最后三層都是卷積層):

改變之后,整個網絡由於沒有了全連接層,網絡中間的feature map不會固定,所以網絡對任意大小的輸入都可以處理。

3. 訓練

ps:以下來自翻譯,因為剛入門,對於訓練/測試模型的一些操作還不是很熟悉,所以直接翻譯了,積累一些訓練方法跟trick。

  ConvNet訓練過程通常遵循Krizhevsky等人(2012)(除了從多尺度訓練圖像中對輸入裁剪圖像進行采樣外,如下文所述)。也就是說,通過使用具有動量的小批量梯度下降(基於反向傳播(LeCun等人,1989))優化多項式邏輯回歸目標函數來進行訓練。批量大小設為256,動量為0.9。訓練通過權重衰減(L2懲罰乘子設定為)進行正則化,前兩個全連接層執行丟棄正則化(丟棄率設定為0.5)。學習率初始設定為,然后當驗證集准確率停止改善時,減少10倍。學習率總共降低3次,學習在37萬次迭代后停止(74個epochs)。我們推測,盡管與(Krizhevsky等,2012)相比我們的網絡參數更多,網絡的深度更大,但網絡需要更小的epoch就可以收斂,這是由於(a)由更大的深度和更小的卷積濾波器尺寸引起的隱式正則化,(b)某些層的預初始化。

  網絡權重的初始化是重要的,因為由於深度網絡中梯度的不穩定,不好的初始化可能會阻礙學習。為了規避這個問題,我們開始訓練配置A(表1),足夠淺以隨機初始化進行訓練。然后,當訓練更深的架構時,我們用網絡A的層初始化前四個卷積層和最后三個全連接層(中間層被隨機初始化)。我們沒有減少預初始化層的學習率,允許他們在學習過程中改變。對於隨機初始化(如果應用),我們從均值為0和方差為的正態分布中采樣權重。偏置初始化為零。值得注意的是,在提交論文之后,我們發現可以通過使用Glorot&Bengio(2010)的隨機初始化程序來初始化權重而不進行預訓練。

  為了獲得固定大小的224×224 ConvNet輸入圖像,它們從歸一化的訓練圖像中被隨機裁剪(每個圖像每次SGD迭代進行一次裁剪)。為了進一步增強訓練集,裁剪圖像經過了隨機水平翻轉和隨機RGB顏色偏移(Krizhevsky等,2012)。下面解釋訓練圖像歸一化。

  訓練圖像大小。令S是等軸歸一化的訓練圖像的最小邊,ConvNet輸入從S中裁剪(我們也將S稱為訓練尺度)。雖然裁剪尺寸固定為224×224,但原則上S可以是不小於224的任何值:對於,裁剪圖像將捕獲整個圖像的統計數據,完全擴展訓練圖像的最小邊;對於,裁剪圖像將對應於圖像的一小部分,包含小對象或對象的一部分。

  我們考慮兩種方法來設置訓練尺度S。第一種是修正對應單尺度訓練的S(注意,采樣裁剪圖像中的圖像內容仍然可以表示多尺度圖像統計)。在我們的實驗中,我們評估了以兩個固定尺度訓練的模型:(已經在現有技術中廣泛使用(Krizhevsky等人,2012;Zeiler&Fergus,2013;Sermanet等,2014))和。給定ConvNet配置,我們首先使用來訓練網絡。為了加速網絡的訓練,用預訓練的權重來進行初始化,我們使用較小的初始學習率。

  設置S的第二種方法是多尺度訓練,其中每個訓練圖像通過從一定范圍(我們使用和)隨機采樣S來單獨進行歸一化。由於圖像中的目標可能具有不同的大小,因此在訓練期間考慮到這一點是有益的。這也可以看作是通過尺度抖動進行訓練集增強,其中單個模型被訓練在一定尺度范圍內識別對象。為了速度的原因,我們通過對具有相同配置的單尺度模型的所有層進行微調,訓練了多尺度模型,並用固定的進行預訓練。

4. 測試

  在測試時,給出訓練的ConvNet和輸入圖像,它按以下方式分類。首先,將其等軸地歸一化到預定義的最小圖像邊,表示為Q(我們也將其稱為測試尺度)。我們注意到,Q不一定等於訓練尺度S(正如我們在第4節中所示,每個S使用Q的幾個值會導致性能改進)。然后,網絡以類似於(Sermanet等人,2014)的方式密集地應用於歸一化的測試圖像上。即,全連接層首先被轉換成卷積層(第一FC層轉換到7×7卷積層,最后兩個FC層轉換到1×1卷積層)。然后將所得到的全卷積網絡應用於整個(未裁剪)圖像上。結果是類得分圖的通道數等於類別的數量,以及取決於輸入圖像大小的可變空間分辨率。最后,為了獲得圖像的類別分數的固定大小的向量,類得分圖在空間上平均(和池化)。我們還通過水平翻轉圖像來增強測試集;將原始圖像和翻轉圖像的soft-max類后驗進行平均,以獲得圖像的最終分數。

  由於全卷積網絡被應用在整個圖像上,所以不需要在測試時對采樣多個裁剪圖像(Krizhevsky等,2012),因為它需要網絡重新計算每個裁剪圖像,這樣效率較低。同時,如Szegedy等人(2014)所做的那樣,使用大量的裁剪圖像可以提高准確度,因為與全卷積網絡相比,它使輸入圖像的采樣更精細。此外,由於不同的卷積邊界條件,多裁剪圖像評估是密集評估的補充:當將ConvNet應用於裁剪圖像時,卷積特征圖用零填充,而在密集評估的情況下,相同裁剪圖像的填充自然會來自於圖像的相鄰部分(由於卷積和空間池化),這大大增加了整個網絡的感受野,因此捕獲了更多的上下文。雖然我們認為在實踐中,多裁剪圖像的計算時間增加並不足以證明准確性的潛在收益,但作為參考,我們還在每個尺度使用50個裁剪圖像(5×5規則網格,2次翻轉)評估了我們的網絡,在3個尺度上總共150個裁剪圖像,與Szegedy等人(2014)在4個尺度上使用的144個裁剪圖像。

5. 其他

  文章最后還有單尺度評估與多尺度評估,多裁剪圖像評估等,這里就不細說了。

  另外在某篇博客找到了卷積層與全連接層之間的關系:
  卷積層和全連接層的唯一區別在於卷積層的神經元對輸入是局部連接的, 並且同一個通道(channel)內不同神經元共享權值(weights). 卷積層和全連接層都是進行了一個點乘操作, 它們的函數形式相同. 因此卷積層可以轉化為對應的全連接層, 全連接層也可以轉化為對應的卷積層.

  比如VGGNet[1]中, 第一個全連接層的輸入是\(7*7*512\), 輸出是4096. 這可以用一個卷積核大小\(7*7\), 步長(stride)為1, 沒有填補(padding), 輸出通道數4096的卷積層等效表示, 其輸出為\(1*1*4096\), 和全連接層等價. 后續的全連接層可以用1x1卷積等效替代. 簡而言之, 全連接層轉化為卷積層的規則是: 將卷積核大小設置為輸入的空間大小.

  這樣做的好處在於卷積層對輸入大小沒有限制, 因此可以高效地對測試圖像做滑動窗式的預測. 比如訓練時對\(224*224\)大小的圖像得到\(7*7*512\)的特征, 而對於\(384*384\)大小的測試圖像, 將得到\(12*12*512\)的特征, 通過后面3個從全連接層等效過來的卷積層, 輸出大小是\(6*6*1000\), 這表示了測試圖像在36個空間位置上的各類分數向量. 和分別對測試圖像的36個位置使用原始的CNN相比, 由於等效的CNN共享了大量計算, 這種方案十分高效而又達到了相同目的.

  全連接層和卷積層的等效表示最早是由[2]提出. [2]將卷積層中的線性核改成由一系列的全連接層組成的小神經網絡, 用於在每個卷積層提取更復雜的特征. 在實現時, NIN是由一個傳統卷積層后面加一系列1*1卷積得到的.

[3]論證了用卷積層替代全連接層的好處, 下圖黃色部分是多出來的計算量, 和將一個網絡運用在測試圖像的多個位置相比, 這種方法十分高效.

由於卷積層可以處理任意大小輸入, 非常適合檢測, 分割等任務, 比如[4]提出全卷積網絡用於進行語義分割.

6.參考鏈接

https://blog.csdn.net/abc_138/article/details/80568450
https://blog.csdn.net/qq_31531635/article/details/71170861
https://blog.csdn.net/qq_26591517/article/details/81071393
https://blog.csdn.net/u011440696/article/details/77756776
http://blog.leanote.com/post/dataliu/5d29e67dd0b0


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM