【論文閱讀】ResnetV3:ResNeXt Aggregated Residual Transformations for Deep Neural Networks

論文名稱:Aggregated Residual Transformations for Deep Neural Networks
作者:Saining Xie1 \ Ross Girshick \ Zhuowen Tu \ Kaiming He
論文地址:http://openaccess.thecvf.com/content_cvpr_2017/papers/Xie_Aggregated_Residual_Transformations_CVPR_2017_paper.pdf
發表年份:CVPR 2017


在這裏插入圖片描述
ResNeXt算是Resnet的V3版本(不明白這個名字的含義,覺得很彆扭)。基於ResNeXt的模型ILSVRC2016的圖像分類中獲得亞軍(冠軍是中國的Trimps-Soushen)。但拋開高準確性,ResNeXt的結構性、可擴展性、易用性使得它仍然風靡視覺界。

1 動機

Inception構建網絡時,獨闢蹊徑,使用split-transform-merge的方式構建block unit,然後堆疊這些block,取得了很好的效果,但是Inception裏那些block unit中的卷積核的個數/尺寸等都是對ImageNet數據集量身定做的,如果換個數據集,那麼如果要達到更好的效果需要手動調整這些參數,,,,,,,,,,,。
VGG和ResnetV1/2都採用堆疊相同拓撲結構的“block unit”的方式構建網絡,也取得了很好的效果,而且這種情況下block unit中的超參數數量是極少的。
那麼能不能取Inception和VGG/ResnetV1/2兩家之長呢?

2 貢獻

作者提出一種新的殘差映射的單元結構,在不增加計算的情況下,進一步提升Resnet的性能!

3 方法

3.1 split-transform-merge思想

這種思想來自Inception。對於單個神經元的操作可以深入淺出的解釋這種行爲。
在這裏插入圖片描述
原輸入xx被“split”成x1,x2,x3,,,xDx_1,x_2,x_3,,,x_D,然後單獨做“transform” yi=wixiy_i=w_i*x_i,最後“merge” y=(yi)y=\sum(y_i)
現在把單個神經元換成單個block unit,就可以重新構建殘差塊。
在這裏插入圖片描述

變形

在這裏插入圖片描述
對於新的殘差塊的實現一共有3中方式,而且3中方式效果等效,但是cc的速度要快一些,所以應該使用cc

3.2 模板思想

這種思想來着VGG和ResnetV1/2,每個block都是來自同一個拓撲結構模板,其中的微小區別也可以用一兩個參數解決,這樣可以使得網絡設計的靈活性和泛化性極高,即即使需要對於某個新的數據集更改網絡結構也變得十分簡單。
把上面的新的殘差塊模板化,參數就是分成的份數(論文中稱爲 cardinality)和每一份的width(論文中把width定義爲channel的個數)。

3.3 網絡結構

_for ImageNet
在這裏插入圖片描述

3.4 實現細節

  • 使用cc方式構建殘差塊
  • 其餘超參數、優化器及其參數等 與ResnetV1相同

4 實驗

4.1 驗證ResNeXt的優越性

_注:下面結果中的(m x nd)中,m表示cardinality的個數,n表示每個cardinality的width
在這裏插入圖片描述
在這裏插入圖片描述

4.2 ResNeXt用於目標檢測

同ResnetV1中一致,仍然使用Faster RCNN框架,這次使用ResNeXt作爲特徵提取器。
在這裏插入圖片描述

5 思考

1.文中並沒有對新的殘差塊設計爲什麼有效給出解釋。

本人對這種設計的理解是:
先看單個神經元的操作,把xx“split”之後在做“transform”時wiw_i僅僅對xix_i負責,那麼訓練出來的WW應該很純淨。
再看卷積實現,假設X:(C,H,W)={X1,X2,...,XC}X:(C,H,W)=\{X_1,X_2,...,X_C\},如果對它卷積,那麼卷積核Filter:(F,C,H,W)={w1,w2,...,wF}Filter:(F,C,H,W)=\{w_1,w_2,...,w_F\}在對XX卷積時,直接對XiX_i負責的部分廣泛分佈在w1,w2,...,wCw_1,w_2,...,w_C中,可以記爲wji,1jCw_{ji},1 \leq j\leq C,那麼訓練出來的w1,w2,...,wCw_1,w_2,...,w_C每一個都在對整個XX負責。即對於XiX_iFilterFilter中並不存在某個確定的單獨對它負責的卷積子核wjw_j,這樣訓練出的FilterFilter認爲是不純淨的。
而如果把XX“split”成X1,X2,...,XKX_1,X_2,...,X_K,然後分別讓w1(C/K,H,W),w2(C/K,H,W),...wk(C/K,H,W)w_1(C/K,H,W),w_2(C/K,H,W),...w_k(C/K,H,W)去卷積,這樣就有wjw_j單獨對XiX_i負責,這樣訓練出來的wkw_k相較於一開始的wjw_j應該要純淨,並且當K=CK=C時,就把XX全部“split”,這個時候的wkw_k應該最純淨,效果最好。
並且在計算量大致相同的情況下,“split-transform-merge”的方式下,對XiX_i負責的參數數目會增加。

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