一文讀懂物體分類AI算法:LeNet-5 AlexNet VGG Inception ResNet MobileNet

摘要: 當前深度學習十分火熱,深度學習網絡模型對於下降錯誤率的重要做用不言而喻。深度學習應用場景主要分爲三類:物體識別與分類,物體檢測,天然語言處理。在物體識別與分類領域,隨着AlexNet在2012年一炮走紅,深度學習從新燃起了一片熱情。從Lenet5第一次使用卷積開始,經歷了AlexNet VGG Inception ResNet等各類模型,錯誤率也一再下降。ResNet-152網絡

1 引言

當前深度學習十分火熱,深度學習網絡模型對於下降錯誤率的重要做用不言而喻。深度學習應用場景主要分爲三類:物體識別與分類,物體檢測,天然語言處理。在物體識別與分類領域,隨着AlexNet在2012年一炮走紅,深度學習從新燃起了一片熱情。從Lenet5第一次使用卷積開始,經歷了AlexNet VGG Inception ResNet等各類模型,錯誤率也一再下降。ResNet-152 top-5錯誤率僅爲3%左右,遠低於人眼的5.1%。本文主要講解各類網絡模型的結構,他們的特色,以及這些特色爲什麼能減小訓練時間和下降錯誤率。框架

2 LeNet-5

LeNet-5的出現標誌着CNN卷積神經網絡在AI領域的出現,CNN以視覺感覺野和權值共享的思想,大大減小了模型參數,使得深度學習模型訓練成爲了可能。但因爲誕生於1998年,GPU的概念都尚未提出,CPU的性能又是極其低下,並且LetNet-5只能使用在手寫字識別等很簡單的應用場景,故一直沒有火起來。但做爲CNN應用的開山鼻祖,學習CNN勢必先從學習LetNet-5開始。LeNet-5網絡結構以下圖函數

LeNet-5輸入爲32x32的二維像素矩陣,因爲是灰度圖,輸入通道爲1,其正向傳播步驟爲性能

  1. 先通過一層5x5的卷積,feature map爲6,也就是輸出通道爲6。因爲沒有在圖片四周加padding,像素矩陣大小變爲了28x28。這一層參數量爲(5x5+1)x6 = 156。
  2. 而後通過一層2x2的平均值池化層進行下采樣。像素矩陣大小變爲了14x14
  3. 再通過一層5x5的卷積,feature map爲16。像素矩陣大小變爲了10x10。這一層參數量爲(5x5x6+1)x16 = 2416
  4. 而後通過一層2x2的最大值池化層。像素矩陣大小變爲了5x5
  5. 在通過一層5x5的卷積,feature map爲120。像素矩陣大小變爲了1x1。這一層參數量爲(5x5x16+1)x120 = 48120
  6. 而後通過一層全鏈接層, 輸出爲84.故這一層參數量爲84x120 = 10080
  7. 最後一層爲Gaussian Connections輸出層,輸出0~9共10個分類。目前主流輸出層已經由softmax來代替

LeNet-5的特色以下學習

  1. 使用了卷積來提取特徵,結構單元通常爲卷積 - 池化 -非線性激活
  2. 已經加入了非線性激活,激活函數採用了tanh和sigmoid,目前大多數狀況下咱們使用的是relu
  3. 池化層使用的是平均值池化,目前大多數狀況下咱們使用最大值池化
  4. 分類器使用了Gaussian Connections,目前已經被softmax替代

3 AlexNet

AlexNet在2012年以16.4%的顯著優點問鼎ILSVRC的冠軍,從新燃起了人們對於深度學習研究的熱情。它第一次採用了relu,dropout,GPU加速等技巧,參數量爲6000萬,模型大小240M左右。其網絡結構以下spa

