【论文阅读】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负责的参数数目会增加。

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