第四章 ResNet

系列文章目录

第一章 机器学习技术分类

第二章 深度学习基础——层和函数

第三章 卷积神经网络模型的发展

第四章 ResNet


目录

系列文章目录

文章目录

一、简介

 二、残差模块

三、ResNet的结构

1. 每级内部的残差模块

2. 两级之间的残差模块

 四、常用的ResNet

1. resnet18

2. resnet34

​​​​​​​3. resnet50

​​​​​​​4. resnet101

​​​​​​​5. wide_resnet50_2

​​​​​​​6. wide_resnet101_2

参考文献

总结


一、简介

        在ResNet出现之前,神经网络一般不超过20层。因为非常深的神经网络是很难训练的,因为存在梯度消失和梯度爆炸问题。

        ResNet(Residual Network)是由微软亚洲研究院的何凯明等人于2015年提出的,通过引入残差连接(residual connections)解决了深层网络训练过程中的梯度消失和梯度爆炸问题,有效地加深了网络的深度。

                 

 二、残差模块

        对于某个网络模块,假设其相当于函数F(x)。如果期望的潜在映射为H(x),与其让F(x)直接学习潜在的映射,不如去学习残差F(x):=H(x)−x。这样原本的前向路径上就变成了F(x)+x,用F(x)+x来拟合H(x)。作者认为这样可能更易于优化,因为相比于让F(x)学习成恒等映射,让F(x)学习成0要更加容易——后者通过L2正则就可以轻松实现。这样,对于冗余的block,只需F(x)→0就可以得到恒等映射,性能不减。

        ResNet中的残差模块有两种结构,左边的叫Basic block,右边的叫Bottleneck block。Bottleneck block先通过1x1的卷积降通道数,然后再进行3x3的卷进,最后通过1x1的卷积恢复通道数。Bottleneck block主要用在大一些的网络中,实现计算量的压缩

 

三、ResNet的结构

        ResNet包含5级。第1级仅包含卷积核为7*7的conv、bn和relu。第2级包含一个stride为2 的3*3maxpool以及若干残差模块。第3-5级仅包含残差模块。5级之后为一个average pool加一个全连接层。

        第2-5级,每级输出尺寸减半同时通道倍增。

        整个网络的输入通道数为3,1-5级的通道数分别为:64、64、128、256、512。也就是说2-5级的Basic block或Bottleneck block第1个卷积的输出分别为:64、128、256、512。那么2-5级的Bottleneck block的输出通道数分别为:64*4、128*4、256*4、512*4。

        第2级的尺寸减半通过max pool实现,第2-5级的尺寸减半通过stride为2 的3*3卷积实现。

 

1. 每级内部的残差模块

        残差模块的输入和输出的尺寸和通道数相同。

        对于Basic block:在主线上,每一层卷积的卷积核大小为3*3,padding为1,stride为1,不使用空洞卷积,卷积前后通道数不变。支线为恒等映射。

        对于Bottleneck block:在主线上,第一层卷积的卷积核大小为1*1,padding为0,stride为1,卷积后通道数由“当前级通道数*4”变为“当前级通道数”;第二层卷积的卷积核大小为3*3,padding为1,stride为1,不使用空洞卷积,卷积前后通道数不变;第三层卷积的卷积核大小为1*1,padding为0,stride为1,卷积后通道数由“当前级通道数”变为“当前级通道数*4”。支线为恒等映射。

        第2级的尺寸减半通过max pool实现,第1级和第2级的通道数都为4,所以第2级的残差块均为内部残差模块。

​​​​​​​2. 两级之间的残差模块

        3-5级,每经过一级,特征图尺寸减半,通道数倍增。这是通过每一级的第一个残差块实现的,每级第一个残差块的结构和其他残差块结构不同,对应虚线shortcut。

        对于Basic block:在主线上,每一层卷积的卷积核大小为3*3,padding为1,stride为2,不使用空洞卷积,卷积之后通道数增加为“当前级通道数”,特征图尺寸减半;第二层卷积的卷积核大小为3*3,padding为1,stride为1,不使用空洞卷积,卷积前后通道数不变。支线为一个1*1卷积,卷积后通道数变为“当前级通道数”。

        对于Bottleneck block:在主线上,第一层卷积的卷积核大小为1*1,padding为0,stride为1,卷积后通道数由输入通道数变为“当前级通道数”;第二层卷积的卷积核大小为3*3,padding为1,stride为2,不使用空洞卷积,卷积前后通道数不变,特征图尺寸减半;第三层卷积的卷积核大小为1*1,padding为0,stride为1,卷积后通道数由“当前级通道数”变为“当前级通道数*4”。支线为一个1*1卷积,卷积后通道数变为“当前级通道数*4”。

 四、常用的ResNet

​​​​​​​1. resnet18

_resnet(BasicBlock, [2, 2, 2, 2], weights, progress, **kwargs)

​​​​​​​2. resnet34

_resnet(BasicBlock, [3, 4, 6, 3], weights, progress, **kwargs)

​​​​​​​3. resnet50

_resnet(Bottleneck, [3, 4, 6, 3], weights, progress, **kwargs)

​​​​​​​4. resnet101

_resnet(Bottleneck, [3, 4, 23, 3], weights, progress, **kwargs)

​​​​​​​5. wide_resnet50_2

    _ovewrite_named_param(kwargs, "width_per_group", 64 * 2)

    return _resnet(Bottleneck, [3, 4, 6, 3], weights, progress, **kwargs)

        1-5级的基础通道数还是为:64、64、128、256、512。第2-5级,Bottleneck block的输出通道数分别为:64*4、128*4、256*4、512*4,Bottleneck内第一个1*1卷积的输出通道数分别为:64*2、128*2、256*2、512*2。

​​​​​​​6. wide_resnet101_2

    _ovewrite_named_param(kwargs, "width_per_group", 64 * 2)

    return _resnet(Bottleneck, [3, 4, 23, 3], weights, progress, **kwargs)

        1-5级的基础通道数还是为:64、64、128、256、512。第2-5级,Bottleneck block的输出通道数分别为:64*4、128*4、256*4、512*4,Bottleneck内第一个1*1卷积的输出通道数分别为:64*2、128*2、256*2、512*2。

参考文献

ResNet详解-优快云博客

梯度消失、梯度爆炸的原因和解决办法_梯度消失的原因及解决方法-优快云博客

梯度消失问题-优快云博客

https://zhuanlan.zhihu.com/p/272648694

torchvision.models.resnet — Torchvision 0.19 documentation


总结

标准Res

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值