AlexNet輸入圖片爲224x224, 輸入爲RGB三通道。正向傳播共5個卷積層和3個全鏈接層,步驟爲設計

  1. conv1-relu1-pool1-lrn1: 11x11的卷積,步長爲4, 輸出通道96,也就是96個特徵圖。分爲兩組,每組48個通道。而後經過一層relu的非線性激活。在通過一層最大值池化,池化核大小3x3, 步長爲2。最後再通過一層LRN,局部響應歸一化。第一層運算後圖片大小爲27x27x96
  2. conv2-relu2-pool2-lrn2: 第二層的輸入即爲第一層的輸出,也就是27x27x96的像素矩陣。96個feature map分紅兩組,分別在兩個GPU中進行運算。卷積核大小爲5x5, 步長爲1,輸出通道爲128. 而後進過一層relu非線性激活。再通過一層最大值池化,池化核大小仍然爲3x3, 步長爲2. 最後再通過一層LRN。第二層運算後爲兩組13x13x128的圖片
  3. conv3-relu3: 第三層的輸入爲第二層的輸出,也就是13x13x128的像素矩陣。先通過卷積核大小爲3x3x192的卷積運算,步長爲1。而後就是relu非線性激活。注意這一層沒有max-pooling和LRN。第三層運算後爲兩組13x13x192
  4. conv4-relu4: 第四層先通過卷積核大小爲3x3, 步長爲1的卷積運算,而後通過relu非線性激活。第四層運算後尺寸仍然爲兩組13x13x192的圖片
  5. conv5-relu5-pool5:第五層先通過卷積核大小爲3x3, 輸出通道128,步長爲1的卷積運算,而後通過relu非線性激活。最後通過一層大小爲3x3, 步長爲2的max-pooling, 第五層運算後爲兩組6x6x128的圖片
  6. fc6-relu6-dropout6: 第六層爲全鏈接層,輸入爲兩組6x6x128, 組合在一塊兒也就是6x6x256。輸出通道爲4096。通過relu和dropout後輸出。輸出爲4096的一維向量
  7. fc7-relu7-dropout7: 第七層爲全鏈接層,輸入爲4096的一維向量,輸出也爲4096的一維向量,也就是4096x4096的全鏈接。而後經過relu和dropout輸出。輸出爲4096的一維向量。
  8. fc8: 第八層爲全鏈接層,輸入爲4096的一維向量,輸出爲1000的一維向量,對應1000個分類的輸出。也就是4096x1000的全鏈接。輸出爲1000的一維向量。通過這一層後就能夠經過softmax獲得1000個分類的分類結果了。

AlexNet的結構特色爲orm

  1. 採用relu替代了tanh和sigmoid激活函數。relu具備計算簡單,不產生梯度彌散等優勢,如今已經基本替代了tanh和sigmoid
  2. 全鏈接層使用了dropout來防止過擬合。dropout能夠理解爲是一種下采樣方式,能夠有效下降過擬合問題。
  3. 卷積-激活-池化後,採用了一層LRN,也就是局部響應歸一化。將一個卷積核在(x,y)空間像素點的輸出,和它先後的幾個卷積核上的輸出作權重歸一化。
  4. 使用了重疊的最大值池化層。3x3的池化核,步長爲2,所以產生了重疊池化效應,使得一個像素點在多個池化結果中均有輸出,提升了特徵提取的豐富性
  5. 使用CUDA GPU硬件加速。訓練中使用了兩塊GPU進行並行加速,使得模型訓練速度大大提升。
  6. 數據加強。隨機的從256x256的原始圖片中,裁剪獲得224x224的圖片,從而使一張圖片變爲了(256-224)^2張圖片。並對圖片進行鏡像,旋轉,隨機噪聲等數據加強操做,大大下降了過擬合現象。

4 VGG

VGG爲ILSVRC 2014年第二名,它探索了卷積網絡深度和性能,準確率之間的關係。經過反覆堆疊3x3卷積和2x2的池化,獲得了最大19層的深度。VGG19模型大概508M,錯誤率下降到7.3%。VGG模型不復雜,只有3x3這一種卷積核,卷積層基本就是卷積-relu-池化的結構,沒有使用LRN,結構以下圖。圖片

