1. 程式人生 > >ResNeXt——與 ResNet 相比,相同的參數個數,結果更好:一個 101 層的 ResNeXt 網絡,和 200 層的 ResNet 準確度差不多,但是計算量只有後者的一半

ResNeXt——與 ResNet 相比,相同的參數個數,結果更好:一個 101 層的 ResNeXt 網絡,和 200 層的 ResNet 準確度差不多,但是計算量只有後者的一半

模式 這樣的 cap dfa 不同 dual 重復 ORC 但是

from:https://blog.csdn.net/xuanwu_yan/article/details/53455260

背景

論文地址:Aggregated Residual Transformations for Deep Neural Networks
代碼地址:GitHub
這篇文章在 arxiv 上的時間差不多是今年 cvpr 截稿日,我們就先理解為是投的 cvpr 2017 吧,作者包括熟悉的 rbg 和何凱明,轉戰 Facebook 之後代碼都放在 Facebook 的主頁裏面了,代碼也從 ResNet 時的 caffe 改成了 torch :)

貢獻

  • 網絡結構簡明,模塊化
  • 需要手動調節的超參少
  • 與 ResNet 相比,相同的參數個數,結果更好:一個 101 層的 ResNeXt 網絡,和 200 層的 ResNet 準確度差不多,但是計算量只有後者的一半

方法

技術分享圖片
提出來 cardinality 的概念,在上圖左右有相同的參數個數,其中左邊是 ResNet 的一個區塊,右邊的 ResNeXt 中每個分支一模一樣,分支的個數就是 cardinality。此處借鑒了 GoogLeNet 的 split-transform-merge,和 VGG/ResNets 的 repeat layer
所謂 split-transform-merge 是指通過在大卷積核層兩側加入 1x1 的網絡層,控制核個數,減少參數個數的方式。借鑒 fei-fei li 的 cs231n 課件1:
技術分享圖片


repeat layer 則是指重復相同的幾層,前提條件是這幾層的輸出輸出具有相同的維度,一般在不同的 repeat layers 之間使用 strip=2 降維,同時核函數的個數乘 2。

本文網絡參數

技術分享圖片
以上圖為例,中括號內就是 split-transform-merge,通過 cardinality(C) 的值控制 repeat layer
output 在上下相鄰的格子不斷減半,中括號內的逗號後面卷積核的個數不斷翻倍。

等價模式

圖一右側的模型有兩個等價的模型,最右側是 AlexNet 中提出的分組卷積,相同層的 width 分組卷積,最終作者使用的是下圖最右邊的模型,更加簡潔並且訓練更快。
技術分享圖片

模型參數

調節 cardinality 時,如何保證和 ResNet 的參數個數一致呢?本文考慮的是調節 split-transform-merge 中間第二層卷積核的個數。

實驗

基本和 ResNet 差不多,augmentation、以及各個參數
技術分享圖片
技術分享圖片

結論

  • ResNeXt 與 ResNet 在相同參數個數情況下,訓練時前者錯誤率更低,但下降速度差不多
  • 相同參數情況下,增加 cardinality 比增加卷幾個數更加有效
  • 101 層的 ResNeXt 比 200 層的 ResNet 更好
  • 幾種 sota 的模型,ResNeXt 準確率最高

    1. http://cs231n.stanford.edu/slides/winter1516_lecture11.pdf?

深度學習——分類之ResNeXt

from:https://zhuanlan.zhihu.com/p/32913695 範星.xfanplus 計算機視覺/深度學習(CV/DL)在讀

論文:Aggregated Residual Transformations for Deep Neural Networks

作者:Saining Xie, Ross Girshick, Piotr Dollár, Zhuowen Tu, Kaiming He

ImageNet Top5錯誤率:3.03%

中心思想:Inception那邊把ResNet拿來搞了Inception-ResNet,這頭ResNet也把Inception拿來搞了一個ResNeXt,主要就是單路卷積變成多個支路的多路卷積,不過分組很多,結構一致,進行分組卷積。

卷積的範式

作者一上來先歸納了Inception的模式:split-transform-merge。

如下圖所示,先將輸入分配到多路,然後每一路進行轉換,最後再把所有支路的結果融合。

技術分享圖片

少不了要提一下Inception的缺點,太復雜了,人工設計的痕跡太重了。

