在提出 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 输入特征。
在讲述 ResNeXt 之前,需要先了解一下什么是组卷积 (Group Convolution)。
而 分组卷积是介于普通卷积和深度可分离卷积(MobileNet)的一种折中方案,不是彻底的将每个 channel 都要单独赋予一个独立的卷积核,也不是整个 Feature Map 使用同一个卷积核。这就像之前说的 Group Normalization 一样。
作者在论文中给出了三种 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 进行替换就行了。
组数 (作者取名为 Cardinality),可以计算出组卷积通道数,使得和原始 ResNet 计算量基本一致(原论文提到尽可能减少训练过程中超参数个数)。
参数量计算很简单,参考如下公式,当 C = 32 , d = 4时计算可得参数量为 70k:
实践是检验真理的唯一标准,在没有理论的支撑下,作者干脆就是根据实验发现,这样性能好,所以设置为 32。
这里,C为设置的组数,d为每组的维度,width of group conv为组卷积的输出维度,也就是C*d
最后补充一下,上述 block 都是针对 ResNet50 及以上的网络进行替换的。如果对于浅层的例如 ResNet18 和 ResNet34 怎么替换呢?可以参考下图的结构进行替换即可。
————————————————
阅读量:2023
点赞量:0
收藏量:0