神經網絡模型(Backbone)

  本身搭建神經網絡時,通常都採用已有的網絡模型,在其基礎上進行修改。從2012年的AlexNet出現,現在已經出現許多優秀的網絡模型,以下圖所示。 主要有三個發展方向:html

    Deeper:網絡層數更深,表明網絡VggNet算法

    Module: 採用模塊化的網絡結構(Inception),表明網絡GoogleNet網絡

    Faster: 輕量級網絡模型,適合於移動端設備,表明網絡MobileNet和ShuffleNet架構

    Functional: 功能型網絡,針對特定使用場景而發展出來。如檢測模型YOLO,Faster RCNN;分割模型FCN, UNetide

 

 

   其發展歷史能夠分爲三個階段:模塊化

   這些模型在ImageNet上的表現效果對好比下:函數

  

1. LeNet-5性能

  LeNet-5是LeCun在1998年的論文中Gradient-Based Learning Applied to Document Recognition 提出的網絡模型,其結構以下:(其中卷積爲5*5的kernel,下采樣爲2*2的MaxPooling),其結構比較簡單,關於LeNet-5結構設計的詳細分析,參見:參考一參考二學習

 

 2. AlexNet優化

  AlexNet是Alex Krizhevsky在2012的文章ImageNet Classification with Deep Convolutional Neural Networks中提出,其結構模型以下:(分上下兩部分卷積,計算力不足,放在兩塊GPU上)

 

   AlexNet的特點:參考1參考2

    (1) Training on Multiple Gpus:  受於當時的算力限制,Alexnet創新地將圖像分爲上下兩塊分別訓練,而後在全鏈接層合併在一塊兒

    (2) ReLU Nonlinearity: 採用ReLU激活函數代替Sigmoid或tanh, 解決了梯度飽和的問題

    (3)Local Response Normalization: 局部響應歸一化,

    (4) Data Augmentation: 擴增數據,減少過擬合:第一種是 摳圖(從256x256摳出224x224)加上水平反轉。第二種是 改變RGB顏色通道強度。

    (5) Dropout: 以必定機率捨棄神經元輸出,減少過擬合。

