详解ResNet 网络,如何让网络变得更“深”了

摘要

残差网络(ResNet)的提出是为了解决深度神经网络的“退化”(优化)问题。

有论文指出,神经网络越来越深的时候,反传回来的梯度之间的相关性会越来越差,最后接近白噪声。即更深的卷积网络会产生梯度消失问题导致网络无法有效训练。

而ResNet通过设计残差块结构,调整模型结构,让更深的模型能够有效训练更训练。目前ResNet被当作目标检测、语义分割等视觉算法框架的主流backbone。

一,残差网络介绍1.1,残差结构原理

对于VGG式的卷积网络中的一个卷积block,假设block的输入为x,期望输出为H(x),block完成非线性映射功能。

那么,如何实现恒等映射呢?

假设直连(plain)卷积block的输入为x,block期望输出为H(x),我们一般第一反应是直接让学习H(x)=x,但是这很难!

从图中可以看出,一个残差块有2条路径F(x)和F(x)路径拟合残差H(x)−x,可称为残差路径,x路径为恒等映射(identitymapping),称其为”shortcut”。图中的⊕为逐元素相加(element-wiseaddition),要求参与运算的F(x)和x的尺寸必须相同!

综上总结:可以认为ResidualLearning的初衷(原理),其实是让模型的内部结构至少有恒等映射的能力。以保证在堆叠网络的过程中,网络至少不会因为继续堆叠而产生退化!

1.2,两种不同的残差路径

在ResNet原论文中,残差路径的设计可以分成2种,

一种没有bottleneck结构,如图3-5左所示,称之为“basicblock”,由2个3×3卷积层构成。2层的残差学习单元其两个输出部分必须具有相同的通道数(因为残差等于目标输出减去输入,即H(x)−x,所以输入、输出通道数目需相等)。

另一种有bottleneck结构,称之为“bottleneckblock”,对于每个残差函数F,使用3层堆叠而不是2层,3层分别是1×1,3×3和1×1卷积。其中1×1卷积层负责先减小然后增加(恢复)维度,使3×3卷积层的通道数目可以降低下来,降低参数量减少算力瓶颈(这也是起名bottleneck的原因)。50层以上的残差网络都使用了bottleneckblock的残差块结构,因为其可以减少计算量和降低训练时间。

1.3,两种不同的shortcut路径

shortcut路径大致也分成2种,一种是将输入x直接输出,另一种则需要经过1×1卷积来升维或降采样,其是为了将shortcut输出与F(x)路径的输出保持形状一致,但是其对网络性能的提升并不明显,两种结构如下图所示。

ResidualBlock(残差块)之间的衔接,在原论文中,F(x)+x是经过ReLU后直接作为下一个block的输入x。

二,ResNet18模型结构分析

残差网络中,将堆叠的几层卷积layer称为残差块(ResidualBlock),多个相似的残差块串联构成ResNet。ResNet18和ResNet34Backbone用的都是两层的残差学习单元(basicblock),更深层的ResNet则使用的是三层的残差学习单元(bottleblock)。

ResNet18其结构如下图所示。

ResNet18网络具体参数如下表所示。

假设图像输入尺寸为,1024×2048,ResNet共有五个阶段。

其中第一阶段的conv1layer为一个7×7的卷积核,stride为2,然后经过池化层处理,此时特征图的尺寸已成为输入的1/4,即输出尺寸为512×1024。

接下来是四个阶段,也就是表格中的四个layer:conv2_x、conv3_x、conv4_x、conv5_x,后面三个都会降低特征图尺寸为原来的1/2,特征图的下采样是通过步长为2的conv3_1,conv4_1和conv5_1执行。所以,最后输出的feature_map尺寸为输入尺寸降采样32=4×2×2×2倍。

在工程代码中用make_layer函数产生四个layer即对应ResNet网络的四个阶段。根据不同层数的ResNet(N):

输入给每个layer的blocks是不同的,即每个阶段(layer)里面的残差模块数目不同(即layers列表不同)

采用的block类型(basic还是bottleneck版)也不同。

本文介绍的ResNet18,使用basicblock,其残差模块数量(即units数量)是[2,2,2,2],又因为每个残差模块中只包含了2层卷积,故残差模块总的卷积层数为(2+2+2+2)*2=16,再加上第一层的卷积和最后一层的分类,总共是18层,所以命名为ResNet18。

个人思考

看了后续的ResNeXt、ResNetv2、Densenet、CSPNet、VOVNet等论文,越发觉得ResNet真的算是Backone领域划时代的工作了,因为它让深层神经网络可以训练,基本解决了深层神经网络训练过程中的梯度消失问题,并给出了系统性的解决方案(两种残差结构),即系统性的让网络变得更“深”了。而让网络变得更“宽”的工作,至今也没有一个公认的最佳方案(Inception、ResNeXt等后续没有广泛应用),难道是因为网络变得“宽”不如“深”更重要,亦或是我们还没有找到一个更有效的方案。

参考资料

DeepResidualLearningforImageRecognition

华为云博客_大数据博客_AI博客_云计算博客_开发者中心-华为云

版权声明:本站所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请举报,一经查实,本站将立刻删除。

相关推荐