然後,站得更高,分析了神經網絡的標準範式就符合這樣的split-transform-merge模式。以一個最簡單的普通神經元為例(比如FC中的每個神經元):

技術分享圖片

就是先對輸入的m個元素,分配到m個分支,進行權重加權,然後merge求和,最後經過一個激活。

由此歸納出神經網絡的一個通用的單元可以用如下公式表示:

技術分享圖片

結合ResNet的identity映射,帶residual的結構可以用如下公式表示:

技術分享圖片

上面的變換T可以是任意形式,一共有C個獨立的變換,作者將C稱之為基數,並且指出,基數C對於結果的影響比寬度和深度更加重要。

基本結構

如下圖,左邊是ResNet的基本結構,右邊是ResNeXt的基本結構:

技術分享圖片

回憶下上面的公式,可以看到,旁邊的residual connection就是公式中的x直接連過來,然後剩下的是32組獨立的同樣結構的變換,最後再進行融合,符合split-transform-merge的模式。

作者進一步指出,split-transform-merge是通用的神經網絡的標準範式,前面已經提到,基本的神經元符合這個範式,而如下圖所示:

技術分享圖片

a是ResNeXt基本單元,如果把輸出那裏的1x1合並到一起,得到等價網絡b擁有和Inception-ResNet相似的結構,而進一步把輸入的1x1也合並到一起,得到等價網絡c則和通道分組卷積的網絡有相似的結構。

到這裏,可以看到本文的野心很大,相當於在說,Inception-ResNet和通道分組卷積網絡,都只是ResNeXt這一範式的特殊形式而已,進一步說明了split-transform-merge的普遍性和有效性,以及抽象程度更高,更本質一點。

ResNeXt

然後是ResNeXt具體的網絡結構。

類似ResNet,作者選擇了很簡單的基本結構,每一組C個不同的分支都進行相同的簡單變換,下面是ResNeXt-50(32x4d)的配置清單,32指進入網絡的第一個ResNeXt基本結構的分組數量C(即基數)為32,4d表示depth即每一個分組的通道數為4(所以第一個基本結構輸入通道數為128):

技術分享圖片

可以看到ResNet-50和ResNeXt-50(32x4d)擁有相同的參數,但是精度卻更高。

具體實現上,因為1x1卷積可以合並,就合並了,代碼更簡單,並且效率更高。

參數量不變,但是效果太好,這個時候通常會有一個『但是』。。。但是,因為分組了,多個分支單獨進行處理,所以相交於原來整個一起卷積,硬件執行效率上會低一點,訓練ResNeXt-101(32x4d)每個mini-batch要0.95s,而ResNet-101只要0.70s,雖然本質上計算量是相同的,通過底層的優化因為能縮小這個差距。好消息是,看了下最近的cuDNN7的更新說明:

Grouped Convolutions for models such as ResNeXt and Xception and CTC (Connectionist Temporal Classification) loss layer for temporal classification

貌似已經針對分組卷積進行了優化,我還沒進行過測試,不過我猜效率應該提升了不少。

至於具體的效果,ResNeXt-101(32x4d)大小和Inception v4相當,效果略差,但Inception-v4慢啊= =,ResNeXt-101(64x4d)比Inception-Resnet v2要大一點,精度相當或略低。

上面的比較並不算很嚴謹,和訓練方式、實現方式等有很大的關系,實際使用中區別不大,還沒有找到一個很全的benchmark可以準確比較。不過這裏的結果可以作為一個參考。

得益於精心設計的復雜的網絡結構,ResNet-Inception v2可能效果會更好一點,但是ResNeXt的網絡結構更簡單,可以防止對於特定數據集的過擬合。而且更簡單的網絡意味著在用於自己的任務的時候,自定義和修改起來更簡單。

最後,提一個八卦,ResNet作者的論文被Inception v4那篇argue說residual connection可以提升訓練收斂速度,但是對於精度沒有太大幫助,然後這篇ResNeXt馬上又懟回去了,說沒有要降好幾個點,對於網絡的優化是有幫助的。。。

總結下:split-transform-merge模式是作者歸納的一個很通用的抽象程度很高的標準範式,然後ResNeXt就這這一範式的一個簡單標準實現,簡潔高效啊。

ResNeXt——與 ResNet 相比,相同的參數個數,結果更好:一個 101 層的 ResNeXt 網絡,和 200 層的 ResNet 準確度差不多,但是計算量只有後者的一半