一、ResNet网络介绍

ResNet是2015年有微软实验室提出的,题目:

作者是何凯明等,这四个都是华人。

当年ResNet斩获了当年各种第一名。基本上只要它参加的比赛,全都是第一名。

我们来看一下ResNet 34层网络的结构图(34-layer residual):

首先是一个卷积层,然后是一个池化层,然后由一系列的残差结构,最后再通过一个平均池化下采样以及一个全连接层得到最终输出。其实这个网络结构看起来很简单,基本上都是通过堆叠残差结构得到。

这里我总结了一下ResNet网络的三点:

(1)网络结构特别的深。

在原论文中,作者有尝试搭建1000多层的网络。而之前讲的AlexNet,VGG等,他们的深度也就在十几层到二十几层之间。这里可能有人会说,那我直接将一系列的卷积核池化不断叠加,我也能搭建一个超深的网络呀?

下面我们来看一下这些图。这些图都是从ResNet的原论文中截取出来的:

左边的图,就是将卷积层和池化层进行堆叠,所搭建的网络结构。我们可以看到20层的网络的训练错误大概在1%、2%左右,而56层的网络错误率在7%、8%,这说明层数越深效果越好。是什么原因造成更深的网络效果越差呢?

在ResNet网络中,作者提出了两个问题。

第一个,随着网络加深,梯度消失或者梯度爆炸现象会越来越明显。我们做一个假设,假设每一层的误差梯度是一个小于1的数,那么在反向传播过程中,每向前传播一次,都要乘以一个小于1的误差梯度。当网络越来越深的时候,梯度会越来越小,这就是梯度消失。反过来,每一层的梯度是一个大于1的数,会导致梯度爆炸现象。梯度消失和梯度爆炸现象怎么解决呢?通常是通过数据标准化处理、权重初始化、BN来解决。

第二个问题,作者称为退化问题。也就是说在解决了梯度消失或爆炸问题之后,我们仍然会存在层数深的效果层数少的效果好。该怎么解决呢?论文提出通过残差结构解决。右图是搭建的一系列网络,图中实现代表训练集的错误率,虚线代表验证机的错误率。可以看到,层数越深,错误率越小。与左图对比,看到ResNet确实解决了文中提到的退化问题。

(2)提出residual(残差)结构。

我们来看一下残差结构是什么样子。

这也是从原文截下来的。左边的结构是针对于网络结构较少的网络使用的,比如34层。而右边是对50层,101层,152层提出来的结构。

看左图。主线是将输入特征矩阵经过两个3*3的的卷积层。右边有一个弧线,直接从输入连接到输出。注分支上得到的特征矩阵再与输入特征矩阵相加,相加之后再通过ReLU函数。既然是相加,需要注意,主分支与shortcut的输出特征矩阵shape(w、h、c)必须是相同的。

右图。依次通过1*1的卷积层,3*3的卷积层,1*1的卷积层。右图比左图比起来,到底节省了多少参数呢?假设左图也是输入256维的向量,第一个卷积层是3*3*256,第二个卷积层也是3*3*256,那么第一个卷积层需要3*3*256(注:输入图像通道数)*256(注:卷积核个数) ;第二个卷积层也需要3*3*256*256个参数。共需要1,179,648个参数。而右图需要:1*1*256*64+3*3*64*64+1*1*64*256 = 69632个参数。一个118万,一个7万。明显少了很多。而且,在网络搭建的过程中可不止一个残差结构,而是十几个、几十个残差结构。

(3)使用BN处理。

使用了这个方法之后,就不需要使用dropout方法了。

二、ResNet网络参数详解

下面这张表格就是原论文所给出来的参数列表。对应的18层的网络、34层的网络、50层的网络、101层的网络、152层的网络。

我们可以看到这几个网络的整个网络框架是类似的。同样是经过7*7的池化层,然后经过3*3的最大下采样。再经过一系列的残差结构。最后平均下采样、全连接层、输出层。

1. resnet18/34

下面我们再结合34层的网络,对整个表格进行讲解。

输入图片224*224*3

(1) 经过7*7,64,卷积

stride=2,padding=3。输出尺寸为(224-7+6)/2 + 1 = 112.5下取整 = 112。 所以输出112*112*64。

(2)max pooling

卷积核大小3*3,stride=2,padding=1。输出尺寸为(112-3+2)/2 + 1 = 56.5下取整=56。所以输出56*56*64。

(3)conv2_x。经过3个残差结构。

第一个残差结构:

主分支上,首先 经过3*3*64的卷积层。stride=1,padding=1。输出尺寸(56+2-3)/1 + 1 = 56。所以输出56*56*64。经过第二个卷积层完全一样,输出还是56*56*64。

主分支与捷径上都是56*56*64,进行相加操作。

第二、三个残差结构与第一个残差结构完全一样。

所以经过conv2_x之后,输出为56*56*64。

(4)conv3_x。经过4个残差结构。其中第一个残差结构是虚线,二三四个残差结构是实线。为什么会不一样呢?因为要保证主分支和shortcut的输出特征shape相同,还用实现的话不能保证这一点。

第一个残差结构:

输入是56*56*64的特征图。

主分支:首先经过3*3*128的卷积层。stride=2,padding =1。输出尺寸(56+2-3)/2 +1 = 28.5下取整=28。所以输出尺寸28*28*128。然后经过3*3*128的卷积层。stride=1,padding=1。输出尺寸(28+2-3)/1+1 = 28。所以输出28*28*128。

