Resnet论文讲解

文章:Deep Residual Learning for Image Recognition

代码:https://github.com/KaimingHe/deep-residual-networks



1:卷积层多为3x3filter,相同output形状的层有相同个数滤波器,如果特征图变为一半大小,滤波器个数加倍(为了保存layer的时间复杂性)

2:进一步增加shortcut做resnet时,输入输出不变时就简单的加shortcut,但是遇到维度增加(64->128,128->256)时有两种选择:多余的dimension都补0(好处是不增加参数),或者用以下公式的线性映射,(利用1x1卷积做)。这两种方法都要以stride=2来做。卷积层(stride=2)进行下采样

Resnet论文讲解

3.第一个就是普通的VGG-19,第二个作者成为plain网络,与结构VGG-19相似,最终的残差网络就是在plain网络的基础上加入了shortcuts连接。作者提出对于同维度的情况下(即feature maps数目相同,如图中实线),直接相加即可,对于不同维度的情况下(如图中虚线),采用了两种方式:(1)将多出来的feature maps初始化为0;(2)使用1x1的卷积层将输入的feature maps数目映射到与输出的feature maps数目相同。 
值得注意的是,作者在使用的网络中每个conv层后面都跟上了Batch normalization层,没有加入dropout层,同时使用全局平均池化层代替全连接层,从而减少参数模型的大小.

4. 另外作者对前面的shortcuts的映射方法进行了实验,有三种做法:(A)新增的维度采用初始化为0的feature maps,原来的保持不变;(B)对于要增加维度的情况下,采用1x1卷积层映射将维度增加;(C)对于所有情况,都用1x1的卷积层进行映射。效果是C>B>A,但是差距不大,然而C相比B占用更多的计算资源,同时参数相比B也有很大的增加,因此在最后作者并没有选用C做法。 

最后,作者尝试改善我们前面提到的残差学习模块,改变的方式如下图所示: 

Resnet论文讲解 

作者称这种改进的结构为bottleneck结构,即先用1x1卷积核降低feature maps的数目,然后使用3x3的卷积层,最终对得到的结果在用1x1的卷积层升维,作者将这种bottleneck结构前面我们介绍残差学习模块,最终得到了更好的结果.

5. 采用1*1 步长为2的方法,降低特征map的大小,128*128的降到64*64的特征map大小;采用1*1的卷积增加通道数,来增加特征的维度!

残差的结构,特征map的大小可以通步长来降低,通道数可以通1*1 的卷积核来增大和缩小;

Resnet论文讲解

原始的一个模块:残差18的模块两个3*3的卷积一个短路链接

Resnet论文讲解