【轻量型卷积网络】ResNeXt网络解析

【轻量型卷积网络】ResNeXt网络解析

1. 介绍

论文地址: Aggregated Residual Transformations for Deep Neural Network

在提出 ResNet 网络之后,很多模型都会拿 ResNet 网络作为基准和比对。而ResNeXt 网络可以被视作对 ResNet 的小幅升级,其实不难发现其也参考了 Inception 的思想。其原始论文为 《Aggregated Residual Transformations for Deep Neural Network》,发表于 2017 年的 CVPR。但是这篇论文没有当初的 ResNet 那么惊艳了。论文最大的贡献点就在于更新了 Residual Block,采用 split-transform-merge 策略,本质是分组卷积,但是不需要像 Inception 一样人工设计复杂的结构,也不像 Inception 一样结合不同尺寸感受野的信息,拓扑结构一致的 ResNeXt 对 GPU 等硬件也更友好 (所以这个结构跑得更快)。

值得指出的是,split-transform-merge 策略其实在 VGG 堆叠的思想和 Inception 的思想中都有体现,只不过 VGG split 的是变换函数本身,ResNeXt 和 Inception 都是 split 输入特征。

2. 模型

在这里插入图片描述

2.1 组卷积

在讲述 ResNeXt 之前,需要先了解一下什么是组卷积 (Group Convolution)。

  • 分组卷积的雏形其实可以追溯到 2012 年深度学习鼻祖文章 AlexNet。受限于当时硬件的限制,作者不得不将卷积操作拆分到两台GPU上运行,这两台GPU的参数是不共享的。后来在实现中被我们简化到一个卷积层,不分组了。

  • 对于普通卷积而言,每个卷积核的 channel 与输入通道数保持一致。然后 n 个卷积核对应于输出通道为 n。所以整个卷积层的参数(不考虑偏置)为 k × k × C i n × n k \times k \times C_{in} \times n k×k×Cin×n,其中 k 为卷积核大小。

  • 对于组卷积而言,假设平均分为 g 组,对每组分别进行卷积操作,每组得到的最终输出为 n/g。那么这 g 组卷积的总参数量为 ( k × k × C i n g × n g ) × g = k × k × C i n × n / g (k \times k \times \frac{C_{in}}{g} \times \frac{n}{g}) \times g = k \times k \times C_{in} \times n / g (k×k×gCin×gn)×g=k×k×Cin×n/g 。即为原来的 1 / g。

    • 如果 g = C i n , n = C i n g = C_{in}, n = C_{in} g=Cin,n=Cin,那么就是 DW Conv(mobileNet,可以参考 MobileNet系列),也就是对于我们输入的特征矩阵的每一个 Channel 分配了一个 Channel 为 1 的卷积核进行卷积。

在这里插入图片描述
而 分组卷积是介于普通卷积和深度可分离卷积(MobileNet)的一种折中方案,不是彻底的将每个 channel 都要单独赋予一个独立的卷积核,也不是整个 Feature Map 使用同一个卷积核。这就像之前说的 Group Normalization 一样。

2.2 ResNeXt—block

作者在论文中给出了三种 block 模块,注意,他们在数学计算上完全等价!
在这里插入图片描述

  • 首先看从 ( c ) 到 ( b )。

    • 在 ( c ) 中上面 256 通道特征图通过 1 × 1 卷积变为 128 个通道,每个卷积核大小为 1 × 1 × 256,一共 128 个卷积核。
    • 我们考虑将 128 个卷积核 4 个一组,那么就可以成为 32 组。因为卷积核之间是没什么关联的,所以完全可以独立分开,就对应于 ( b ) 的第一行。
    • 因为在 ( c ) 中第二行是组卷积,其实也是把 1 × 1 卷积变为 128 个通道独立拆分为 32 组,每组 4 通道,就和 ( b ) 中第二层的输入是一致的。 ( b ) 的第二层其实就是把组卷积给画开了而已。所以 ( b ) 的第二层与 ( c ) 的第二层一致。
    • 因此( b ) 和 ( c ) 是完全等价的。
  • 然后我们看从 ( b ) 到 ( a )。

    • 重点在于为什么 concatenate 之后通过 256 个 1 × 1 × 128 卷积和直接使用 32 组 256 个 1 × 1 × 4 卷积后直接相加是等价的。
    • 其实这非常自然,让我们想象一下,最终输出的某个通道的某个元素,其实就是之前 128 个通道那个元素位置元素的加权求和,权就是 1 × 1 × 128 卷积核的参数。
    • 那么他可以把 128 个求和元素拆开成先加 4 个,再加 4 个,这样加 32 下,最后再把这 32 个元素加起来。本质就是 256 个 1 × 1 × 128 卷积核可以拆成 32 组 256 个 1 × 1 × 4 卷积核。
    • 因此 ( b ) 和 ( a ) 也是等价的。

所以为了搭建 ResNeXt 网络,只需简单地将搭建 ResNet 网络中的 block 进行替换就行了。
在这里插入图片描述

2.3 为什么 group = 32

在这里插入图片描述
组数 (作者取名为 Cardinality),可以计算出组卷积通道数,使得和原始 ResNet 计算量基本一致(原论文提到尽可能减少训练过程中超参数个数)。

  • 参数量计算很简单,参考如下公式,当 C = 32 , d = 4时计算可得参数量为 70k:
    在这里插入图片描述

实践是检验真理的唯一标准,在没有理论的支撑下,作者干脆就是根据实验发现,这样性能好,所以设置为 32

  • 这里,C为设置的组数,d为每组的维度,width of group conv为组卷积的输出维度,也就是C*d
    在这里插入图片描述
    在这里插入图片描述

2.4 注意

最后补充一下,上述 block 都是针对 ResNet50 及以上的网络进行替换的。如果对于浅层的例如 ResNet18 和 ResNet34 怎么替换呢?可以参考下图的结构进行替换即可。
在这里插入图片描述

3. 参考

【1】https://blog.csdn.net/baidu_36913330/article/details/120057689

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋冬无暖阳°

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值