卷積神經網絡CNN經典模型


近期看了一些卷積神經網絡的模型(Lenet,Alexnet,Googlenet,VGG),對各個網絡的結構有點混淆。於是在網上找到這篇幫助理解各個網絡結構的博文,遂轉載學習。本文出自Bin的專欄blog.csdn.net/xbinworld。感謝博主的分享。

關於卷積神經網絡CNN,網絡和文獻中有非常多的資料,我在工作/研究中也用了好一段時間各種常見的model了,就想着簡單整理一下,以備查閱之需。如果讀者是初接觸CNN,建議可以先看一看“Deep Learning(深度學習)學習筆記整理系列”中關於CNN的介紹[1],是介紹我們常說的Lenet為例,相信會對初學者有幫助。

  1. Lenet,1986年
  2. Alexnet,2012年
  3. GoogleNet,2014年
  4. VGG,2014年
  5. Deep Residual Learning,2015年

Lenet

就從Lenet說起,可以看下caffe中lenet的配置文件(點我),可以試着理解每一層的大小,和各種參數。由兩個卷積層,兩個池化層,以及兩個全連接層組成。 卷積都是5*5的模板,stride=1,池化都是MAX。下圖是一個類似的結構,可以幫助理解層次結構(和caffe不完全一致,不過基本上差不多)

這里寫圖片描述

Alexnet

2012年,Imagenet比賽冠軍的model——Alexnet [2](以第一作者alex命名)。caffe的model文件在這里。說實話,這個model的意義比后面那些model都大很多,首先它證明了CNN在復雜模型下的有效性,然后GPU實現使得訓練在可接受的時間范圍內得到結果,確實讓CNN和GPU都大火了一把,順便推動了有監督DL的發展。

模型結構見下圖,別看只有寥寥八層(不算input層),但是它有60M以上的參數總量,事實上在參數量上比后面的網絡都大。

這里寫圖片描述

這個圖有點點特殊的地方是卷積部分都是畫成上下兩塊,意思是說吧這一層計算出來的feature map分開,但是前一層用到的數據要看連接的虛線,如圖中input層之后的第一層第二層之間的虛線是分開的,是說二層上面的128map是由一層上面的48map計算的,下面同理;而第三層前面的虛線是完全交叉的,就是說每一個192map都是由前面的128+128=256map同時計算得到的。

Alexnet有一個特殊的計算層,LRN層,做的事是對當前層的輸出結果做平滑處理。下面是我畫的示意圖:

這里寫圖片描述

前后幾層(對應位置的點)對中間這一層做一下平滑約束,計算方法是:

這里寫圖片描述

具體打開Alexnet的每一階段(含一次卷積主要計算)來看[2][3]:

(1)con - relu - pooling - LRN

這里寫圖片描述

具體計算都在圖里面寫了,要注意的是input層是227*227,而不是paper里面的224*224,這里可以算一下,主要是227可以整除后面的conv1計算,224不整除。如果一定要用224可以通過自動補邊實現,不過在input就補邊感覺沒有意義,補得也是0。

(2)conv - relu - pool - LRN

這里寫圖片描述

和上面基本一樣,唯獨需要注意的是group=2,這個屬性強行把前面結果的feature map分開,卷積部分分成兩部分做。

(3)conv - relu

這里寫圖片描述

(4)conv-relu

這里寫圖片描述

(5)conv - relu - pool

這里寫圖片描述

(6)fc - relu - dropout

這里寫圖片描述

這里有一層特殊的dropout層,在alexnet中是說在訓練的以1/2概率使得隱藏層的某些neuron的輸出為0,這樣就丟到了一半節點的輸出,BP的時候也不更新這些節點。
(7)
fc - relu - dropout
這里寫圖片描述
(8)fc - softmax
這里寫圖片描述

以上圖借用[3],感謝。

GoogleNet

googlenet[4][5],14年比賽冠軍的model,這個model證明了一件事:用更多的卷積,更深的層次可以得到更好的結構。(當然,它並沒有證明淺的層次不能達到這樣的效果)

這里寫圖片描述

這個model基本上構成部件和alexnet差不多,不過中間有好幾個inception的結構:

這里寫圖片描述

是說一分四,然后做一些不同大小的卷積,之后再堆疊feature map。

計算量如下圖,可以看到參數總量並不大,但是計算次數是非常大的。
這里寫圖片描述

VGG

VGG有很多個版本,也算是比較穩定和經典的model。它的特點也是連續conv多,計算量巨大(比前面幾個都大很多)。具體的model結構可以參考[6],這里給一個簡圖。基本上組成構建就是前面alexnet用到的。
這里寫圖片描述

下面是幾個model的具體結構,可以查閱,很容易看懂。

這里寫圖片描述

Deep Residual Learning

這個model是2015年底最新給出的,也是15年的imagenet比賽冠軍。可以說是進一步將conv進行到底,其特殊之處在於設計了“bottleneck”形式的block(有跨越幾層的直連)。最深的model采用的152層!!下面是一個34層的例子,更深的model見表格。
這里寫圖片描述
其實這個model構成上更加簡單,連LRN這樣的layer都沒有了。

這里寫圖片描述

block的構成見下圖:

這里寫圖片描述

總結

OK,到這里把常見的最新的幾個model都介紹完了,可以看到,目前cnn model的設計思路基本上朝着深度的網絡以及更多的卷積計算方向發展。雖然有點暴力,但是效果上確實是提升了。當然,我認為以后會出現更優秀的model,方向應該不是更深,而是簡化。是時候動一動卷積計算的形式了。

參考資料

[1] http://blog.csdn.net/zouxy09/article/details/8781543/
[2] ImageNet Classification with Deep Convolutional Neural Networks
[3] http://blog.csdn.net/sunbaigui/article/details/39938097
[4] http://blog.csdn.net/csyhhb/article/details/45967291
[5] Going deeper with convolutions
[6] VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION

        <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/markdown_views-ea0013b516.css">
            </div>

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com