圖像識別-AlexNet網絡結構詳解

一、簡介

AlexNet網絡,是2012年ImageNet競賽冠軍獲得者Hinton和他的學生Alex Krizhevsky設計的。在那年之後,更多的更深的神經網路被提出,比如優秀的vgg,GoogleLeNet。其官方提供的數據模型,準確率達到57.1%,top 1-5 達到80.2%. 這項對於傳統的機器學習分類算法而言,已經相當的出色.

論文:《ImageNet Classification with Deep Convolutional Neural Networks》

在這裏插入圖片描述

二、網絡結構解析

在這裏插入圖片描述
上圖所示是caffe中alexnet的網絡結構,採用是兩臺GPU服務器,所有會看到兩個流程圖。AlexNet的網絡模型解讀如下表:

在這裏插入圖片描述
在這裏插入圖片描述
解讀如下:

第一層:卷積層1,輸入爲 224×224×3 224 \times 224 \times 3224×224×3的圖像,卷積核的數量爲96,論文中兩片GPU分別計算48個核; 卷積核的大小爲 11×11×3 11 \times 11 \times 311×11×3; stride = 4, stride表示的是步長, pad = 0, 表示不擴充邊緣;
卷積後的圖形大小是怎樣的呢?
wide = (224 + 2 * padding - kernel_size) / stride + 1 = 54
height = (224 + 2 * padding - kernel_size) / stride + 1 = 54
dimention = 96
然後進行 (Local Response Normalized), 後面跟着池化pool_size = (3, 3), stride = 2, pad = 0 最終獲得第一層卷積的feature map
最終第一層卷積的輸出爲

第二層:卷積層2, 輸入爲上一層卷積的feature map, 卷積的個數爲256個,論文中的兩個GPU分別有128個卷積核。卷積核的大小爲:5×5×48 5 \times 5 \times 485×5×48; pad = 2, stride = 1; 然後做 LRN, 最後 max_pooling, pool_size = (3, 3), stride = 2;

第三層:卷積3, 輸入爲第二層的輸出,卷積核個數爲384, kernel_size = (3×3×256 3 \times 3 \times 2563×3×256), padding = 1, 第三層沒有做LRN和Pool

第四層:卷積4, 輸入爲第三層的輸出,卷積核個數爲384, kernel_size = (3×3 3 \times 33×3), padding = 1, 和第三層一樣,沒有LRN和Pool

第五層:卷積5, 輸入爲第四層的輸出,卷積核個數爲256, kernel_size = (3×3 3 \times 33×3), padding = 1。然後直接進行max_pooling, pool_size = (3, 3), stride = 2;6,7,8層是全連接層,每一層的神經元的個數爲4096,最終輸出softmax爲1000,因爲上面介紹過,ImageNet這個比賽的分類個數爲1000。全連接層中使用了RELU和Dropout。

用caffe 自帶的繪圖工具(caffe/python/draw_net.py) 和caffe/models/bvlc_alexnet/目錄下面的train_val.prototxt繪製的網絡結構圖如下圖:


python3 draw_net.py --rankdir TB ../models/bvlc_alexnet/train_val.prototxt AlexNet_structure.jpg

在這裏插入圖片描述

三、算法創新點

(1)成功使用ReLU作爲CNN的激活函數,並驗證其效果在較深的網絡超過了Sigmoid,成功解決了Sigmoid在網絡較深時的梯度彌散問題。雖然ReLU激活函數在很久之前就被提出了,但是直到AlexNet的出現纔將其發揚光大。

(2)訓練時使用Dropout隨機忽略一部分神經元,以避免模型過擬合。Dropout雖有單獨的論文論述,但是AlexNet將其實用化,通過實踐證實了它的效果。在AlexNet中主要是最後幾個全連接層使用了Dropout。

(3)在CNN中使用重疊的最大池化。此前CNN中普遍使用平均池化,AlexNet全部使用最大池化,避免平均池化的模糊化效果。並且AlexNet中提出讓步長比池化核的尺寸小,這樣池化層的輸出之間會有重疊和覆蓋,提升了特徵的豐富性。

(4)提出了LRN層,對局部神經元的活動創建競爭機制,使得其中響應比較大的值變得相對更大,並抑制其他反饋較小的神經元,增強了模型的泛化能力。

(5)多GPU訓練,可以增大網絡訓練規模.
(6)百萬級ImageNet數據圖像輸入.在AlexNet用到的Data Augmentation方式有三種:

平移變換(crop);
反射變換(flip);
光照和彩色變換(color jittering):先對圖片進行隨機平移,然後水平翻轉.測試時,先對左上,右上,左下,右下和中間做5次平移變換,然後翻轉之後對結果求平均.

歸納總結爲:

  1. 使用ReLU激活函數;
  2. 提出Dropout防止過擬合;
  3. 使用數據擴充增強數據集(Data augmentation);

水平翻轉圖像、隨機裁剪、平移變換、顏色變換、光照變換等

  1. 使用多GPU進行訓練;

將上層的結果按照通道維度拆分爲2份,分別送入2個GPU,如上一層輸出的27×27×96的像素層(被分成兩組27×27×48的像素層放在兩個不同GPU中進行運算);

  1. LRN局部歸一化的使用;
  2. 使用重疊池化(3*3的池化核)。

四、Caffe框架下訓練

準備數據集,修改Alexnet網絡的train.prototxt,配置solver,deploy.prototxt文件,新建train.sh腳本,即可開始訓練。

您的支持,是我不斷創作的最大動力~

可以關注我的個人微信公衆號:AI研習圖書館

交流學習,共同進步~

歡迎點贊,關注,留言交流~

深度學習,樂此不疲~

在這裏插入圖片描述

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