VGG的特色以下ip

  1. 採用了較深的網絡,最多達到19層,證實了網絡越深,高階特徵提取越多,從而準確率獲得提高。
  2. 串聯多個小卷積,至關於一個大卷積。VGG中使用兩個串聯的3x3卷積,達到了一個5x5卷積的效果,但參數量卻只有以前的9/25。同時串聯多個小卷積,也增長了使用relu非線性激活的機率,從而增長了模型的非線性特徵。
  3. VGG-16中使用了1x1的卷積。1x1的卷積是性價比最高的卷積,能夠用來實現線性變化,輸出通道變換等功能,並且還能夠多一次relu非線性激活。
  4. VGG有11層,13層,16層,19層等多種不一樣複雜度的結構。使用複雜度低的模型的訓練結果,來初始化複雜度高模型的權重等參數,這樣能夠加快收斂速度。

5 Google Inception

Google Inception是一個你們族,包括inceptionV1 inceptionV2 inceptionV3 inceptionV4等結構。它主要不是對網絡深度的探索,而是進行了網絡結構的改進。inceptionV1擊敗了VGG,奪得2014年ILSVRC冠軍。以後Google又對其網絡結構進行了諸多改進,從而造成了一個你們族。

5.1 InceptionV1

inceptionV1是一個設計十分精巧的網絡,它有22層深,只有500萬左右的參數量,模型大小僅爲20M左右,但錯誤率卻只有6.7%。它的網絡結構特色以下

  1. 去除了最後的全鏈接層,而使用全局平均池化來代替。這是模型之因此小的緣由。AlexNet和VGG中全鏈接幾乎佔據了90%的參數量。而inceptionV1僅僅須要1000個參數,大大下降了參數量
  2. inception module的使用。借鑑與Network in Network的思想,提出了inception module的概念,容許通道並聯來組合特徵。其結構以下

inception module分爲並聯的四路,分別爲單獨的1x1卷積,1x1並聯3x3, 1x1並聯5x5, 池化後1x1卷積。使用不一樣的卷積結構來提取不一樣特徵,而後將他們組合在一塊兒來輸出。

  1. 使用了1x1,3x3,5x5等不一樣尺寸的卷積,增長了提取特徵面積的多樣性,從而減少過擬合

5.2 inceptionV2

inceptionV2和V1網絡結構大致類似,其模型大小爲40M左右,錯誤率僅4.8%,低於人眼識別的錯誤率5.1%。主要改進以下

  1. 使用兩個串聯3x3卷積來代替5x5卷積,從而下降參數量,並增長relu非線性。這一點參考了VGG的設計
  2. 提出了Batch Normalization。在卷積池化後,增長了這一層正則化,將輸出數據歸一化到0~1之間,從而下降神經元分佈的不一致性。這樣訓練時就可使用相對較大的學習率,從而加快收斂速度。在達到以前的準確率以後還能繼續訓練,從而提升準確率。V2達到V1的準確率時,迭代次數僅爲V1的1/14, 從而使訓練時間大大減小。最終錯誤率僅4.8%

5.3 inceptionV3

inceptionV3的網絡結構也沒太大變化,其模型大小96M左右。主要改進以下

  1. 使用非對稱卷積。用1x3+3x1的卷積來代替一個3x3的卷積,下降了參數的同時,提升了卷積的多樣性
  2. 分支中出現了分支。以下圖

 

5.4 inceptionV4

inceptionV4主要是借鑑了resNet殘差網絡的思想,能夠看作是inceptionV3和resNet的結合。inceptionV4模型大小163M,錯誤率僅僅爲3.08%。主要在ResNet網絡中講解

6 ResNet

6.1 ResNetV1

ResNet由微軟提出,並奪得了2015年ILSVRC大賽的冠軍。它以152層的網絡深度,將錯誤率下降到只有3.57%,遠遠低於5.1%的人眼識別錯誤率。它一樣利用全局平均池化來代替全鏈接層,使得152層網絡的模型不至於太大。網絡中使用了1x1 3x3 5x5 7x7等不一樣尺寸的卷積核,從而提升卷積的多樣性。resNetV1_152模型大小爲214M,不算太大。

