經典卷積神經網絡筆記-VGG16

VGG16論文鏈接: https://arxiv.org/abs/1409.1556 收錄於ICLR2015

網絡結構和配置:

作者在這篇論文中主要探討的是使用非常小的卷積核(3*3)來增加捲積神經網絡的深度對於性能有很大的提升。如Table 1所示,作者設置了A-E五種卷積神經網絡配置來探討深度對於性能的影響。結構D和E就是我們熟知的VGG16(13個卷積層+3個全連接層)和VGG19(16個卷積層+3個全連接層)。PS:層數是沒有包含maxpool的

這些網絡都遵循一種通用的設計,輸入到網絡的是一個固定大小的224*224的RGB圖像,所做的唯一預處理是從每個像素減去基於訓練集的平均RGB值。圖像通過一系列的卷積層時,全部使用3*3大小的卷積核。只有在配置C中,作者使用了1*1的卷積核,這可以被看作是輸入通道的線性映射(接着是非線性)。卷積的步長均爲1,padding也爲1。每個網絡配置都是5個最大池化層,最大池化的窗口大小爲2*2,步長爲2。

卷積層之後是三個完全連接(FC)層:前兩層有4096個通道,第三個層執行的是1000路ILSVRC分類,因此包含1000個通道(每個類一個)。最後一層是softmax層。在A-E所有網絡中,全連接層的配置是相同的。

所有的隱藏層都用Relu方法進行校正,只有結構A-LRN包含Local Response Normalisation(LRN)。這種規範化不會提高ILSVRC數據集的性能,但會增加內存消耗和計算時間。

卷積層的寬度(即每一層的通道數)的設置是很小的,從第一層64開始,按照每過一個最大池化層進行翻倍,直到到達512。在Table 1中,conv(感受野的大小)-(通道的數量),如conv3-64指的是卷積核大小爲3*3,通道數量爲64。

討論:

與此前的AlexNet第一層卷積核11*11步長爲4,ZF-net中卷積核7*7步長爲2相比,作者在整個網絡中都使用了很小的卷積核3*3步長爲1。實際上兩個3*3的卷積層(中間不含池化)的堆疊相當於擁有5*5大小的感受野,三個這樣的層堆疊相當於擁有7*7大小的感受野,如圖2所示。那爲什麼要用三個3*3的卷積層代替一個7*7的卷積層呢?首先,採用三個非線性校正層(Relu)代替一個校正層,可以使決策函數更具有判別性。其次,可以減少參數的數量:假設三層3*3卷積核堆疊的輸入輸出是C個通道,那麼權重的參數爲3x(3^2C^2)=27C^2,而如果是一個7*7的卷積層,那麼參數量是7^2C^2=49C^2,因此參數量減少了。

圖2 兩個3*3卷積堆疊相當於使用1個5*5卷積

VGG16參數量計算:

下面這張圖大致畫了一下輸入,第一個卷積層,到第一個卷積層輸出的特徵圖:

下面這張圖是根據CS231n的課程我進行的手動計算。計算內存參數量時考慮的是特徵圖的大小(寬*高*通道數),計算權重參數量時考慮的是卷積核的參數(卷積核的size*輸入通道數*輸出通道數),其中輸出通道數其實就是卷積核的個數。

在計算全連接層的參數量時,可以去看看下面這兩篇對於全連接層的講解:

對全連接層(fully connected layer)的通俗理解:https://blog.csdn.net/qq_39521554/article/details/81385159

CNN 入門講解:什麼是全連接層(Fully Connected Layer)?https://zhuanlan.zhihu.com/p/33841176

對前層是全連接的全連接層可以轉化爲卷積核爲1x1的卷積;而前層是卷積層的全連接層可以轉化爲卷積核爲hxw的全局卷積,h和w分別爲前層卷積結果的高和寬。

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