ResNet原理及其PyTorch实现

2020年06月21日 45点热度 2人点赞 0条评论

VGGNet和Inception出现后,学者们将卷积网络不断加深以追求更优越的性能,然而随着网络的加深,网络却越发难以训练,一方面出产生梯度消失现象;另一方面越深的网络返回的梯度相关性会越来越差,接近于白噪声,导致梯度更新也接近于随机扰动。

ResNet(Residual Network,残差网络)较好地解决了这个问题,并获得了2015年ImageNet分类任务的第一名。此后的分类、检测、分割等任务也大规模使用ResNet作为网络骨架。

ResNet的思想在于引入了一个深度残差框架来解决梯度消失问题,即让卷积网络去学习残差映射,而不是期望每一个堆叠层的网络都完整地拟合潜在的映射(拟合函数)。如下图所示

对于神经网络,如果我们期望的网络最终映射为H(x),左侧的网络需要直接拟合输出H(x),而右侧由ResNet提出的子模块,通过引入一个shortcut(捷径)分支,将需要拟合的映射变为残差F(x):H(x)-x。ResNet给出的假设是:相较于直接优化潜在映射H(x),优化残差映射F(x)是更为容易的。

在ResNet中,上述的一个残差模块称为Bottleneck。ResNet有不同网络层数的版本,如18层、34层、50层、101层和152层,这里以常用的50层来讲解。

ResNet-50的网络架构如下图所示

最主要的部分在于中间经历了4个大的卷积组,而这4个卷积组分别包含了3、4、6这3个Bottleneck模块。最后经过一个全局平均池化使得特征图大小为1*1,然后进行1000维的全连接,最后经过Softmax输出分类得分。

隐藏内容需要支付:¥5
查看全部
未经允许不得转载!ResNet原理及其PyTorch实现

update

纸上得来终觉浅, 绝知此事须躬行。