深度学习之学习(1-1) VGG16网络结构详解
?參見
1、網絡結構
根據卷積核大小和卷積層數,VGG共有6中配置,分別為A,A-LRN,B,C,D,E,其中D和E兩種最為常用,即i我們所說的VGG16和VGG19。
具體為:
1. 卷積-卷積-池化-卷積-卷積-池化-卷積-卷積-卷積-池化-卷積-卷積-卷積-池化-卷積-卷積-卷積-池化-全連接-全連接-全連接 。
2. 通道數分別為64,128,512,512,512,4096,4096,1000。卷積層通道數翻倍,直到512時不再增加。通道數的增加,使更多的信息被提取出來。全連接的4096是經驗值,當然也可以是別的數,但是不要小于最后的類別。1000表示要分類的類別數。
3. 所有的激活單元都是Relu 。
4. 用池化層作為分界,VGG16共有6個塊結構,每個塊結構中的通道數相同。因為卷積層和全連接層都有權重系數,也被稱為權重層,其中卷積層13層,全連接3層,池化層不涉及權重。所以共有13+3=16權重層。
5. 對于VGG16卷積神經網絡而言,其13層卷積層和5層池化層負責進行特征的提取,最后的3層全連接層負責完成分類任務。
vgg16總共有16層,13個卷積層和3個全連接層,第一次經過64個卷積核的兩次卷積后,采用一次pooling,第二次經過兩次128個卷積核卷積后,再采用pooling,再重復兩次三個512個卷積核卷積后,再pooling,最后經過三次全連接。
2、VGG16的卷積核
3. 卷積計算?
1)輸入圖像尺寸為224x224x3,經64個通道為3的3x3的卷積核,步長為1,padding=same填充,卷積兩次,再經ReLU激活,輸出的尺寸大小為224x224x64?
2)經max pooling(最大化池化),濾波器為2x2,步長為2,圖像尺寸減半,池化后的尺寸變為112x112x64?
3)經128個3x3的卷積核,兩次卷積,ReLU激活,尺寸變為112x112x128?
4)max pooling池化,尺寸變為56x56x128?
5)經256個3x3的卷積核,三次卷積,ReLU激活,尺寸變為56x56x256?
6)max pooling池化,尺寸變為28x28x256?
7)經512個3x3的卷積核,三次卷積,ReLU激活,尺寸變為28x28x512?
8)max pooling池化,尺寸變為14x14x512?
9)經512個3x3的卷積核,三次卷積,ReLU,尺寸變為14x14x512?
10)max pooling池化,尺寸變為7x7x512?
11)然后Flatten(),將數據拉平成向量,變成一維51277=25088。?
11)再經過兩層1x1x4096,一層1x1x1000的全連接層(共三層),經ReLU激活?
12)最后通過softmax輸出1000個預測結果
VGG16模型所需要的內存容量
?
4、什么是卷積??
image為需要進行卷積的圖片,而convolved feature為卷積后得到的特征圖;那么什么是卷積的過濾器也就是filter呢?圖中黃色矩陣即為filter,image為5X5大小的一維圖像,filter為3X3大小的一維矩陣;卷積過程是:filter與image對應位置相乘再相加之和,得到此時中心位置的值,填入第一行第一列,然后在移動一個格子(stride=1),繼續與下一個位置卷積…最后得到是3X3X1的矩陣。
——這里需要注明:卷積后的結果矩陣維度=(image矩陣維數-filter矩陣維數+2xpad)/2+1,對應上圖即寬width:3=(5-3+2x0)/1+1,高height:3=(5-3+2x0)/1+1;
在這里補充經過padding填充,那么卷積后圖片大小不會發生改變,如5X5的圖像大小,padding=1變成7X7,再用3X3的filter進行卷積,那么卷積后的寬高為(7-3+2x1)/1+1=7。
?
?
5、什么是maxpool?
最大池化就是取filter對應區域內最大像素值替代該像素點值,其作用是降維。在這里,池化使用的濾波器都是2*2大小,因此池化后得到的圖像大小為原來的1/2。下圖為最大池化過程:
?
6.1、從input到conv1
由于224不太好計算,那么這里使用input圖片大小為300x300x3舉例:
圖片:
首先兩個黃色的是卷積層,是VGG16網絡結構十六層當中的第一層(Conv1_1)和第二層(Conv1_2),合稱為Conv1。
那么,第一層怎么將300x300x3的矩陣變成一個300x300x64的呢??
假設RGB圖像為藍色框,橙色方塊為3x3x3的卷積核(即filter),那么卷積后得到的圖像應為298x298x1(此處沒有進行padding,步長為1),但是經過填充一圈的矩陣,所以得到的結果為300x300x1,在這層中有64個卷積核,那么原來的300x300x1就變成了300x300x64。
?
6.2、從conv1到conv2之間的過渡
在上面的結構圖可以看到,第一層卷積后要經過pooling,才到第二層,那么:
這層,pooling使用的filter是2x2x64,且步長為2,那么得到的矩陣維數剛好為原來的一半,第三個維度64不改變,因為那個指的是filter個數。
6.3、conv2到conv3
我們從上面的過程中知道了,input為300x300x3的圖片,經過第一層之后變成150x150x64,那么第二層里面有128個卷積核,可以推出經過第二層后得到是75x75x128。
6.4、進入conv3
可知,第三層有256個卷積核,那么得到就是75x75x256
?
6.5、從conv3到conv4之間的過渡
這里75是奇數,經過pad之后變成偶數76,那么就得到結果為38x38x256
其余的過程與上述一樣,最終得到10x10x512。
7、最后到三層全連接FC層
在全連接層中的每一個節點都與上一層每個節點連接,把前一層的輸出特征都綜合起來。在VGG16中,第一個全連接層FC1有4096個節點,上一層pool之后得到是10x10x512=51200個節點,同樣第二個全連接層FC2也有4096個節點,最后一個FC3有1000個節點。
4. 權重參數(不考慮偏置)?
1)輸入層有0個參數,所需存儲容量為224x224x3=150k 2)對于第一層卷積,由于輸入圖的通道數是3,網絡必須要有通道數為3的的卷積核,這樣的卷積核有64個,因此總共有(3x3x3)x64 = 1728個參數。 所需存儲容量為224x224x64=3.2M 計算量為:輸入圖像224×224×3,輸出224×224×64,卷積核大小3×3。所以Times=224×224×3x3×3×64=8.7×107?
3)池化層有0個參數,所需存儲容量為 圖像尺寸x圖像尺寸x通道數=xxx k 4)全連接層的權重參數數目的計算方法為:前一層節點數×本層的節點數。因此,全連接層的參數分別為: 7x7x512x4096 = 1027,645,444 4096x4096 = 16,781,321 4096x1000 = 4096000 按上述步驟計算的VGG16整個網絡總共所占的存儲容量為24M*4bytes=96MB/image 。所有參數為138M VGG16具有如此之大的參數數目,可以預期它具有很高的擬合能力;但同時缺點也很明顯: 即訓練時間過長,調參難度大。 需要的存儲容量大,不利于部署。?
5. 時間復雜度?
1)卷積層的時間復雜度大致是同一數量級的 2)隨著網絡深度加深,卷積層的空間復雜度快速上升(每層的空間復雜度是上層的兩倍) 3)全連接層的空間復雜度比卷積層的最后一層還大?
6. 特點?
1)小的卷積核 :3x3的卷積核 2)小的池化核 :2x2的池化核 3)層數更深特征圖更寬 :基于前兩點外,由于卷積核專注于擴大通道數、池化專注于縮小寬和高,使得模型架構上更深更寬的同時,計算量緩慢的增加; 4)全連接轉卷積 :網絡測試階段將訓練階段的三個全連接替換為三個卷積,測試重用訓練時的參數,使得測試得到的全卷積網絡因為沒有全連接的限制,因而可以接收任意寬或高為的輸入。?
7. 感受野?
VGG主要使用較小的卷積核代替較大的卷積核。在VGG16中,作者認為兩個3x3的卷積堆疊獲得的感受野大小,相當一個5x5的卷積;而3個3x3卷積的堆疊獲取到的感受野相當于一個7x7的卷積。這樣做一方面可以減少參數,增加了網絡深度,另一方面相當于進行了更多的非線性映射,可以增加網絡的擬合/表達能力。
1)替代性
下圖為2個3x3的卷積核代替1個5x5
?
?
?
?
2)參數減少 對于2個3x3卷積核,所用的參數總量為2x(3x3)xchannels, 對于1個5x5卷積核為5x5xchannels 對于3個3x3卷積核,所用的參數總量為3x(3x3)xchannels, 對于1個7x7卷積核為7x7xchannels 因此可以顯著地減少參數的數量
?
?
總結
以上是生活随笔為你收集整理的深度学习之学习(1-1) VGG16网络结构详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数论入门
- 下一篇: 天勤计算机考研高分笔记(一)绪论1数据结