VGG學習總結

論文題目:Very Deep Convolutional Networks for Large-Scale Image Recognition
論文使用的VGG網絡在ILSVRC2014圖像分類比賽中獲得了第二名的成績,後來的許多網絡結構也是在VGG網絡的基礎上進行改進,取得了很好的效果。論文主要是討論了卷積神經網絡(ConvNet)架構設計的另一個重要方面——深度,通過將深度增加到16-19層,分類效果得到了顯著的提升。

注:爲了方便理解,博文結尾給出了一些概念的鏈接以及一些重要的參考文獻。

1 網絡結構
文章分別使用了6種不同深度的網絡進行對比,這6種網絡的結構如下:

這裏寫圖片描述

這幾個網絡都有一致的配置,只有層數不一樣,用A,B,…E命名,輸入的圖像是224x224的RGB圖像,做過的預處理是將圖像的每個像素減去RGB均值。卷積層的步長是1,pooling層是2x2的,步長爲2,最後連接三個全連接層後再接一個softmax進行分類,使用的激活函數爲ReLU。這幾個網絡裏只有A-LRN中使用了Local Response Normalisation (LRN) normalisation[1],由於使用了LRN效果沒有提升,反而增加了計算時間,所以在B,C,D,E的對比中不再將LRN引入。
雖然加深了網絡的深度,但是參數的數量並沒有比淺層的神經網絡的參數多太多(後邊會討論)

2 實驗過程
訓練過程
訓練使用的是帶有動量的mini-batch梯度下降的方法,batch大小爲256,動量設置爲0.9,訓練正則項所乘的參數設置爲5*10-4(10的-4次方),dropout率設置爲0.5,learning rate設置爲10的-2次方。實驗訓練了370k次(74個epochs)。
論文提到網絡權重的初始化很重要,初始化不好了可能會讓學習停止。論文是這樣做的,先對A網絡進行隨機初始化參數進行訓練,然後,將訓練好的A網絡的參數去初始化後邊深層網絡的前4層以及全連接層,剩下的層是用均值爲0,方差爲0.01的正態分佈去隨機初始化的,並且biases初始化爲0。並且論文裏提到,可能存在不需要預訓練參數直接進行初始化參數的方法,需要進一步探索。
爲了獲得224x224的輸入圖像,論文裏是對原圖進行各向同性的放縮後,採取隨機裁剪的方式獲得的,使用S代表放縮後的圖像的最短邊,所以S>=224。爲了擴充數據集,裁剪後的圖像進行了隨機的水平翻轉以及隨機的RGB顏色轉換[1]
同時呢,論文的還採用了多種尺度的訓練方式,就是將原始圖片採用不同的S放縮後進行裁剪訓練,比如讓S=256,S=384分別訓練,還有一種動態改變S的方式,就是給定S的範圍[Smin,Smax],讓每張訓練圖片隨機選取S進行訓練,這樣相當於通過尺度抖動來增強數據。
測試過程
首先,圖像的最小邊被各向同性的縮放成預定義的尺寸,設爲Q,Q並不一定要與訓練尺寸S相同。然後,根據[2]中的方法將網絡密集的應用在經過尺寸縮放的測試圖像上。即先將全連接層轉換成卷積層(第一個全連接層轉換成7×7的卷積層,後兩個全連接層轉換成1×1的卷積層),再將這樣得到的全卷積網絡運用在整幅圖像上(未裁切的)。輸出是一個分類得分圖,通道的數量和類別的數量相同,空間分辨率依賴於輸入圖像尺寸。最終爲了得到固定尺寸的分類得分向量,將分類得分圖進行空間平均化(求和——池化)。同樣使用水平翻轉來對測試集進行數據增強;在原始圖像和翻轉圖像上的soft-max分類概率的平均值作爲這幅圖像的最終得分。

實驗結果
實驗使用的是 ILSVRC-2012數據集,分爲三部分,訓練集:1.3M images,驗證集:50k images,測試集:100k images

這裏寫圖片描述

Table3是單尺度的實驗結果,從Table3可以看出,1,使用LRN並沒有提升效果,2,從A中的11層到D中的16層,隨着網絡深度的增加,錯誤率下降,但是E中的19層卻沒有進一步的提升,說明已經飽和,可能需要更多的 數據集得以提升,3,C(加的1x1卷積核)比D(加的3x3卷積核)的效果要差,說明增加額外的非線性確實有效(因爲C比B好,後邊討論1x1卷積的功能),但是使用卷積核捕捉圖像的空間信息很重要。

這裏寫圖片描述
Table4是一個多尺度的實驗結果,可以看到,採用[256,512]抖動尺度的訓練結果最好,將top5錯誤降低到了8.0%

這裏寫圖片描述
此外,論文裏最後還採用了一種網絡融合的方式提高精度,通過計算多個模型不同尺度的soft-max分類概率的平均值來對它們的輸出進行組合,可以看到error進一步下降

不同模型的比較
這裏寫圖片描述
當然這是2014年的論文了,比較的是當時的成果,Google那個指的GoogleNet

關於論文剩下的部分是講定位的,這裏就不做筆記了,因爲關於目標檢測已經有了更好更新的技術,比如faster-rcnn,Yolo等等,但是VGG的網絡卻被這些先進的框架所應用,說明也是相當經典了,下邊有一些關於論文中的一些問題的討論,裏邊有一些是論文裏的,一些是我的感悟,我想在設計網絡的過程中很有啓發意義,在此記錄一下。


討論
1, 小的卷積核的深層網絡性能優於大卷積核的淺層網絡
2,小的卷積核的卷積層連用(中間沒有pooling)和大的卷積核單用的感受野是相同的,比如2個3x3的卷積層連用和一個5x5的卷積層的感受野一樣,3個3x3的卷積層和一個7x7的卷積層感受野一樣。
3,小的卷積核的連用可以讓決策函數變得更有區分度,並且可以大大降低參數的數量,這就是文章裏深層網絡的參數卻比淺層網絡參數沒多多少的原因
4,深層網絡適合於大的數據集
5,關於1x1卷積核的作用:首先,增加決策函數的非線性,其次,對特徵進行了轉換,相當於“feature pooling”,比如把300x300x50的特徵圖可以降到300x300x20。
6,使用預訓練好的參數初始化可以加速訓練

一些鏈接:
1,關於1x1卷積核更詳細的解釋:http://iamaaditya.github.io/2016/03/one-by-one-convolution/
2,loss function和decision function的區別:https://stats.stackexchange.com/questions/104988/what-is-the-difference-between-a-loss-function-and-decision-function
3,Softmax的特點和作用:https://www.zhihu.com/question/23765351
4,神經網絡激勵函數的作用:https://www.zhihu.com/question/22334626/answer/21036590
5,CNN計算感受野:http://blog.csdn.net/bojackhosreman/article/details/70162018
6,迭代iteration和時期epochs之間的關係和區別:https://www.quora.com/What-is-the-difference-between-iterations-and-epochs-in-Convolution-neural-networks

參考文獻
[1]A. Krizhevsky, I. Sutskever, and G. E. Hinton. ImageNet classification with deep convolutional neural networks. In NIPS, pages 1106–1114, 2012.
[2] P. Sermanet, D. Eigen, X. Zhang, M. Mathieu, R. Fergus, and Y. LeCun. OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks. In Proc. ICLR, 2014.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章