經典網絡VGGNet介紹

經典網絡VGGNet(其中VGG爲Visual Geometry Group)由Karen Simonyan等於2014年提出,論文名爲《Very Deep Convolutional Networks for Large-Scale Image Recognition》,論文見:https://arxiv.org/pdf/1409.1556.pdf,網絡結構如下圖所示,其中D和E即爲VGG-16和VGG-19:

下圖是來自https://neurohive.io/en/popular-networks/vgg16/ 中VGG-16架構的截圖:

VGG-16(13個卷積層+3個全連接層)與VGG-19(16個卷積層+3個全連接層)的區別:每個卷積層後跟ReLU

(1).VGG-16:2個卷積層+Max Pooling+2個卷積層+Max Pooling+3個卷積層+Max Pooling+3個卷積層+Max Pooling+3個卷積層+Max Pooling+3個全連接層。

(2).VGG-19:2個卷積層+Max Pooling+2個卷積層+Max Pooling+4個卷積層+Max Pooling+4個卷積層+Max Pooling+4個卷積層+Max Pooling+3個全連接層。

假如輸入圖像大小爲n*n,過濾器(filter)爲f*f,padding爲p,步長(stride)爲s,則輸出大小爲:如果商不是整數,向下取整,即floor函數。參考:https://blog.csdn.net/fengbingchun/article/details/80262495

VGGNet網絡證明了增加網絡深度有利於分類精度,使錯誤率下降。VGGNet模型應用到其它圖像數據集上泛化性也很好。

VGGNet網絡:

(1).結構簡潔:卷積層+ReLU、最大池化層、全連接層、Softmax輸出層。

(2).使用連續幾個較小卷積核(3*3)替換AlexNet中的較大卷積核且採用same padding(即p=(f-1)/2),既減少參數,又進行了更多的非線性映射,可以增加網絡的擬合能力。分爲5段卷積,每段包括2至4卷積層。

(3).最大池化,小池化核(2*2),stride爲2。

(4).通道數即feature maps數逐漸翻倍增加,使得更多的信息可以被提取出來。

(5).訓練時將同一張圖像縮放到不同的大小,在隨機裁剪到224*224大小以及隨機水平翻轉,增加訓練數據量。

(6).在測試階段,將3個全連接層替換爲3個卷積層,這樣輸入層可以接收任意寬或高的圖像。

VGG-16架構:13個卷積層+3個全連接層,predict時對各層進行說明,參照:https://github.com/fengbingchun/Caffe_Test/blob/master/test_data/Net/VGG-16/vgg-16_deploy.prototxt

(1).輸入層(Input):圖像大小爲224*224*3。

(2).卷積層1+ReLU:使用64個3*3的filter,stride爲1,padding爲1,輸出爲224*224*64,64個feature maps,訓練參數(3*3*3*64)+64=1792。

(3).卷積層2+ReLU:使用64個3*3的filter,stride爲1,padding爲1,輸出爲224*224*64,64個feature maps,訓練參數(3*3*64*64)+64=36928。

(4).最大池化層:filter爲2*2,stride爲2,padding爲0,輸出爲112*112*64,64個feature maps。

(5).卷積層3+ReLU:使用128個3*3的filter,stride爲1,padding爲1,輸出爲112*112*128,128個feature maps,訓練參數(3*3*64*128)+128=73856。

(6).卷積層4+ReLU:使用128個3*3的filter,stride爲1,padding爲1,輸出爲112*112*128,128個feature maps,訓練參數(3*3*128*128)+128=147584。

(7). 最大池化層:filter爲2*2,stride爲2,padding爲0,輸出爲56*56*128,128個feature maps。

(8).卷積層5+ReLU:使用256個3*3的filter,stride爲1,padding爲1,輸出爲56*56*256,256個feature maps,訓練參數(3*3*128*256)+256=295168。

(9).卷積層6+ReLU:使用256個3*3的filter,stride爲1,padding爲1,輸出爲56*56*256,256個feature maps,訓練參數(3*3*256*256)+256=590080。

(10).卷積層7+ReLU:使用256個3*3的filter,stride爲1,padding爲1,輸出爲56*56*256,256個feature maps,訓練參數(3*3*256*256)+256=590080。

(11). 最大池化層:filter爲2*2,stride爲2,padding爲0,輸出爲28*28*256,256個feature maps。

(12).卷積層8+ReLU:使用512個3*3的filter,stride爲1,padding爲1,輸出爲28*28*512,512個feature maps,訓練參數(3*3*256*512)+512=1180160。

(13).卷積層9+ReLU:使用512個3*3的filter,stride爲1,padding爲1,輸出爲28*28*512,512個feature maps,訓練參數(3*3*512*512)+512=2359808。

(14).卷積層10+ReLU:使用512個3*3的filter,stride爲1,padding爲1,輸出爲28*28*512,512個feature maps,訓練參數(3*3*512*512)+512=2359808。

(15). 最大池化層:filter爲2*2,stride爲2,padding爲0,輸出爲14*14*512,512個feature maps。

(16).卷積層11+ReLU:使用512個3*3的filter,stride爲1,padding爲1,輸出爲14*14*512,512個feature maps,訓練參數(3*3*512*512)+512=2359808。

(17).卷積層12+ReLU:使用512個3*3的filter,stride爲1,padding爲1,輸出爲14*14*512,512個feature maps,訓練參數(3*3*512*512)+512=2359808。

(18).卷積層13+ReLU:使用512個3*3的filter,stride爲1,padding爲1,輸出爲14*14*512,512個feature maps,訓練參數(3*3*512*512)+512=2359808。

(19). 最大池化層:filter爲2*2,stride爲2,padding爲0,輸出爲7*7*512,512個feature maps。

(20).全連接層1+ReLU+Dropout:有4096個神經元或4096個feature maps,訓練參數(7*7*512)*4096=102760488。

(21). 全連接層2+ReLU+Dropout:有4096個神經元或4096個feature maps,訓練參數4096*4096=16777216。

(22). 全連接層3:有1000個神經元或1000個feature maps,訓練參數4096*1000=4096000。

(23).輸出層(Softmax):輸出識別結果,看它究竟是1000個可能類別中的哪一個。

train和predict的可視化結果如下圖所示:

GitHubhttps://github.com/fengbingchun/NN_Test

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