流行卷積神經分類網絡的總結剖析

已經好幾天沒有分享了,今天就跟隨我的步伐,一起來簡單迴歸一下當前比較流行的基礎分類網絡吧,let's go。

1、AlexNet

這個模型是深度網絡第一次在ImageNet比賽中達到的精度遠遠甩開傳統的方法達到的精度,它是用5層卷積神經網絡+3層全連接網絡組成的。

流行卷積神經分類網絡的總結剖析

改進點:

  • AlexNet首次採用了ReLU激活函數
  • 對於全連接層採用了Dropout技術、Local ResponseNormalization(局部響應歸一化,簡稱LRN,實際就是利用臨近的數據做歸一化,使得響應較大的值相對更大,提高模型泛化能力)
  • Overlapping Pooling(即重疊池化,Pooling的步長相對於Pooling Kernel的對應邊要小)
  • 採用了數據增強操作
  • 分組卷積,多GPU並行

2、VGG16

改進點:

  • 去掉LRN層,作者發現深度網絡中AlexNet提出的LRN作用並不明顯
  • 採取更小的卷積核3*3,利用更小卷積核的堆疊代替AlexNet中的大的卷積核(參數量更小)。
  • 採用了有規則的卷積-池化操作
  • 採取了更深的網絡(16/19層)
  • VGG存在問題:卷積層寬度大使得參數量巨大、效率低(說明SSD的基礎特徵提取網絡需要另行設計符合SAR圖像特性的)

3、GoogleNet/Inception

改進點:

  • 發明了Inception模塊,使用標準密集連接結構進行稀疏CNN計算(在深度網絡中,大部分的激活值都是非必須的,比如激活值為零或是冗餘部分),inception採用大小不同的卷積(5*5、3*3、1*1)在不同的尺度上捕捉細節信息。
  • 大規模採用1*1卷積構建瓶頸層:隨著網絡的加深、加寬,計算量變的更大,為了避免這個問題,提出在使用卷積之前使用1*1的卷積操作輸入,用於降維。
  • 將全連接層全部替換為簡單的全局平均pooling,在最後參數會變的更少。而在AlexNet中最後3層的全連接層參數差不多佔總參數的90%。

注:Inception V2/V3相對於inception V1的改進:

Inception V2:

  1. 1. 用兩個3x3代替5x5
  2. 2. 28x28的Inception塊從2個變成了3個
  3. 3. pooling時有些是avg pooling有些是max pooling
  4. 4. 在Inception塊之間不再有額外的max-pool而是直接把卷積和池化的stride設置為2
  5. 5. BN層被用在每一個輸入層後面(先BN再激活)

Inception V3:

  1. 1. 修改部分Inception塊,分解成非對稱卷積(把nxn分解成1xn和nx1卷積,這裡n=7。注意原始結構並沒有7x7卷積)
  2. 2. 修改部分Inception塊,擴大卷積核數量(匯聚的分支數量)

4、ResNet/Dense Net

此前深度網絡的問題:

  1. 1. 隨著網絡深度的增加,帶來網絡精度的增加,但權值更新的信號從網絡後面層傳到前面層會越來越弱,甚至消失,這也就意味著前面的層被忽略掉了(不發生權值更新),這也稱作是梯度消失。
  2. 2. 網絡優化變的越來越難執行,所以簡單的增加層會導致訓練誤差增加(退化問題),殘差網絡通過構建殘差塊允許訓練更深的網絡結構。

改進點:

提出了殘差學習模塊,讓深度網絡也能訓練收斂

DenseNet:用通道維度上concatenate代替直接與原信號相加的ResNet。

其與 ResNet 的主要區別在於,DenseNet 裡模塊B的輸出不是像 ResNet 那樣和模塊A的輸出相加,而是在通道維度上concatenate。這樣模塊A的輸出可以直接傳入模塊B後面的層。在這個設計裡,模塊A直接跟模塊B後面的所有層連接在了一起。這也是它被稱為“稠密連接”的原因。

流行卷積神經分類網絡的總結剖析

5、MobileNets:適用於移動設備,大大減少了網絡層的參數數量,效率極高

改進點:傳統卷積層的改進,如下圖所示

流行卷積神經分類網絡的總結剖析


我們首先對每一個通道進行各自的卷積操作,有多少個通道就有多少個過濾器。得到新的通道feature maps之後,這時再對這批新的通道feature maps進行標準的1×1跨通道卷積操作。這種操作被稱為 “

DepthWiseconvolution” ,縮寫“DW”。

比如輸入圖片維度是11 × 11 × 3,標準卷積為3 × 3 × 3 ×16(假設stride為2,padding為1),那麼可以得到輸出為6 × 6 × 16的輸出結果。現在輸入圖片不變,如果先通過一個維度是3 × 3 × 1 × 3的深度卷積(輸入是3通道,這裡有3個卷積核,對應著進行計算),得到6 × 6 × 3的中間輸出,然後再通過一個維度是1 × 1 × 3 ×16的1 ×1卷積,同樣得到輸出為6 × 6 × 16。

基於深度可分解的卷積,它可以將標準卷積分解成一個深度卷積和一個點卷積(1 × 1卷積核),這種分解可以有效減少計算量,降低模型大小。

6、ShuffleNets:Group convolutional + Channel Shuffle

這篇文章是在MobileNet的基礎上主要做了一點改進:採用channel shuffle、pointwise group convolutions和depthwise separable convolution來修改原來的ResNet單元。

  • Group convolution:一般卷積操作中比如輸入feature map的數量是N,該卷積層的filter數量是M,那麼M個filter中的每一個filter都要和N個feature map的某個區域做卷積,然後相加作為一個卷積的結果。對於group操作,設group個數為g,那麼N個輸入feature map就被分成g個group,M個filter就被分成g個group,然後在做卷積操作的時候,第一個group的M/g個filter中的每一個都和第一個group的N/g個輸入featuremap做卷積得到結果,第二個group同理,直到最後一個group。最早的group操作起源於AlexNet(當時主要是問了解決模型在雙GPU上的訓練)。

問題:多個group操作疊加在一起,會產生邊界效應,就是某個輸出channel僅僅來自輸入channel的小部分,這也學出來的特徵比較侷限。針對這個問題提出了channel shuffle。

  • channel shuffle:在進行第二次groupconvolution前,對其輸入的特徵圖進行一個分配,即將每個group的特徵圖分成幾個subgroup並隨機打亂。
流行卷積神經分類網絡的總結剖析

ShuffleNet的網絡模塊結構:

下圖(a)是ResNet中的bottleneck unit,將原來的3*3 Conv改成3*3 DWConv。圖(b)Shuffle Net主要也是在這基礎上做改動:首先用帶group的1*1卷積代替原來的1*1卷積,同時跟一個channel shuffle操作,然後是3*3 DWConv。圖(c)添加了一個Average pooling和設置了stride=2,另外原來Resnet最後是一個Add操作,也就是元素值相加,而在(c)中是採用concat的操作,也就是按channel合併,類似GoogLeNet的Inception操作。

流行卷積神經分類網絡的總結剖析


分享到:


相關文章: