ResNet作为卷积神经网络的一个里程碑式的模型一直在各个领域被应用,因此学习这样一个模型架构很有必要。网上也有很多关于这个网络的介绍,也从中衍生了很多改进的模型(无论改动幅度大小)。因此,有必要就ResNet的变体进行总结。

本篇文章涉及到的文章有:原始版本ResNet[1]、Wider ResNet[3]、ResNeXt[4]、DarkNet53[5],这几篇是我看到变化相对明显;还有一些则是改动相对小一点的,如Identity mapping[2]、Bag of Trick[6]、Dilated ResNet[7]以及torch框架下一个Blog[8],这些文章里也提及到对ResNet的改动,但是并没有整个Block地改,而是只改动了小部分。

下面就开始讲讲这些文章的改动。

原版的ResNet[1]指出一般认为,越深的网络通常会带来更好的表现,但实际上,普通的更深的网络性能不但没有提升,反而会出现下降。于是文章提出了一个假设,越深的网络应该带来至少和浅层网络一样的性能,那么如何保证这个效果呢?文章提出了skip connection,也就是一个简单的浅层特征与深层特征相加,这样保证了,即使中间的运算得到的特征没有任何作用,那么这个深层网络也可以保证和浅层有相同的性能。然而实际的效果则出乎意料地好,因为skip connection的存在,每一个特征与特征相加的Block中间的卷积只需要拟合“残差”,剩余的可以跳过“skip”给更前面的。文章中提出了两个Block,一个是BasicBlock,一个则是BottleNeck Block,如下图:

其中,左边的是BasicBlock,用于少于50层的ResNet(通常是ResNet18、ResNet34);右边是BottleNeckBlock,用于大于等于50层ResNet(通常是ResNet50、ResNet101和ResNet152)。在较深的网络中BottleNeck会在参数上更加节约,然后还能保持性能的提升。值得注意的是在“add”操作前的卷积只需要在其后面加BN不需要Relu,而是在“add”后再Relu。整个网络结构如下图所示:

网络左边两列采用BasicBlock,右边三列采用BottleNeck。

原始的ResNet对于训练卷积神经网路做出了很大的贡献,但是同样也有着许多可以改进的地方。首先,在[1]发表后,很多后续研究[],[]表示,残差连接并不高效,从[1]中的原文也可以看到从ResNet50到ResNet152,top5-error降低了1%(top1-error连1%都没),但是FLOPs却增加了3倍左右。

(注:在之后的文章[6]以及torch框架中的Blog[8]中,ResNet50的top1-error为24.7%的,而下图则是在arxiv上得到)

后续[3]提出,每一个Block中的卷积应该更宽,如下图(c):

但是这个作为对比只能说宽模型有更好的作用,因为在拓宽了模型后参数也变得更多了。但是仍然比较快。

总得来说这篇文章只是提出了一种可能性,说明了宽模型的作用。

ResNeXt[4]则同样由Kaiming组提出,在BottleNeck中的3x3 Conv用组卷积(Group Conv)的方式加入,并且提出了一个超参数“Cardinality”代表组卷积的组数。同时1x1 Conv的降维由原来的降成1/4变成降成1/2,再接3x3 Group Conv。这样保持了参数和浮点数的近似。

结果表明与原模型相比有1%提升:

在[1]发表后,Kaiming组又发表了Identity mapping[2]文章来探讨更深的残差网络的优化问题,提出了“pre-activation”的顺序,即进入每一个Block时先进行BatchNorm+ReLU后接Conv,这样每一次相加都是直接相加而不用接BN+ReLU,实验证明这样会使更深的网络,ResNet-1001变得容易优化,而且不容易过拟合。

最终的结果表示,使用带pre-activation的ResNet-200性能达到了sota,即比InceptionV3更好。

但是这一个现象只有很深的网络才有效果,哪怕是ResNet-164,pre-activation和普通的结构性能并没有相差多少。

第一部分就写到这里吧,下半部分会写一下DarkNet53以及其它一些关于ResNet的改动。

  1. Deep residual learning for image recognition
  2. Identity Mappings in Deep Residual Networks
  3. Wide Residual Networks
  4. Aggregated Residual Transformations for Deep Neural Networks
  5. YOLOv3: An Incremental Improvement
  6. Bag of Tricks for Image Classification with Convolutional Neural Networks
  7. Dilated Residual Networks
  8. Torch | Training and investigating Residual Nets

bottleneck resnet网络_关于ResNet及其变体的总结(上)相关推荐

  1. bottleneck resnet网络_关于ResNet网络的一点理解(网络结构、building block 及 “bottleneck” building block)...

    [时间]2018.10.05 [题目]关于ResNet网络的一点理解(网络结构.building block 及 "bottleneck" building block) 概述 本 ...

  2. bottleneck resnet网络_为何resnet的bottleneck block为何能增强特征学习能力?

    个人理解,仅供参考. 咱们先看一下原文是怎么说的: 原文说的是考虑到训练时间的限制,因此采用了BottleNeck的结构,换言之,至少在原论文中没有说明使用BottleNeck相较于BasicBloc ...

  3. 批梯度下降 随机梯度下降_梯度下降及其变体快速指南

    批梯度下降 随机梯度下降 In this article, I am going to discuss the Gradient Descent algorithm. The next article ...

  4. 子集和与一个整数相等算法_背包问题的一个变体:如何解决Java中的分区相等子集和问题...

    子集和与一个整数相等算法 by Fabian Terh 由Fabian Terh Previously, I wrote about solving the Knapsack Problem (KP) ...

  5. unity打包后运行出错_一种Shader变体收集和打包编译优化的思路

    这是侑虎科技第646篇文章,感谢作者卢建供稿.欢迎转发分享,未经作者授权请勿转载.如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨.(QQ群:793972859) 作者主页:https://gi ...

  6. bottleneck resnet网络_深度学习|图像分类:ResNet(二)

    接着上一讲,我们来看下ResNet的代码,代码的github链接为:ry/tensorflow-resnet,代码基于tensorflow编写. 网络结构的代码如下: import skimage.i ...

  7. ResNet网络详解与keras实现

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

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

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

  9. C#泛谈 —— 变体(协变/逆变)

    有如下四个类. public class Animal{}public class Mammal : Animal{}public class Dog : Mammal{public void Eat ...

最新文章

  1. 绝对经典的滑轮新闻显示(javascript+css)实现
  2. LeetCode Array Partition I
  3. JavaSript实现调用google地图输入经度,纬度移动到该点,同时对点做标记
  4. EUI库 - EXML
  5. 【CV】多目标跟踪:监控领域你必须要了解的算法
  6. 【笔记】css卡片式地展示人物信息和一些展示信息的相关美化记录
  7. HDU2068(错列排序)
  8. 面向对象开发的五大基本原则
  9. go odroid_小众奇葩!Odroid Go Super简评
  10. git批量删除文件和批量提交
  11. 【数据结构 by 解学武】线性表简介
  12. 配置kubeconfig文件实现kubectl多集群切换
  13. 验证码绕过(对验证码绕过的理解-----burpsuite)
  14. Phoenix使用注意事项以及跟标准sql的不同
  15. 硬盘无法识别怎么办 硬盘无法识别怎么恢复数据
  16. 用友nc很慢跟java_大家觉得用友NC的性能如何?
  17. 两种实现九九乘法表的vb代码
  18. 三个网络接口计算机主板,电脑主板接口安装详解
  19. 企业单位申请代码签名证书方法
  20. Leetcode高频题目整理(更新)

热门文章

  1. gpio引脚介绍 树莓派3b_使用微创联合M5S空气检测仪、树莓派3b+、prometheus、grafana实现空气质量持续监控告警WEB可视化...
  2. cytoscape插件bingo使用
  3. python axis 1_科学网—Python初学之解读MDFA模块(2):解读 def rwalk(X, axis=-1) - 刘磊的博文...
  4. Mdnice 简洁主题
  5. 使用 conda 和 Jupyter 创建你的自定义 R 包,转换笔记为幻灯片
  6. 科研文献|结肠直肠癌早期检测中跨群体微生物标记物的鉴定
  7. GraphPad Prism —— 简单又好用的生物数据统计绘图软件
  8. Error: Discrete value supplied to continuous scale
  9. pandas将dataframe中的年、月、日数据列合并成完整日期字符串、并使用to_datetime将字符串格式转化为日期格式
  10. R语言基于日期范围筛选数据实战(Subset by a Date Range):日期范围之内的数据、日期范围之外的数据、日期之后的数据、日期之前的数据