ResNest:Split-Attention Networks
1.文章动机
针对识别的网络结构自ResNet以来已经发生了很多改进版本,这些网络的在精度和效率上都得到了提升,但是这些网络的设计初衷都是为分类网络,对于下游应用如检测,分割并不是十分友好,所以这些网络目前基本还是以ResNet作为架构,并且做一些特定的优化如PPM(金字塔池化)等等,因此本文考虑设计一种基于ResNet的通用改进网络,无论是上游还是下游任务均有很大提升。并且之前的研究表明,跨通道的信息是非常有用的,而且使用多通道组卷积也十分有用,因此作者将会从这两个方面着手解决。
2.方法
该部分会加入自己之前的很多知识的查缺和进一步理解。
在此补充一点,之前我只指导SE是加在通道维度的,对于其和网络的整体架构并没有意识,其实SENet是用在一个残差block里面,也就是上图中的最左边的图,是在block的整个流程结束后加注意力的,具体细节如下图所示。接下来我们来讲ResNest, 该文章原理图如Fig1中的最右边的图所示,将一个输入先分为K个cardinal,然后在每个Cardinal中又分为R个split,对于每个split里面的分支做与SKNet相似的监督机制。监督机制原理如下图所示
这就是文中提出的监督机制,与SKNet实质上是完全相同的,上图中的整体流程称为cardinality-major ,但是实际中为了使用组卷积进行加速,实际采用的是 Radix-major ,原理图如下所示,其作用实质和cardinality-major完全一致。
3.网络结构和训练优化
3.1网络结构优化
(1)Average Downsampling:在这儿必须讲一下自己之前对ResNet网络理解不足的地方,如下图所示,不同的stage的空间尺寸是不同的,在原始ResNet的网络上使用的带stride的33卷积来进行下采样,而由于使用带stride卷积补0的操作,使得网络性能下降,该网络使用33的池化模块来替代带stride的33卷积。
(2)Tweaks from ResNet-D:将原始ResNet的第一个77卷积换为两个33卷积,感受野不变的情况下减少了计算量。另一个之前没有想到的问题是ResNet在跳跃连接的时候并有不是直连的情况,如图中虚线所示是当输入和输出通道数不一致的时候,在原始的resnet中采用的是11的带stride的卷积,而现有网络改为2*2的平均池化。
3.2 训练技巧
这里只讲之前不熟悉的方法
Label Smoothing:简单来讲就是将之前的标签进行些许改动,以防止网络过拟合,将之前概率为1的类别改为1-ε,而剩余的其他类改为ε/(K-1),这样做的原因是标注的lable并不是百分百可信的,所以加入参数ε可以增强模型泛化能力。
Mixup Training:增强数据的方法
4.实验结果
在分类,检测,实例分割,语义分割上的结果。
真实感受,这篇文章没多少创新点,就是别人的东西堆砌。