Inception v1
- Going Deeper with Convolutions
- https://github.com/google/inception
對應的GoogLeNet架構如下:
Inception v2, v3
- Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
- Rethinking the Inception Architecture for Computer Vision
Inception v2整體架構:
- 将 7 x 7替換為了3 個 3 x 3的卷積
- 引入如figure 6, figure 7的中子產品
Inception v3是在inception v2的基礎上添加BN-auxiliary.
Inception v4
- Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning
ResNeXt
- Aggregated Residual Transformations for Deep Neural Networks
- [https://github.com/facebookresearch/ResNeXt] (https://github.com/facebookresearch/ResNeXt)
論文中提出了一種簡潔的、高度子產品化的用于圖像分類的網絡體系結構. 網絡是通過重複構模組化塊來建構的, 該子產品具有一組相同的拓撲轉化組合而成. 網絡引入了一個新的次元"cardinality"(一組轉換的個數)), 它是模型中的一個重要參數.
論文中提出的網絡稱作ResNeXt, 表示 “the next dimension”, 它的提出參考了VGG/ResNet網絡"repeating layers"的政策,同時利用"split-transform-merge"政策.
它的block如下圖所示:
分别采用三種不同的形式表示ResNeXt的block, 其中在實作時使用了group convolution(隻有圖)
ResNeXt 模闆如下圖所示:
ResNeXt具有如下優點:
- 在同等複雜度時,它提高了分類的accuracy(ImageNet)
- block中相同的拓撲結構,超參數減少了
Xception
- Xception: Deep Learning with Depthwise Separable Convolutions
Inception子產品可以看成是正常卷積核Depthwise separable 卷積(depthwise 卷積 緊接着 pointwise卷積)的中間步驟.
論文的主要思想是cross-channels關聯和spatial關聯完全分割開, depthwise separable 卷積可以了解成具有最大數量towers的Inceptin子產品, 如下圖所示.
Depthwise separable卷積和Inceptionmok的極限模式有兩個不同:
- Depthwise separable卷積先進行depthwise卷積再執行1x1卷積
- Depthwise separable卷積的中間層不接non-linearity部分
Xception表示"Extreme Inception", 它包括36個卷積層, 并且具有殘差連接配接結構, 如下圖所示.
SENet
- Squeeze-and-Excitation Networks
- https://github.com/hujie-frank/SENet
卷積神經網絡建立在卷積運算的基礎上,該運算通過在局部感受野将空間和通道資訊融合來提取資訊特征. 論文工作中,專注于channel的關系, 提出了一種新的體系結構單元,我們稱之為"Squeezeand-Exciation" SE block, 該單元通過顯式的模組化通道之間的互相依賴性來自适應地重新校準逐通道的特征響應. 至關重要的是,我們發現SE block以最小的額外計算代價為現有的最新深度架構帶來了顯著的性能提升.
SE block如下圖所示: 可以看出主要包括3部分:
- Squeeze: 在 H * W次元進行global average pooling, 得到逐通道的統計
- Exciation: Sigmoid(FC2(ReLU(FC1(X)))), 利用FC1先降維,在利用FC2再升維
- Scale: 輸入特征圖與SE後的結果進行逐通道相乘
SE block 從本質上引入了以輸入為條件的動态, 進而有助于功能的可分辨性
在Inception和ResNet中分别加入SE block,如下圖所示:
實驗結果證明, SE block在速度和模型容量上隻對原始模型産生了很小的影響, 但性能得到了很大的提高.
MobileNet v1
- MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
論文中提出了一類稱為MobileNets的高效模型用于移動和嵌入式視覺應用. MobileNets基于流線(streamlined)結構, 使用depthwise separable卷積來建構輕量級深度神經網絡. 論文中介紹了兩個簡單的全局超參數, 可以有效地在延遲和準确性之間進行權衡. 這些超參數運作模型建構器根據問題的限制為其應用選擇合适大小的模型.
MobileNets主要專注于優化延遲,但也會産生小型網絡.
MobileNets主要使用了depthwise separable卷積, 它與傳統卷積可以減少運算次數,減小模型規模.
假設某一層輸出的特征圖尺寸是 D F ∗ D F ∗ M D_F * D_F * M DF∗DF∗M, 輸出的通道數是 N N N, 卷積核大小是 D K ∗ D K D_K * D_K DK∗DK,
傳統卷積的運算次數為:
D F ∗ D F ∗ N ∗ D K ∗ D K ∗ M D_F * D_F * N * D_K * D_K * M DF∗DF∗N∗DK∗DK∗M
depthwise separable卷積的運算次數為:
D F ∗ D F ∗ M ∗ D K ∗ D K + D F ∗ D F ∗ N ∗ M D_F * D_F * M * D_K * D_K + D_F * D_F * N * M DF∗DF∗M∗DK∗DK+DF∗DF∗N∗M
則
D F ∗ D F ∗ M ∗ D K ∗ D K + D F ∗ D F ∗ N ∗ M D F ∗ D F ∗ N ∗ D K ∗ D K ∗ M = 1 N + 1 D K 2 \frac{D_F * D_F * M * D_K * D_K + D_F * D_F * N * M}{D_F * D_F * N * D_K * D_K * M} = \frac{1}{N} + \frac{1}{D_K^2} DF∗DF∗N∗DK∗DK∗MDF∗DF∗M∗DK∗DK+DF∗DF∗N∗M=N1+DK21
而兩者的參數:
D K ∗ D K ∗ M + M ∗ N D K ∗ D K ∗ M ∗ N = 1 N + 1 D K 2 \frac{D_K * D_K * M + M * N}{D_K * D_K * M * N} = \frac{1}{N} + \frac{1}{D_K^2} DK∗DK∗M∗NDK∗DK∗M+M∗N=N1+DK21
是以, 模型的運算次數和模型的參數均減少了不少.
MobileNet共有28層,結構如下表所示.
雖然base MobileNet架構已經很小且延遲很低,但是特定用例或應用程式很多時候可能要求模型更小更快.為了建構這些更小且計算量更小的模型,論文中引入了兩個超參數, width multiplier α \alpha α 和 resolution multiplier ρ \rho ρ, 分别改變通道的個數和輸入圖像的分辨率. 他們對模型計算量的影響分别為:
D F ∗ D F ∗ α M ∗ D K ∗ D K + D F ∗ D F ∗ α N ∗ α M D_F * D_F * \alpha M * D_K * D_K + D_F * D_F * \alpha N * \alpha M DF∗DF∗αM∗DK∗DK+DF∗DF∗αN∗αM
和
ρ D F ∗ ρ D F ∗ α M ∗ D K ∗ D K + ρ D F ∗ ρ D F ∗ α N ∗ α M \rho D_F * \rho D_F * \alpha M * D_K * D_K + \rho D_F * \rho D_F * \alpha N * \alpha M ρDF∗ρDF∗αM∗DK∗DK+ρDF∗ρDF∗αN∗αM
α \alpha α的常用取值為{1, 0.75, 0.5, 0.25}, 而輸入圖像的分辨率可以設定為{224, 192, 160, 128}.
不同配置卷積的計算次數和模型參數對比如下:
MobileNet v2
- MobileNetV2: Inverted Residuals and Linear Bottlenecks
論文中描述一種新的移動架構MobileNetV2,它可以改善移動模型在多個任務和基準以及不同模型尺寸範圍内的最先進性能.它的創新點主要包括兩個:
- inverted residual,
- linear bottlenecks
論文好難懂,這裡先擺出MobelNetV2的網絡架構吧:
其中bottlenect如下圖所示:
具體地通過如下方式進行轉換:
論文中還用實驗進行了證明bottleneck中non-linearity和不同shortcut連接配接方式的對比
下表是與其他模型在ImageNet上的分類結果的對比:
論文中使用實驗證明了mobiletv2在目标檢測和語義分割方面的有效性.
MobileNet v3
- Searching for MobileNetV3
ShuffleNet v1
- ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices
論文中引入一種稱作ShuffleNet的計算效率極其高的CNN架構,該架構專門為具有非常有限計算能力(10-150 MFLOPs)的移動裝置而設計. ShuffleNet利用兩個新的操作, pointwise group 卷積和channel shuffle, 在保持準确性的同時大大降低了計算成本.
作者注意到如Xception, ResNeXt等最先進的基本在極小的網絡中不太有效,因為代價高昂的1 x 1卷積. 作者提出pointwise group convolution來減少1 x 1卷積的計算複雜度. 為了克服group卷積帶來的副作用, 我們提出了一種新穎的channel shuffle操作來幫助資訊在特征通道間流動.
Group convolution的概念,最初是在AlexNet中引入的,用于在兩個GPU上分布模型,已經在ResNeXt中很好的證明了它的有效性. 在Xception中提出的depthwise separable卷積由inception v3, v4中的separable卷積泛化得到. 最近MobileNet利用depthwise separable convolutions并在輕量級模型中獲得了最先進的成果. ShuffleNet以一種新穎的方式概況(generalize)了group convolution和depthwise separable convolution.
-
Channel Shuffle for Group Convolutions
在微小的網絡中,昂貴的pointwise卷積導緻了有限的通道數量來滿足複雜度限制,這可能會嚴重損害精确性. 一種直覺的解決方案是在1 x 1的卷積層采用channel sparse連接配接,比如group convolution. 采用channel shuffle來解決group convolution的副作用, 操作如下: 假定一個卷積層有g個groups,它的輸出有g * n個通道;我是首先把輸出通道維數reshape成(g, n), 轉置然後将其展平, 作為下一層的輸入, 如下圖所示.
Channel shuffle使建構更強有力的具有多個group convolutional層的稱為可能. - ShuffleNet Unit
它是一種帶有bottlenect的殘差結構, 1 * 1的卷積被 1 * 1 的group convolution代替, bottlenect由 depthwise convolution代替.
假設輸入的size是 h * w * c, bottlenect的channels個數是m, 那麼ResNet需要 h * w * (2 * c * m + 9 m^2), ShuffleNet需要 h * w * m * c / g + h * w * m * 9 + h * w * c * m / g = h * w * (2 * m * c / g + 9 * m), g是groups的個數
- Network Architecture
ShuffleNet v2
- ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design
目前,神經網絡架構設計主要由間接名額計算複雜度(FLOPs)來指導. 然而直接度量(速度)還依賴于其它因素,比如memory access cost(MAC)和平台特效等. 是以,本論文工作提出在目标平台式評估直接名額,而不僅僅考慮FLOPs. 基于一系列對照試驗,本論文工作為有效設計網絡得到了幾個實用指南. 是以,提出一個稱為ShuffleNet v2的新架構.
論文中提到有效網絡設計的四條指南
- 輸入通道數和輸出通道數相同最小化MAC(Equal channel width minimizes memory access cost(MAC))
- 過多的group卷積增加MAC(Excessive group convolution increases MAC)
- 網絡碎片降低了并行度(Network fragmentation reduces degree of parallelism)
- 逐元素操作時不可忽視的(Element-wise operations are non-negligible),主要包括ReLU, AddTensor, AddBias, depthwise 卷積, 它們具有小的FLOPs,但是相對較大的MAC.
ShuffleNetv2的unit結構下圖©, (d)所示.
- 在每一個unit開始,輸入的c個特征通道被split成2個分支,分别具有 c - c’ 和 c’個通道.
- Following 第3條規則, 一個分支保持identity, 另一個分支包括三個卷積,具有相同的輸入和輸出通道數量, 滿足第1條規則.
- 兩個1 x 1的卷積不再是group-wise
- 卷積之後, 兩個分支被concate, 是以通道數不變(following 第1條)
- 對于下采樣的情況, 如下圖(d)所示, channel split被移除了, 是以輸出的通道數翻倍.
- 一般情況下, 設定 c’ = c / 2
ShuffleNetv2架構如下表所示:
ShuffleNetv2不僅高效,同時是精确的,主要包括兩個原因. 第一個原因是,每一個building block的高效性使得可以有更多的特征通道和更大的網絡容量. 第二個原因, 一半的特征通道直接穿過該block與下一個block相連,這可以看做是一種特征複用.