1. 程式人生 > >【模型解讀】從LeNet到VGG,看卷積+池化串聯的網路結構

【模型解讀】從LeNet到VGG,看卷積+池化串聯的網路結構

文章首發於微信公眾號《與有三學AI》

從本篇開始,我們將帶領大家解讀深度學習中的網路的發展

01 這是深度學習模型解讀第一篇,本篇我們將介紹LeNet,AlexNet,VGGNet,它們都是卷積+池化串聯的基本網路結構。

01 LeNet5

      LeNet5【1】有3個卷積層,2個池化層,2個全連線層。卷積層的卷積核都為5*5,stride=1,池化層都為Max pooling,啟用函式為Sigmoid,具體網路結構如下圖:

下面我們詳細解讀一下網路結構,先約定一些稱呼。

我們先約定一些叫法,比如featuremap為28*28*6,卷積引數大小為(5*5*1)*6。其中28*28是featuremap的高度,寬度,6是featuremap的通道數。(5*5*1)*6卷積核表示5*5的高度,寬度,通道數為1的卷積核有6個。你可以把(5*5*1)想象成一個厚度為1,長度,寬度各為5的卷積塊,以下依此類推。

1.Input

   輸入影象統一歸一化為32*32。

2.C1卷積層

   經過(5*5*1)*6卷積核,stride=1, 生成featuremap為28*28*6。

3.S2池化層

   經過(2*2)取樣核,stride=2,生成featuremap為14*14*6。

4.C3卷積層

   經過(5*5*6)*16卷積核,stride=1,生成featuremap為10*10*16。

5.S4池化層

    經過(2*2)取樣核,stride=2,生成featuremap為5*5*16。

6.C5卷積層    

   經過(5*5*16)*120卷積核,stride=1, 生成featuremap為1*1*120。

7.F6全連線層

   輸入為1*1*120,輸出為1*1*84,總引數量為120*84。

8.Output全連線層 。  

   輸入為1*1*84,輸出為1*1*10,總引數量為84*10。10就是分類的類別數。

02  AlexNet

2012年,Imagenet比賽冠軍—Alexnet (以第一作者Alex命名)【2】直接重新整理了ImageNet的識別率,奠定了深度學習在影象識別領域的優勢地位。網路結構如下圖:

1.Input

   輸入影象為227*227*3。

2.Conv1

   經過(11*11*3)*96卷積核,stride=4, (227-11)/4+1=55,生成featuremap為55*55*96。

3.Pool1

   經過3*3的池化核,stride=2,(55-3)/2+1=27,生成featuremap為27*27*96。

4.Norm1

   local_size=5,生成featuremap為27*27*96。

5.Conv2

   經過(5*5*96)*256的卷積核,pad=2,group=2,(27+2*2-5)/1+1=27,生成featuremap為27*27*256。

6.Pool2

   經過3*3的池化核,stride=2,(27-3)/2+1=13,生成featuremap為13*13*256。

7.Norm2

   local_size=5, 生成featuremap為13*13*256。

8.Conv3

   經過(3*3*256)*384卷積核,pad=1, (13+1*2-3)/1+1=13,生成featuremap為13*13*384。

9.Conv4

   經過(3*3*384)*384卷積核,pad=1,(13+1*2-3)/1+1=13,生成featuremap為13*13*384。

10.Conv5

     經過(3*3*384)*256卷積核,pad=1,(13+1*2-3)/1+1=13,生成featuremap為13*13*256。

11.Pool5

     經過(3*3)的池化核,stride=2,(13-3)/2+1=6,生成featuremap為6*6*256。

12.Fc6

     輸入為(6*6*256)*4096全連線,生成featuremap為1*1*4096。

13.Dropout6

     在訓練的時候以1/2概率使得隱藏層的某些神經元的輸出為0,這樣就丟掉了一半節點的輸出,BP的時候也不更新這些節點,以下Droupout同理。

14.Fc7

     輸入為1*1*4096,輸出為1*1*4096,總引數量為4096*4096。

15.Dropout7

     生成featuremap為1*1*4096。

16.Fc8

     輸入為1*1*4096,輸出為1000,總引數量為4096*1000。

總結:

1.網路比LeNet更深,包括5個卷積層和3個全連線層。

2.使用relu啟用函式,收斂很快,解決了Sigmoid在網路較深時出現的梯度彌散問題。

3.加入了dropout層,防止過擬合。

4.使用了LRN歸一化層,對區域性神經元的活動建立競爭機制,抑制反饋較小的神經元放大反應大的神經元,增強了模型的泛化能力。