3.ZFNet

   ZFNet是2013年的論文Visualizing and Understanding Convolutional Networks中提出,是2013年ILSVRC的冠軍。這篇文章使用反捲積(Deconvnet),可視化特徵圖(feature map),經過可視化Alex-net指出了Alex-net的一些不足,最後修改網絡結構,使得分類結果提高;是CNN領域可視化理解的開山之做,做者經過可視化解釋了爲何CNN有很是好的性能、如何提升CNN性能,而後進行調整網絡,提升了精度(參考文章

   ZFNet經過修改結構中的超參數來實現對AlexNet的改良,具體說來就是增長了中間卷積層的尺寸,讓第一層的步長和濾波器尺寸更小。其網絡結構的兩種表示圖以下:

     相比於AlexNet其改進以下:(ImageNet top5 error:16.4%提高到11.7%)

      (1) Conv1: 第一個卷積層由(11*11, stride=4)變爲(7*7,stride=2)

      (2) Conv3, 4, 5: 第三,四,五個卷積核的通道數由384,384,256變爲512,1024,512

 3. VGGNet

  VGGNet是2014年論文Very Deep Convolutional Networks for Large-scale Image Recognition 中提出,2014年的ImageNet比賽中,分別在定位和分類跟蹤任務中取得第一名和第二名,其主要的貢獻是展現出網絡的深度(depth)是算法優良性能的關鍵部分,其結構以下:

 

 

   VGGNet的特點:(參考1參考2)

    (1) 結構簡潔:5層卷積層、3層全鏈接層、softmax輸出層構成,層與層之間使用max-pooling(最大化池)分開,全部隱層激活單元都採用ReLU函數。

     (2)小卷積核和多卷積核:VGG使用多個較小卷積核(3x3)的卷積層代替一個卷積核較大的卷積層,一方面能夠減小參數,另外一方面至關於進行了更多的非線性映射,能夠增長網絡的擬合/表達能力。

     VGG的做者認爲兩個3x3的卷積堆疊得到的感覺野大小,至關一個5x5的卷積;而3個3x3卷積的堆疊獲取到的感覺野至關於一個7x7的卷積。這樣能夠增長非線性映射,也能很好地減小參數(例如7x7的參數爲49個,而3個3x3的參數爲27),以下圖所示:

 

   VGGNet提出的結論:

    (1) LRN層無性能增益(A-LRN):AlexNet曾經用到的LRN層(local response normalization,局部響應歸一化)並無帶來性能的提高
    (2) 隨着深度增長,分類性能逐漸提升(從11層到19層)
    (3) 多個小卷積核比單個大卷積核性能好

4. GoogLeNet

  4.1 GoogLeNet V1

    GoogLetNet V1是在2014年論文Going deeper with convolutions中提出的,ILSVRC 2014的勝利者。相比於VGG,其並非單純的將網絡加深,還引入了Inception模塊的概念,最終性能和VGG差很少,但參數量更少。

    Inception提出緣由:傳統網絡爲了減小參數量,減少過擬合,將全鏈接和通常卷積轉化爲隨機稀疏鏈接,可是計算機硬件對非均勻稀疏數據的計算效率差,爲了既保持網絡結構的稀疏性,又能利用密集矩陣的高計算你性能,Inception網絡結構的主要思想是尋找用密集成分來近似最優局部稀疏鏈接,經過構造一種「基礎神經元」結構,來搭建一個稀疏性、高計算性能的網絡結構

    Inception的結構以下圖所示:

 

 

     Inception架構特色:

      (1)加深的基礎上進行加寬,稀疏的網絡結構,但能產生稠密的數據,既能增長神經網絡表現,又能保證計算資源的使用效率

      (2) 採用不一樣大小的卷積核意味着不一樣的感覺野,最後在channel上拼接,意味着不一樣尺度的特徵融合

      (3)採用1*1卷積,一是減小維度來減小計算量和參數,二是修正線性激活,增長非線性擬合能力(每一個1*1後都有ReLU激活函數)

    以Inception爲基礎模塊,GoogLeNet V1的總體網絡架構以下(共22層):

 

 

 

     GoogLeNet V1網絡特點:參考1參考2

      (1) 採用Inception模塊化結構,方便添加修改

      (2) 採用Average Pool 來代替全鏈接層(借鑑Network in Network),實際在最後一層仍是添加了一個全鏈接層,方便作finetune。

      (3) 另外增長了兩個輔助的softmax分支(incetion 4b和4e後面),做用有兩點,一是爲了不梯度消失,用於向前傳導梯度。反向傳播時若是有一層求       導爲0,鏈式求導結果則爲0。二是將中間某一層輸出用做分類,起到模型融合做用。最後的loss=loss_2 + 0.3 * loss_1 + 0.3 * loss_0。實際測        試時,這兩個輔助softmax分支會被去掉。

  4.2 GoogLeNet V2, V3

     GoogLeNet V2, V3是在2015年論文 Rethinking the Inception Architecture for Computer Vision  中提出,主要是對V1的改進。

     GoogLeNet v2的Inception結構和總體的架構以下:

 

      GoogLeNet V2網絡特色:

        (1) 借鑑VGG,用兩個3*3卷積代替一個5*5卷積,下降參數量,提升計算速度(如上圖Figure5中Inception)

        (2)它們將濾波器大小nxn的卷積分解爲1xn和nx1卷積的組合(7x7卷積至關於首先執行1x7卷積,而後在其輸出上執行7x1卷積,如上圖Figure6中Inception),但在網絡的前期使用這種分解效果並很差,在中度大小的特徵圖(feature map)上使用效果纔會更好(特徵圖大小建議在12到20之間)

        (3) 爲了同時保持特徵表示並下降計算量,將池化和卷積並行執行再合併,以下圖所示:

     GoogLeNet V3: V3包含了爲V2規定的全部上述改進,另外還使用瞭如下內容:

      (1)採用RMSProp優化器

         (2) 學習Factorization into small convolutions的思想,將7x7分解成兩個一維的卷積(1x7,7x1),3x3也是同樣(1x3,3x1),這樣的好處,既能夠加        速計算(多餘的計算能力能夠用來加深網絡),又能夠將1個conv拆成2個conv,使得網絡深度進一步增長,增長了網絡的非線性,還有值得注           意的地方是網絡輸入從224x224變爲了299x299,更加精細設計了35x35/17x17/8x8的模塊。

      (3) 在輔助分類器中的使用BatchNorm。

      (4) 採用標籤平滑(添加到損失公式中的一種正規化組件,可防止網絡對類過於自信。防止過分擬合)

  4.3 GoogLeNet V4

    GoogLeNet V4(Inception V4)是在2016年的論文 Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning 中提出,主要是利用殘差網絡(ResNet)來改進V3,獲得Inception-ResNet-v1,Inception-ResNet-v2,Inception-v4網絡。

5. ResNet

   ResNet是何凱明在2015年的論文Deep Residual Learning for Image Recognition 中提出,ResNet網絡提出了殘差網絡結構,解決了之前深層網絡難訓練的問題,將網絡深度有GoogLeNet的22層提升到了152層。殘差網絡(bottleneck)的結構以下:(參考1

 

   相比傳統網絡:y=f(x),ResNet Block公式爲:y=f(x) + x,能夠稱之爲skip connect。有兩個點須要思考下:一是其導數總比原導數加1,這樣即便原導數很小時,也能傳遞下去,能解決梯度消失的問題; 二是y=f(x) + x式子中引入了恆等映射(當f(x)=0時,y=2),解決了深度增長時神經網絡的退化問題。

  ResNet由多個Residual Block疊加成的,其結構以下:

 

     其中Resnet-18/34採用的residual block和Resnet-50/101/152不太同樣,分別以下所示:

   除了殘差結構,ResNet還有兩個細節須要關注下

    (1)第一個卷積層採用了7*7的大卷積核,更大的感覺野,獲取圖片更多的初始特徵(primary feature) (圖片channel=3,第一層使用大kernel,增長的參     數量不是很大)

·    (2)短路鏈接中,輸入和輸出維度不一致時,不能直接相加(Element-wise add),採用步長爲2的卷積來減少維度尺寸?

6. DenseNet

     DenseNet網絡是在2017的論文 Densely Connected Convolutional Networks 中提出,與ResNet一致,也採用shortcut鏈接,可是其將前面全部層與後面層密集鏈接(dense connection), 另外其採用channel concatenate來實現特徵重用(代替ResNet的Element-wise addition)。其總體網絡結構以下圖所示:

     DenseNet網絡包括Dense Block和Transition layer兩個基礎模塊,Dense Block相似於ResNet中的residual block,其區別對好比下:

 

       由上圖能夠發現兩個主要區別:(參考1

         (1) DenseNet是密集鏈接,前面層和後面層間都有鏈接;ResNet只有相鄰層有鏈接

         (2) DenseNet是channel-wise concatenation; Resnet 是Element-wise addition

    DenseNet的Transition layer主要是用來下降feature map的尺寸,未來自不一樣層的feature map變化爲同等尺寸後進行concatenate,其結構以下:

      BN + ReLU+1*1 Conv + 2*2 Average Pool

  

     DenseNet的特色:

      (1) 因爲密集鏈接方式,DenseNet提高了梯度的反向傳播,使得網絡更容易訓練 (每層能夠直達最後的偏差信號)

       (2) 參數更小且計算更高效 (concatenate來實現特徵複用,計算量很小)

       (3) 因爲特徵複用,分類器使用到了低級特徵

       (4) 須要較大的顯存才能運行(全部層都需存儲?)

 參考:https://zhuanlan.zhihu.com/p/66215918

   https://zhuanlan.zhihu.com/p/22038289

 

    上述都是些大型的經典網絡,運行較慢,須要的較大的算力,而輕量級網絡則採用不一樣的設計和模型架構,來應對移動端設備上的使用,目前主要的輕量級網絡包括 SqueezzeNet, MobileNet和ShuffleNet,其發展歷史以下:

  這些網絡實現輕量級的主要方法以下:

    (1) 優化網絡結構: shuffle Net

    (2) 減小網絡的參數: Squeeze Net

    (3) 優化卷積計算: MobileNet(改變卷積的順序); Winograd(改變卷積計算方式)

    (4) 刪除全鏈接層: Squeeze Net; LightCNN

 7. SqueezeNet

   SqueezeNet是在2017年的論文 SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size 中提出, squeezeNet的模型壓縮策略主要有三個:(Idea from GoogLeNet)   (參考1

     (1) 多使用1*1的卷積,少使用3*3的卷積,減小參數量

     (2) 3*3卷積採用更少的channel數

     (3) 將降採樣後置,即推遲使用Pooling,從而增長感覺野,儘量多的得到feature

  SqueezeNet的網絡基礎單元是Fire Module,多個fire module堆疊,結合pooling組成SqueezeNet,以下圖所示:(右邊兩張加入了shortcut)

 

    Fire Module又包括兩部分:squeeze layer 和 Expand layer,以下圖所示:

 

        squeeze layer:主要是1*1的卷積,對網絡channel進行壓縮,卷積核的個數爲S1

      expand layer:1*1的卷積個數爲E1,3*3的卷積個數爲E3(上圖中E2應該爲E3),而後進行concate。

      論文中關於E1, E3,S1的關係描述以下:

 8. MobileNet

  8.1 MobileNet V1

    MobileNet V1是在2017年Google的論文 MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 中提出,其主要壓縮策略是深度可分離卷積(Depthwise separable Convolution),其包括兩步,以下圖所示:

 

         (1) 深度卷積:將卷積拆分爲單通道的形式,在不改變輸入特徵圖像的深度的狀況下,對每一通道進行卷積操做,獲得和輸入特徵圖通道數一致的輸出特徵圖。以下圖,輸入12×12×3的特徵圖,通過5×5×1×3的深度卷積以後,獲得了8×8×3的輸出特徵圖。輸入個輸出的維度是不變的3。

 

     (2)逐點卷積:即1*1的卷積,對深度卷積獲得的特徵圖進行升維,以下圖,8×8×3的特徵圖,經過1*1*3*256的卷積,輸出8*8*256的輸出特徵圖。

 

     參數量和計算量對比:

      深度可分離卷積和傳統卷積相比操做和參數更少,以下圖所示,能夠發現深度可分離卷積操做數和參數都是傳統卷積的(1/N +1/Dk2), 採用3*3卷積時大約是1/9。(但模型精度大概只下降1%)

      模型結構對比:

       深度可分離卷積單元相比傳統卷積多一個ReLU6激活函數和1*1卷積層,對好比下圖:

     MobileNet V1網絡的總體架構以下圖, 多個深度卷積的堆疊(s2表示步長爲2),: (參考1)

     MobileNet V1還能夠引入結構超參數來進一步壓縮網絡,主要是在kernel的深度和尺寸兩方面,以下圖:

   8.2 MobileNet V2

    MobileNet V2是在2018年的論文 MobileNetV2: Inverted Residuals and Linear Bottlenecks 中提出,對V1的卷積單元進行了改進,主要引入了Linear bottleneck和Inverted residuals。

    (1) Linear bottleneck : 在原始V1訓練時容易出現卷積層參數爲空的現象,這是因爲ReLU函數:對低維度作ReLU運算,很容易形成信息的丟失。而在高維度進行ReLU運算的話,信息的丟失則會不多參考);所以去掉卷積單元中最後一個ReLU函數。

      (Linear bottleneck: Eltwise + with no ReLU at the end of the bottleneck)

    (2) Inverted Residual: 深度卷積自己沒有改變channel的能力,來的是多少通道輸出就是多少通道。若是來的通道不多的話,DW深度卷積只能在低維度上工做,這樣效果並不會很好,因此咱們要「擴張」通道。既然咱們已經知道PW逐點卷積也就是1×1卷積能夠用來升維和降維,那就能夠在DW深度卷積以前使用PW卷積進行升維(升維倍數爲t,t=6),再在一個更高維的空間中進行卷積操做來提取特徵,隨後再進行降維。

      (Inverted Residual: expand - transfer - reduce)

    對比下V2和ResNet的結構,以下圖:能夠發現V2是先升,卷積,降維,和ResNet(降維,卷積,升維)相反,所以成爲Inverted residual.

 

  Linear bottleneck和Inverted Residual解釋:

     對比下V1和V2的卷積結構單元,以下圖:V2將最後一層的ReLU6換成了Linear,並引入了shortcut進行升維和將維(最右邊的stride=2減少尺寸,因此沒有shortcut)。

 

     MobileNet V2的總體結構以下圖:

     8.3 MobileNet V3

        MobileNet V3在2019年的論文Searching for MobileNetV3 中提出,還沒啃完,有空來填坑。

 9 ShuffleNet

   9.1 shuffleNet V1

      shuffleNet V1 是2017年在論文ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices 中提出的,其主要壓縮思路是group convolution 和 channel shuffle。(參考1參考2

      (1) group convolution(分組卷積): 分組卷積的思路是將輸入特徵圖按通道數分爲幾組,而後採用不一樣的卷積核再對各個組進行卷積,這樣會下降卷積的計算量。傳統的卷積是卷積核在全部通道上進行卷積,算全通道卷積,而分組卷積算通道上的稀疏卷積,以下圖所示。(mobileNet算是一種特殊的分組卷積,分組數和通道數同樣)

      (2)channel shuffle(通道混洗) : 分組卷積以一個問題是不一樣組之間的特徵圖信息不通訊,就好像分了幾個互不相干的路,你們各走各的,會下降網絡的特徵提取能力。MobileNet是採用密集的1*1pointwise convolution進行通道特徵融合,計算量較大。channel shuffle的思路是對分組卷積以後的特徵圖的排列順序進行打亂從新排列,這樣下一個分組卷積的輸入就來自不一樣的組,信息能夠在不一樣組之間流轉。channel shuffle的實現步驟以下圖所示:reshape--transpose-flatten

 

 

     shufflleNet V1網絡的基本單元以下圖所示,相比a圖中,b圖將1x1的密集卷積換成分組卷積,添加了一個channel shuffle,另外3x3的depthwise convolution以後沒有使用ReLU激活函數,圖c中則採用stride=2,同時將elment-wise add 換成了concat。

   shuffleNet V1特色,以及和ResNet和mobileNet的對好比下:

 

 

    ShuffleNet V1的總體架構以下,每一個stage都是shuffleNet基本單元的堆疊。

   9.2 shuffleNet V2

      shuffleNet V2 是2018年在論文ShuffleNet V2: Practical Guidelines for Ecient CNN Architecture Design中提出的, 論文中針對設計快速的輕量級模型提出了四條指導方針(Guidelines):

    (1)G1: 卷積層的輸入和輸出特徵通道數相等時MAC最小,此時模型速度最快

    (2)G2: 過多的 group操做會增大MAC,從而使模型速度變慢

 

 

 

 

    (3) G3: 模型中的分支數量越少,模型速度越快

 

    (4) G4:element-wise操做所帶來的時間消耗遠比在FLOPs上的體現的數值要多,所以要儘量減小element-wise操做

 

     論文中接着分析了其餘網絡模型違背了相應的原則方針,以下圖所示:

 

     針對上述四條guidelines,論文提出shuffleNet V2的基本單元,以下圖:

 

       (1) channel split而後concat,保證輸入輸出channel一致,遵循準則1?

 

       (2) 去掉1*1的分組卷積(channel split至關於分組了),遵循準則2

       (3) channel split和將channel shuffle移動到後面,遵循準則3?

       (4)利用concat代替add,遵循準則4

    最後shuffleNet V2的總體架構以下:

 

 

參考:https://baijiahao.baidu.com/s?id=1589005428414488177&wfr=spider&for=pc

相關文章
相關標籤/搜索