【论文阅读】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。对于单个神经元的操作可以深入浅出的解释这种行为。
在这里插入图片描述
原输入 x x x被“split”成 x 1 , x 2 , x 3 , , , x D x_1,x_2,x_3,,,x_D x1,x2,x3,,,xD,然后单独做“transform” y i = w i ∗ x i y_i=w_i*x_i yi=wixi,最后“merge” y = ∑ ( y i ) y=\sum(y_i) y=(yi)
现在把单个神经元换成单个block unit,就可以重新构建残差块。
在这里插入图片描述

变形

在这里插入图片描述
对于新的残差块的实现一共有3中方式,而且3中方式效果等效,但是 c c c的速度要快一些,所以应该使用 c c c

3.2 模板思想

这种思想来着VGG和ResnetV1/2,每个block都是来自同一个拓扑结构模板,其中的微小区别也可以用一两个参数解决,这样可以使得网络设计的灵活性和泛化性极高,即即使需要对于某个新的数据集更改网络结构也变得十分简单。
把上面的新的残差块模板化,参数就是分成的份数(论文中称为 cardinality)和每一份的width(论文中把width定义为channel的个数)。

3.3 网络结构

_for ImageNet
在这里插入图片描述

3.4 实现细节

  • 使用 c c c方式构建残差块
  • 其余超参数、优化器及其参数等 与ResnetV1相同

4 实验

4.1 验证ResNeXt的优越性

_注:下面结果中的(m x nd)中,m表示cardinality的个数,n表示每个cardinality的width
在这里插入图片描述
在这里插入图片描述

4.2 ResNeXt用于目标检测

同ResnetV1中一致,仍然使用Faster RCNN框架,这次使用ResNeXt作为特征提取器。
在这里插入图片描述

5 思考

1.文中并没有对新的残差块设计为什么有效给出解释。

本人对这种设计的理解是:
先看单个神经元的操作,把 x x x“split”之后在做“transform”时 w i w_i wi仅仅对 x i x_i xi负责,那么训练出来的 W W W应该很纯净。
再看卷积实现,假设 X : ( C , H , W ) = { X 1 , X 2 , . . . , X C } X:(C,H,W)=\{X_1,X_2,...,X_C\} X:(C,H,W)={X1,X2,...,XC},如果对它卷积,那么卷积核 F i l t e r : ( F , C , H , W ) = { w 1 , w 2 , . . . , w F } Filter:(F,C,H,W)=\{w_1,w_2,...,w_F\} Filter:(F,C,H,W)={w1,w2,...,wF}在对 X X X卷积时,直接对 X i X_i Xi负责的部分广泛分布在 w 1 , w 2 , . . . , w C w_1,w_2,...,w_C w1,w2,...,wC中,可以记为 w j i , 1 ≤ j ≤ C w_{ji},1 \leq j\leq C wji,1jC,那么训练出来的 w 1 , w 2 , . . . , w C w_1,w_2,...,w_C w1,w2,...,wC每一个都在对整个 X X X负责。即对于 X i X_i Xi F i l t e r Filter Filter中并不存在某个确定的单独对它负责的卷积子核 w j w_j wj,这样训练出的 F i l t e r Filter Filter认为是不纯净的。
而如果把 X X X“split”成 X 1 , X 2 , . . . , X K X_1,X_2,...,X_K X1,X2,...,XK,然后分别让 w 1 ( C / K , H , W ) , w 2 ( C / K , H , W ) , . . . w k ( C / K , H , W ) w_1(C/K,H,W),w_2(C/K,H,W),...w_k(C/K,H,W) w1(C/K,H,W),w2(C/K,H,W),...wk(C/K,H,W)去卷积,这样就有 w j w_j wj单独对 X i X_i Xi负责,这样训练出来的 w k w_k wk相较于一开始的 w j w_j wj应该要纯净,并且当 K = C K=C K=C时,就把 X X X全部“split”,这个时候的 w k w_k wk应该最纯净,效果最好。
并且在计算量大致相同的情况下,“split-transform-merge”的方式下,对 X i X_i Xi负责的参数数目会增加。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个错误出现是因为在EncoderDecoder.py文件中的ResNetV1c类中没有名为'zero_init_residual'的属性。你可以在该文件中检查代码,确认是否缺少了这个属性的定义。如果确实缺少了该属性,你可以尝试将它添加到ResNetV1c类中,并根据需要初始化它的值。这样应该可以解决这个错误。 中的代码片段是一个示例,展示了如何使用torch.nn模块定义和运行一个神经网络。在这个示例中,Net类继承自nn.Module,并定义了网络的结构和前向传播函数。这个示例中的神经网络包含了卷积层、全连接层和激活函数等组件,这些组件可以根据实际需求进行修改和扩展。在示例中,通过调用F.max_pool2d函数、F.relu函数等,实现了前向传播的计算过程。最后,将定义好的网络实例化为net,并打印出了每个参数的名称和大小。 中的代码片段展示了在models/__init__py文件中如何导入自定义模型。其中,AlexNet和ResNet34是两个自定义的模型类,分别实现了AlexNet和ResNet34的结构和计算过程。通过在__init__py文件中导入这些模型类,可以方便地在其他地方调用和使用它们。 是一个关于PyTorch版本问题的讨论链接,其中提到了一个错误信息中的具体错误和原因。根据讨论中的解释,这个错误是由于PyTorch 0.3版本将一些操作从Python转移到了C中,导致无法通过Python访问相应的对象。这个错误和你提到的错误信息可能存在一定的联系,但具体情况还需要根据你的代码和环境来确定。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [深度学习框架Pytorch入门与实践——读书笔记](https://blog.csdn.net/weixin_43593871/article/details/115494507)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [PyTorch从入门到实践 | (6) PyTorch实战指南:猫狗二分类](https://blog.csdn.net/sdu_hao/article/details/98737375)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值