5.使用裁剪翻轉等操作做資料增強,增強了模型的泛化能力。預測時使用提取圖片四個角加中間五個位置並進行左右翻轉一共十幅圖片的方法求取平均值,這也是後面刷比賽的基本使用技巧。

6.分塊訓練,當年的GPU沒有這麼強大,Alexnet創新地將影象分為上下兩塊分別訓練,然後在全連線層合併在一起。

7.總體的資料引數大概為240M。

03 VGG

VGGNet【3】主要的貢獻是利用帶有很小卷積核(3*3)的網路結構對逐漸加深的網路進行評估,結果表明通過加深網路深度至16-19層可以極大地改進前人的網路結構。這些發現也是參加2014年ImageNet比賽的基礎,並且在這次比賽中,分別在定位和分類跟蹤任務中取得第一名和第二名。

VGGNet的網路結構如下圖:

型別從A到E。此處重點講解VGG16。也就是圖中的型別D。如圖中所示,共有13個卷積層,3個全連線層。其全部採用3*3卷積核,步長為1,和2*2最大池化核,步長為2。

1.Input層

   輸入圖片為224*224*3。

2.CONV3-64

   經過(3*3*3)*64卷積核,生成featuremap為224*224*64。

3.CONV3-64

   經過(3*3*64)*64卷積核,生成featuremap為224*224*64。

4.Max pool

   經過(2*2)max pool核,生成featuremap為112*112*64。

5.CONV3-128。

   經過(3*3*64)*128卷積核,生成featuremap為112*112*128。

6. CONV3-128

    經過(3*3*128)*128卷積,生成featuremap為112*112*128。

7.Max pool

   經過(2*2)maxpool,生成featuremap為56*56*128。

8.CONV3-256

   經過(3*3*128)*256卷積核,生成featuremap為56*56*256。

9.CONV3-256

   經過(3*3*256)*256卷積核,生成featuremap為56*56*256。

10.CONV3-256

     經過(3*3*256)*256卷積核,生成featuremap為56*56*256。

11.Max pool

     經過(2*2)maxpool,生成featuremap為28*28*256

12.CONV3-512

     經過(3*3*256)*512卷積核,生成featuremap為28*28*512

13.CONV3-512

     經過(3*3*512)*512卷積核,生成featuremap為28*28*512。

14.CONV3-512

     經過(3*3*512)*512卷積核,生成featuremap為28*28*512。

15.Max pool

     經過(2*2)maxpool,生成featuremap為14*14*512。

16.CONV3-512

     經過(3*3*512)*512卷積核,生成featuremap為14*14*512。

17.CONV3-512

    經過(3*3*512)*512卷積核,生成featuremap為14*14*512。

18.CONV3-512

    經過(3*3*512)*512卷積核,生成featuremap為14*14*512。

19.Max pool

    經過2*2卷積,生成featuremap為7*7*512。

20.FC-4096

    輸入為7*7*512,輸出為1*1*4096,總引數量為7*7*512*4096。

21.FC-4096

    輸入為1*1*4096,輸出為1*1*4096,總引數量為4096*4096。

22.FC-1000

    輸入為1*1*4096,輸出為1000,總引數量為4096*1000。

總結:

1. 共包含引數約為550M。

2. 全部使用3*3的卷積核和2*2的最大池化核。

3. 簡化了卷積神經網路的結構。

04 總結

LeNet5是早期用於工程應用的網路結構,發展到AlexNet,啟用函式從sigmoid變為relu,加入了Dropout層等操作,引起了新一輪的深度學習熱潮。VGG基本是AlexNet的加強版,深度上是其2倍,引數量大小也是兩倍多。

這三個網路結構本質上都是(卷積+池化)堆疊的網路結構,是深度學習復興以來的第一個有重大工程意義的網路設計系列。

參考文獻

【1】Lécun Y, Bottou L, Bengio Y, et al. Gradient-based learning applied to document recognition[J]. Proceedings of the IEEE, 1998, 86(11):2278-2324.

【2】Krizhevsky A, Sutskever I, Hinton G E. ImageNet classification with deep convolutional neural networks[C]// International Conference on Neural Information Processing Systems. Curran Associates Inc. 2012:1097-1105.

【3】Simonyan K, Zisserman A. Very Deep Convolutional Networks for Large-Scale Image Recognition[J]. Computer Science, 2014.

同時,在我的知乎專欄也會開始同步更新這個模組,歡迎來交流

注:部分圖片來自網路

—END—

打一個小廣告,我在gitchat開設了一些課程和chat,歡迎交流。