ResNext论文笔记
- 本质是分组卷积,结合了堆叠模块和Inception的并行思想。
- 这篇论文侧重从简洁化模块(减少超参数和简化支路设计)以及分组卷积的组的大小(cardinality支路数量,the size of transformations,作者指出提高分组卷积的cardinality比deeper和wider更有效)方面写的。
- 与 ResNet 相比,相同的参数量,结果更好.
ResNext
下图是ResNext block(left)和ResNext block(right)模块的对比,可以看到这里借鉴了inception的并行设计,但是相比InceptionV4或者Inception-ResNetv2,ResNext的支路是固定的。
ResNeXt确实比Inception V4的超参数更少,但是直接废除了Inception的囊括不同感受野的特性仿佛不是很合理,在更多的环境中我们发现Inception V4的效果是优于ResNeXt的(实验可能微调过了)。类似结构的ResNeXt的运行速度应该是优于Inception V4的,因为ResNeXt的相同拓扑结构的分支的设计是更符合GPU的硬件设计原则。
下图right的设计是为了和left保持一样的参数量。
下图是InceptionV1的模块,这里作者归纳了Inception的模式:split-transform-merge。
- split:输入分到多支路,1*1卷积降维成低维语义信息
- transform:对输入的feature map进行转换
- merge:concatenation(ResNext里是逐元素相加)
Inception有刻意雕琢支路的痕迹,迁移到其他地方微调很麻烦,扩展性一般。(但这是inception多感受野的思想)
ResNext block内的支路拓扑一样,加上了残差连接,concat操作换成了add,cardinality和中间层的channel大小(文章写的是width)可变。作者强调cardinality这个参数很重要,指出提高分组卷积的cardinality比deeper和wider更有效。
ResNext Template
以下图ResNext具体网络结构为例,中括号内就是 split-transform-merge,通过 cardinality© 的值控制支路个数。
output 在上下相邻的格子不断减半,中括号内的逗号后面卷积核的个数不断翻倍。
可以看到ResNet-50和ResNeXt-50(32x4d)拥有相同的参数,但是精度却更高。
rules:
- 如果产生的feature map 大小相同,那么这些block就共享超参数(channel数量和filter size,但参数不共享)
- feature map大小/2时,channel*2
第二个rule确保了参数可以均匀分布在每一层
Aggregated Transformations
作者回归MLP,归纳出了下面不同的split-transform-merge结构:
MLP一个没有偏置的线性激活神经元为:
∑
i
=
1
D
w
i
x
i
\sum_{i=1}^{D} w_{i} x_{i}
i=1∑Dwixi
每个结构使用相同的拓扑结构,那么这时候的Inception表示为:
F
=
∑
i
=
1
C
T
i
(
x
)
\mathcal{F}=\sum_{i=1}^{C} \mathcal{T}_{i}(\mathbf{x})
F=i=1∑CTi(x)
结合ResNet的identity映射,带residual的结构可以用如下公式表示:
y
=
x
+
∑
i
=
1
C
T
i
(
x
)
\mathbf{y}=\mathbf{x}+\sum_{i=1}^{C} \mathcal{T}_{i}(\mathbf{x})
y=x+i=1∑CTi(x)
其中C是Cardinality,T()是任意的变换,例如一系列的卷积操作等。
等价模式
三个block都是等价的。
- a写完了3个支路
- b简化了最后一个1*1卷积层
- c简化了第一个1*1卷积层
作者指出block的depth>3的时候效果好,depth=2的时候效果一般。也就是把bottleneck结构换成两个3*3卷积。
模型参数
实验中在增加accuracy时保持模型复杂度和参数尽量不变。
参数计算:C:cardinality,d:output channel number
Resnet Bottleneck:1×1×256×64+3×3×64×64+1×1×64×256约为70k参数
图1b block的参数:C×(1×1×256×d+3×3×d×d+1×1×d×256),C=32,d=4时参数约为70k
图3a,BN在transform之后,和shortcut相加之前。图3c等价a,BN在卷积后。ReLu在BN之后。
选用c结构是因为三种结构等价,且训练结果一样,c更简洁且快。
实验
notations:输入输出channel为256d,feature map大小/2时,channel*2。
cardinality vs width
resnext优于resnet,在complexity不变的情况下,c变大error下降。
作者指出block第二层的channel没必要小于4,我认为是他们实验试出来的,也可能是再小到1就是深度可分离卷积了。
Increasing Cardinality vs deeper/wider
table4,可见增加c之后模型的结果比增加channel100d和加深到200层的效果要好
Performance on ImageNet-1k
ImageNet-1k上ResNext101 per minibatch0.95s,resnet101 0.7s,作者认为这个开销是可以接受的,如果稍微调整代码可能会减少这个时间。
ImageNet-5k
参数相当的情况下resnext效果优于wide resnet,增加c效果提升。
作者提到在5k上训练的搬到1k比专门在1k上训练的模型的效果类似(可以比)。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1OeOOyIb-1669279016487)(C:\Users\86188\Pictures\table7.png)]
CIFAR
作者把resnet block 换成了resnext的block
Our networks start with a single 3×3 conv layer, followed by 3 stages each having 3 residual blocks, and end with average pooling and a fully-connected classifier (total 29-layer deep), following resnet
fig7实验:
- 固定d不变增加c
- 增加d固定c=1
由fig7可见,增加c比增加d更加有效
由fig7可见,增加c比增加d更加有效.(我总感觉变量控制的不是很好,增加w和c的参数变得都不一样,c明显参数更大)
表8同组的模型复杂度相当。