1. 程式人生 > >精細模型設計

精細模型設計

十歲的小男孩

目錄

  引言

  論文

    A. MobileNets

    B. ShuffleNet

    C. Xception

    D. Squeezenet

    E. ResNeXt

引言

  在保證模型效能的前提下儘可能的降低模型的複雜度以及運算量。除此之外,還有很多工作將注意力放在更小、更高效、更精細的網路模組設計上,使用特定結構,如 ShuffleNet, MobileNet, Xception, SqueezeNet,它們基本都是由很小的卷積(1*1和3*3)組成,不僅引數運算量小,同時還具備了很好的效能效果。

A. MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

  論文地址  GitHub原始碼  MobilenetV1  MobilenetV2  論文解讀

  這篇論文是Google針對手機等嵌入式裝置提出的一種輕量級的深層神經網路,取名為MobileNets。核心思想就是卷積核的巧妙分解,可以有效減少網路引數。所謂的卷積核分解,實際上就是將a × a × c分解成一個a × a × 1的卷積和一個1 ×1 × c的卷積,,其中a是卷積核大小,c是卷積核的通道數。其中第一個a × a × 1的卷積稱為Depthwise Separable Convolutions,它對前一層輸出的feature map的每一個channel單獨進行a × a 的卷積來提取空間特徵,然後再使用1 ×1 的卷積將多個通道的資訊線性組合起來,稱為Pointwise Convolutions,如下圖: 

這裡寫圖片描述 

  這樣可以很大程度的壓縮計算量:

這裡寫圖片描述 

  其中DK為原始卷積核的大小,DF為輸入feature map的尺寸, 這樣相當於將運算量降低DK^2倍左右。 
  MobileNet中Depthwise實際上是通過卷積中的group來實現的,其實在後面也會發現,這些精細模型的設計都是和group有關。

B. ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices

  論文地址  GitHub原始碼  論文解讀

作者提出,雖然MobileNet、ResNeXt等網路能夠大大的降低模型的複雜度,並且也能保持不錯的效能,但是1 ×1卷積的計算消耗還是比較大的,比如在ResNeXt中,一個模組中1 ×1卷積就佔據了93%的運算量,而在MobileNet中更是佔到了94.86%,因此作者希望在這個上面進一步降低計算量:即在1 ×1的卷積上也採用group的操作,但是本來1 ×1本來是為了整合所有通道的資訊,如果使用group的操作就無法達到這個效果,因此作者就想出了一種channel shuffle的方法,如下圖:

這裡寫圖片描述

如上圖b和c,雖然對1 ×1的卷積使用了group的操作,但是在中間的feature map增加了一個channel shuffle的操作,這樣每個group都可以接受到上一層不同group的feature,這樣就可以很好的解決之前提到的問題,同時還降低了模型的計算量,ShuffleNet的模組如下:
這裡寫圖片描述 

作者使用了不同的group數進行實驗,發現越小的模型,group數量越多效能越好。這是因為在模型大小一樣的情況下,group數量越多,feature map的channel數越多,對於小的模型,channel數量對於效能提升更加重要。
最後作者將shufflenet的方法和mobilenet的方法進行了比較,效能似乎更勝一籌:
這裡寫圖片描述

C. Xception: Deep Learning with Depthwise Separable Convolutions

  論文地址  GitHub原始碼  論文解讀

D.  Squeezenet: Alexnet-level Accuracy with 50x Fewer Parameters and <0.5MB Model Size 

  論文地址  GitHub原始碼  論文解讀

 

E. ResNeXt:Aggregated Residual Transformations for Deep Neural Networks

  論文地址  GitHub原始碼  論文解讀

  作者提出,在傳統的ResNet的基礎上,以往的方法只往兩個方向進行研究,一個深度,一個寬度,但是深度加深,模型訓練難度更大,寬度加寬,模型複雜度更高,計算量更大,都在不同的程度上增加了資源的損耗,因此作者從一個新的維度:Cardinality(本文中應該為path的數量)來對模型進行考量,作者在ResNet的基礎上提出了一種新的結構,ResNeXt:
這裡寫圖片描述 

  上圖中兩種結構計算量相近,但是右邊結構的效能更勝一籌(Cardinality更大)。 

這裡寫圖片描述

  以上三種結構等價,因此可以通過group的形式來實現ResNeXt。其實ResNeXt和mobilenet等結構性質很相近,都是通過group的操作,在維度相同時降低複雜度,或者在複雜度相同時增加維度,然後再通過1*1的卷積將所有通道的資訊再融合起來。因此全文看下來,作者的核心創新點就在於提出了 aggregrated transformations,用一種平行堆疊相同拓撲結構的blocks代替原來 ResNet 的三層卷積的block,在不明顯增加引數量級的情況下提升了模型的準確率,同時由於拓撲結構相同,超引數也減少了,便於模型移植。

知識應該是開源的,歡迎斧正。[email protected]