AlexNet網絡結構詳解與模型的搭建

首先貼出三個鏈接:

1. AlexNet網絡結構詳解視頻

2. 使用pytorch搭建AlexNet並針對花分類數據集進行訓練

3. 使用tensorflow搭建AlexNet並針對花分類數據集進行訓練

 

AlexNet是2012年ILSVRC 2012(ImageNet Large Scale Visual Recognition Challenge)競賽的冠軍網絡,分類準確率由傳統方法的 70%+提升到 80%+(當時傳統方法已經進入瓶頸期,所以這麼大的提升是非常厲害的)。它是由Hinton和他的學生Alex Krizhevsky設計的。也是在那年之後,深度學習開始迅速發展。下圖是從AlexNet原論文中截取的網絡結構圖。

在圖中有上下兩個部分是因爲作者使用兩塊GPU進行並行訓練,所以上下兩個部分結構是一模一樣的,我們直接看下面部分就行了。接下來說說該網絡的亮點:

(1)首次利用 GPU 進行網絡加速訓練。

(2)使用了 ReLU 激活函數,而不是傳統的 Sigmoid 激活函數以及 Tanh 激活函數。

(3)使用了 LRN 局部響應歸一化。

(4)在全連接層的前兩層中使用了 Dropout方法按一定比例隨機失活神經元,以減少過擬合。

 

接着給出經卷積或池化後的矩陣尺寸大小計算公式:

 N = (W − F + 2P ) / S + 1

其中W是輸入圖片大小,F是卷積核或池化核的大小, P是padding的像素個數 ,S是步距

 

接下來我們對網絡的每一層進行詳細的分析:

卷積層1(由於使用了2塊GPU,所以卷積核的個數需要乘以2):

Conv1: kernels:48*2=96;kernel_size:11;padding:[1, 2] ;stride:4

其中kernels代表卷積核的個數,kernel_size代表卷積的尺寸,padding代表特徵矩陣上下左右補零的參數,stride代表步距

輸入的圖像shape: [224, 224, 3], 輸出特徵矩陣的shape: [55, 55, 96]

shape計算:N = (W − F + 2P ) / S + 1 = [ 224 - 11 + (1 + 2)] / 4 + 1 = 55

 

最大池化下采樣層1

Maxpool1: kernel_size:3;pading: 0;stride:2

其中kernel_size是池化核大小,padding代表特徵矩陣上下左右補零的參數,stride代表步距

輸入特徵矩陣的shape: [55, 55, 96], 輸出特徵矩陣的shape: [27, 27, 96]

shape計算:N = (W − F + 2P ) / S + 1 = (55 - 3) / 2 + 1 = 27

 

卷積層2

Conv2: kernels:128*2=256; kernel_size:5; padding: [2, 2]; stride:1

輸入特徵矩陣的shape:[27, 27, 96], 輸出特徵矩陣的shape: [27, 27, 256]

shape計算:N = (W − F + 2P ) / S + 1 = (27 - 5 + 4) / 1 + 1 = 27

 

最大池化下采樣層2

Maxpool2: kernel_size:3; pading: 0; stride:2

輸入特徵矩陣的shape:  [27, 27, 256],輸出特徵矩陣的shape: [13, 13, 256]

shape計算:N = (W − F + 2P ) / S + 1 = (27 - 3) / 2 + 1 = 13

 

卷積層3

Conv3: kernels:192*2=384; kernel_size:3; padding: [1, 1]; stride:1

輸入特徵矩陣shape:[13, 13, 256], 輸出特徵矩陣shape: [13, 13, 384]

shape計算:N = (W − F + 2P ) / S + 1 = (13 - 3 + 2) / 1 + 1 = 13

 

卷積層4

Conv4: kernels:192*2=384; kernel_size:3; padding: [1, 1]; stride:1

輸入特徵矩陣shape:[13, 13, 384], 輸出特徵矩陣shape: [13, 13, 384]

shape計算:N = (W − F + 2P ) / S + 1 = (13 - 3 + 2) / 1 + 1 = 13

 

卷積層5

Conv5: kernels:128*2=256; kernel_size:3; padding: [1, 1]; stride:1

輸入特徵矩陣shape:[13, 13, 384],輸出特徵矩陣shape: [13, 13, 256]

shape計算:N = (W − F + 2P ) / S + 1 = (13 - 3 + 2) / 1 + 1 = 13

 

最大池化下采樣層3

Maxpool3: kernel_size:3 padding: 0 stride:2

輸入特徵矩陣shape:[13, 13, 256] ,輸出特徵矩陣shape: [6, 6, 256]

shape計算:N = (W − F + 2P ) / S + 1 = (13 - 3) / 2 + 1 = 6

 

全連接層1

unit_size: 2048 (unit_size爲全連接層節點個數)

 

全連接層2

unit_size: 2048

 

全連接層3

unit_size: 1000(該層爲輸出層,輸出節點個數對應你分類任務的類別個數)

 

最後給出所有層參數的總表:

layer_name

kernel_size

kernel_num

padding

stride

Conv1

11

96

[1, 2]

4

Maxpool1

3

None

0

2

Conv2

5

256

[2, 2]

1

Maxpool2

3

None

0

2

Conv3

3

384

[1, 1]

1

Conv4

3

384

[1, 1]

1

Conv5

3

256

[1, 1]

1

Maxpool3

3

None

0

2

FC1

2048

None

None

None

FC2

2048

None

None

None

FC3

1000

None

None

None

關於模型的搭建與訓練代碼放在我的github中,大家可自行下載使用:

https://github.com/WZMIAOMIAO/deep-learning-for-image-processing

pytorch版本在pytorch_learning文件夾中,tensorflow版本在tensorflow_learning文件夾中.

 

 

 

 

 

 

 

 

 

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