神經網絡模型(Backbone)

一共兩篇:


神經網絡模型(Backbone)

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

    Deeper:網絡層數更深,代表網絡VggNet

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

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

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

 

 

   其發展歷史可以分爲三個階段:

   這些模型在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


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