ResNet提出了殘差思想,將輸入中的一部分數據不通過神經網絡,而直接進入到輸出中。這樣來保留一部分原始信息,防止反向傳播時的梯度彌散問題,從而使得網絡深度一舉達到152層。當前有不少人甚至訓練了1000多層的網絡,固然咱們實際使用中100多層的就遠遠足夠了。殘差網絡以下圖

ResNet的主要特色,就一個字,深!

6.2 ResNetV2

ResNetV2相對於V1的最大變化,就是借鑑了inceptionV2的BN歸一化思想,這樣來減小模型訓練時間。

7 MobileNet

爲了能將模型部署在終端上,須要在保證準確率的前提下,減少模型體積,並下降預測時的計算時間,以提升實時性。爲了能到達這一目的,Google提出了mobileNet框架。最終mobileNetV1_1.0_224模型以16M的大小,能夠達到90%的top-5準確率。模型甚至能夠壓縮得更小,mobileNetV1_0.25_128只有10M左右,仍然能達到80%的準確率。

7.1 mobileNet depthwise原理

mobileNet模型的核心是,將一個普通的卷積拆分紅了一個depthwise卷積和一個1x1的普通卷積(也叫pointwise卷積)。depthwise卷積層的每一個卷積只和輸入的某一個channel進行計算,而combining則由1x1的卷積來負責。以下圖

對於卷積核dk*dk,輸入通道爲M,輸出通道爲N的普通卷積,每一個輸出通道都是由M個卷積分別和輸入通道作計算,而後累加出來,因此須要的參數量爲dk x dk x M x N。而對於depthwise卷積,每一個卷積只和輸入通道的某一個通道發生計算,而且不須要累加操做,其卷積後的輸出通道和輸入通道相等,仍然爲M。而後再通過一層1x1的普通卷積。故其參數爲dk x dk x M + 1 x 1 x M x N。

mobileNet參數量比原來減小了多少呢,咱們由下面的計算能夠得出

​ (dk x dk x M + 1 x 1 x M x N) / (dk x dk x M x N) = 1/N + 1/(dk^2)

因爲輸出通道通常都比較大,爲48 96 甚至4096, 故通常取1/(dk^2), 對於最多見的3x3卷積,mobileNet參數量能夠下降爲原來的1/9.

7.2 mobileNet網絡結構

mobileNet一共包含28層,第一層的卷積爲普通卷積,以後的卷積爲分解的3x3 depthwise卷積和1x1 pointwise卷積。另外,最後有一個全局平均池化層和全鏈接層。並利用softmax獲得分類結果。以下圖所示

7.3 mobileNet可裁剪化

爲了獲得更小的模型,mobileNet還能夠進行輸入通道和分辨率的剪裁,稱爲Width Multiplier 和 Resolution Multiplier。Width Multiplier 表示輸入通道變爲baseline的多少倍, Resolution Multiplier表示輸入圖像縮小爲多少。通過剪裁後的mobileNetV1_0.25_128模型,只有10M左右,準確率仍然可達到80%左右。做爲端上圖像預處理徹底足夠。下面是Width Multiplier 和 Resolution Multiplier的結果

8 總結

CNN已經普遍應用在物體識別和分類領域,短短几年間就出現了AlexNet VGG inception ResNet等優秀的神經網絡結構,而且每隔幾個月就問世一種優秀網絡結構,能夠說是百花齊放。這要歸功於TensorFlow等框架的成熟和GPU等硬件性能的提高,使得網絡結構的設計和驗證日趨平民化。各類網絡結構,其實本質上也是在解決神經網絡的幾大痛點問題,以下

  1. 減小模型參數量,下降模型體積
  2. 加快訓練收斂速度,減小訓練耗時
  3. 加快模型預測計算時間,提升實時性。這主要仍是經過減小參數量來達到
  4. 減小過擬合問題
  5. 減小網絡層級過深時的梯度彌散問題

學習網絡模型,不該該去死記硬背,由於有源源不斷的網絡結構涌現。咱們應該重點掌握每一個模型的特色,以及他們是如何來解決上面列舉的這些神經網絡痛點的。

原文連接

相關文章
相關標籤/搜索