捷径:经过1*1*128的卷积层。stride=2,padding=0。输出尺寸(56-1)/2 +1 = 28。输出为28*28*128。

主分支和捷径的结果shape相同,所以可以相加。结果为28*28*128。

第二个残差结构:

输入是28*28*128。经过经过3*3*128的卷积层。stride=1,padding=1。输出尺寸(28+2-3)/1 + 1 = 28。所以输出28*28*128。经过第二个卷积层完全一样,输出还是28*28*128。

主分支与捷径上都是28*28*128,进行相加操作。

第三、四个残差结构与第二个残差结构完全一样。

(5)conv4_x。经过6个残差结构。其中第一个是虚线;后五个相同,是实线。原理跟conv3_x相同。

(6)con5_x。经过3个残差结构。其中第一个是虚线。后2个相同,是实现。原理跟conv3_x相同。

(7)avg-pooling。

(8)fc

2. ResNet50/101/152

对于深的网络,如ResNet 50/101/152,跟resnet34一样。只不过他们使用的残差结构为:

其中,虚线的结构为conv3_x,conv4_x, conv5_x的第一个残差结构。

1. Resnet网络详解相关推荐

  1. ResNet网络详解与keras实现

    ResNet网络详解与keras实现 ResNet网络详解与keras实现 Resnet网络的概览 Pascal_VOC数据集 第一层目录 第二层目录 第三层目录 梯度退化 Residual Lear ...

  2. ResNet网络详解并使用pytorch搭建模型、并基于迁移学习训练

    1.ResNet网络详解 网络中的创新点: (1)超深的网络结构(突破1000层) (2)提出residual模块 (3)使用Batch Normalization加速训练(丢弃dropout) (1 ...

  3. ResNet网络详解

    ResNet ResNet在2015年由微软实验室提出,斩获当年lmageNet竞赛中分类任务第一名,目标检测第一名.获得coco数据集中目标检测第一名,图像分割第一名. ResNet亮点 1.超深的 ...

  4. 【深度学习】ResNet网络详解

    文章目录 ResNet 参考 结构概况 conv1与池化层 残差结构 Batch Normalization 总结 ResNet 参考 ResNet论文: https://arxiv.org/abs/ ...

  5. ResNet、ResNeXt网络详解及复现

    网络详解: ResNet网络详解 ResNeXt网络详解 torch复现: import torch.nn as nn import torch''' 对应着18层和34层的残差结构 既要拥有实现部分 ...

  6. 第十六章 ConvNeXt网络详解

    系列文章目录 第一章 AlexNet网络详解 第二章 VGG网络详解 第三章 GoogLeNet网络详解 第四章 ResNet网络详解 第五章 ResNeXt网络详解 第六章 MobileNetv1网 ...

  7. 深度残差网络(ResNet)详解与实现(tensorflow2.x)

    深度残差网络(ResNet)详解与实现(tensorflow2.x) ResNet原理 ResNet实现 模型创建 数据加载 模型编译 模型训练 测试模型 训练过程 ResNet原理 深层网络在学习任 ...

  8. GoogleNet网络详解与keras实现

    GoogleNet网络详解与keras实现 GoogleNet网络详解与keras实现 GoogleNet系列网络的概览 Pascal_VOC数据集 第一层目录 第二层目录 第三层目录 Incepti ...

  9. EfficientNetV2网络详解

    原论文名称:EfficientNetV2: Smaller Models and Faster Training 论文下载地址:https://arxiv.org/abs/2104.00298 原论文 ...

最新文章

  1. GitHub分享新华字典数据集
  2. 移动应用开发者应该关注的 Google I/O 两项更新
  3. google浏览器插件安装时出错,Package is invalid: CRX HEADER INVALID
  4. iOS开发使用Unwind Segue进行返回
  5. 450g带盖吐司配方_450g带盖吐司烤多久
  6. python中的__iter__ __reversed__ __next__
  7. win7或xp下常用命令
  8. php 配置远程调试,PHP Linux 环境下搭建 XDEBUG并配置远程调试
  9. 你真的了解css像素嘛?
  10. 网络上常用的一些网站
  11. mfc文字闪烁如何解决_男同胞福音!如何解决尿尿时最尴尬的难题?建议偷偷收藏(文字版)...
  12. dj电商-架构与布局
  13. MySQL 数据库“十宗罪”(十大经典错误案例)
  14. 2000元档855旗舰来了 网友:都过时了,哪有人买
  15. 阿里云apache配置php mysql_阿里云CentOS7搭建Apache+PHP+MySQL环境
  16. 网站编辑,你们的名字叫搬运工?
  17. 搜狗浏览器查看账号密码
  18. JavaScript下载后端返回的文件流
  19. 小年到了,回家抢票太难,用Python做个脚本12306自动查票以及自动购票....
  20. 第二章 Selenium-API操作

热门文章

  1. html中怎么给表格增加序号,如何给word表格中添加编号
  2. 【数据结构】广义表的基本概念
  3. C++使用CFile类文件读写
  4. Coursera | Andrew Ng (02-week-1-1.7)—理解 Dropout
  5. Matlab画复指数函数的三维图
  6. 【Binder 机制】AIDL 分析 ( 分析 AIDL 文件生成的 Java 源文件 | Binder | IBinder | Stub | Proxy )
  7. App三种启动场景:冷启动、热启动、温启动
  8. 一台主机连接两台显示器单独分开工作
  9. 网易游戏测试工程师面试小记
  10. 半监督学习:MixMatch