关于深度残差网络(Deep residual network, ResNet)

题外话:

From 《白话深度学习与TensorFlow》

深度残差网络:

深度残差网络的设计就是为了克服这种由于网络深度加深而产生的学习效率变低,准确率无法有效提升的问题(也称为网络退化)。

甚至在一些场景下,网络层数的增加反而会降低正确率。这种本质问题是由于出现了信息丢失而产生的过拟合问题(overfitting,所建的机器学习模型或者是深度学习模型在训练样本中表现的过于优越,导致在验证数据集及测试数据集中表现不佳,即为了得到一致假设而使假设变得过度复杂)。解决思路是尝试着使他们引入这些刺激的差异性和解决泛化能力为主。

Residual net(残差网络):

将前若干层的数据输出直接跳过多层而引入到后面数据层的输入部分。

后面的任何一层向量的内容会有一部分由其前面的某一层线性贡献。

进入正文:

ResNet在2015年被提出,在ImageNet比赛classification任务上获得第一名,因为它“简单与实用”并存,之后很多方法都建立在ResNet50或者ResNet101的基础上完成的,检测,分割,识别等领域都纷纷使用ResNet,Alpha zero也使用了ResNet,所以可见ResNet确实很好用。 (https://blog.csdn.net/lanran2/article/details/79057994 )

ResNet的意义:

随着网络的加深,出现了训练集准确率下降的现象,我们可以确定这不是由于Overfit过拟合造成的(过拟合的情况训练集应该准确率很高);所以作者针对这个问题提出了一种全新的网络,叫深度残差网络,它允许网络尽可能的加深。

残差是指什么?

其中ResNet提出了两种mapping:一种是identity mapping,指的就是上图中”弯弯的曲线”,另一种residual mapping,指的就是除了”弯弯的曲线“那部分,所以最后的输出是 y=F(x)+x

identity mapping顾名思义,就是指本身,也就是公式中的x,而residual mapping指的是“差”,也就是y?x,所以残差指的就是F(x)部分。

理论上,对于“随着网络加深,准确率下降”的问题,Resnet提供了两种选择方式,也就是identity mapping和residual mapping,如果网络已经到达最优,继续加深网络,residual mapping将被push为0,只剩下identity mapping,这样理论上网络一直处于最优状态了,网络的性能也就不会随着深度增加而降低了。
ResNet的结构:

它使用了一种连接方式叫做“shortcut connection”,顾名思义,shortcut就是“抄近道”的意思

这是文章里面的图,我们可以看到一个“弯弯的弧线“这个就是所谓的”shortcut connection“,也是文中提到identity mapping,这张图也诠释了ResNet的真谛,当然大家可以放心,真正在使用的ResNet模块并不是这么单一,文章中就提出了两种方式:

这两种结构分别针对ResNet34(左图)和ResNet50/101/152(右图),一般称整个结构为一个”building block“。其中右图又称为”bottleneck design”,目的一目了然,就是为了降低参数的数目,第一个1x1的卷积把256维channel降到64维,然后在最后通过1x1卷积恢复,整体上用的参数数目:1x1x256x64 + 3x3x64x64 + 1x1x64x256 = 69632,而不使用bottleneck的话就是两个3x3x256的卷积,参数数目: 3x3x256x256x2 = 1179648,差了16.94倍。
对于常规ResNet,可以用于34层或者更少的网络中,对于Bottleneck Design的ResNet通常用于更深的如101这样的网络中,目的是减少计算和参数量(实用目的)。
---------------------
ResNet50和ResNet101

这里把ResNet50和ResNet101特别提出,主要因为它们的出镜率很高,所以需要做特别的说明。给出了它们具体的结构:

表2,Resnet不同的结构
首先我们看一下表2,上面一共提出了5中深度的ResNet,分别是18,34,50,101和152,首先看表2最左侧,我们发现所有的网络都分成5部分,分别是:conv1,conv2_x,conv3_x,conv4_x,conv5_x,之后的其他论文也会专门用这个称呼指代ResNet50或者101的每部分。
拿101-layer那列,我们先看看101-layer是不是真的是101层网络,首先有个输入7x7x64的卷积,然后经过3 + 4 + 23 + 3 = 33个building block,每个block为3层,所以有33 x 3 = 99层,最后有个fc层(用于分类),所以1 + 99 + 1 = 101层,确实有101层网络;
注:101层网络仅仅指卷积或者全连接层,而激活层或者Pooling层并没有计算在内;
这里我们关注50-layer和101-layer这两列,可以发现,它们唯一的不同在于conv4_x,ResNet50有6个block,而ResNet101有23个block,差了17个block,也就是17 x 3 = 51层。
---------------------

基于ResNet101的Faster RCNN

实际的基于ResNet101的Faster RCNN的结构图:

上图展示了整个Faster RCNN的架构,其中蓝色的部分为ResNet101,可以发现conv4_x的最后的输出为RPN和RoI Pooling共享的部分,而conv5_x(共9层网络)都作用于RoI Pooling之后的一堆特征图(14 x 14 x 1024),特征图的大小维度也刚好符合原本的ResNet101中conv5_x的输入;

         最后大家一定要记得最后要接一个average pooling,得到2048维特征,分别用于分类和框回归。
---------------------
残差学习(Residual learning)

https://www.baidu.com/link?url=jBH2T1Ak_TMZcIARecOqq_o59ryUz98O3k0GT57LyvJvp26c_5A582Cn3YXHr7c1wMGVo6iQFIvRJAVXDwkk8a&wd=&eqid=a7c2e37c00019a2c000000055bcbf698

网络越深,越容易出现梯度消失,导致模型训练难度变大,出现“退化”现象

退化:当模型的深度增加时,输出的错误率反而提高了

http://www.myzaker.com/article/5997f9f51bc8e01202000015/

原文地址:https://www.cnblogs.com/Ann21/p/9825602.html

时间: 2024-11-05 19:02:07

关于深度残差网络(Deep residual network, ResNet)的相关文章

深度残差网(deep residual networks)的训练过程

这里介绍一种深度残差网(deep residual networks)的训练过程: 1.通过下面的地址下载基于python的训练代码: https://github.com/dnlcrl/deep-residual-networks-pyfunt 2.这些训练代码需要和pydataset包.下面介绍这两个包的安装方法. (1)pyfunt需要安装. 用命令:pip install git+git://github.com/dnlcrl/PyFunt.git  进行下载安计.        安装时

深度残差网络(DRN)ResNet网络原理

一说起“深度学习”,自然就联想到它非常显著的特点“深.深.深”(重要的事说三遍),通过很深层次的网络实现准确率非常高的图像识别.语音识别等能力.因此,我们自然很容易就想到:深的网络一般会比浅的网络效果好,如果要进一步地提升模型的准确率,最直接的方法就是把网络设计得越深越好,这样模型的准确率也就会越来越准确. 那现实是这样吗?先看几个经典的图像识别深度学习模型: 这几个模型都是在世界顶级比赛中获奖的著名模型,然而,一看这些模型的网络层次数量,似乎让人很失望,少则5层,多的也就22层而已,这些世界级

Keras快速搭建深度残差收缩网络(及深度残差网络)

从本质上讲,深度残差收缩网络属于卷积神经网络,是深度残差网络(deep residual network, ResNet)的一个变种.它的核心思想在于,在深度学习进行特征学习的过程中,剔除冗余信息是非常重要的:软阈值化是一种非常灵活的.删除冗余信息的方式. 1.深度残差网络 首先,在介绍深度残差收缩网络的时候,经常需要从深度残差网络开始讲起.下图展示了深度残差网络的基本模块,包括一些非线性层(残差路径)和一个跨层的恒等连接.恒等连接是深度残差网络的核心,是其优异性能的一个保障. 2.深度残差收缩

CNN卷积神经网络_深度残差网络 ResNet——解决神经网络过深反而引起误差增加的根本问题

from:https://blog.csdn.net/diamonjoy_zone/article/details/70904212 环境:Win8.1 TensorFlow1.0.1 软件:Anaconda3 (集成Python3及开发环境) TensorFlow安装:pip install tensorflow (CPU版) pip install tensorflow-gpu (GPU版) TFLearn安装:pip install tflearn 参考: Deep Residual Le

Dual Path Networks(DPN)——一种结合了ResNet和DenseNet优势的新型卷积网络结构。深度残差网络通过残差旁支通路再利用特征,但残差通道不善于探索新特征。密集连接网络通过密集连接通路探索新特征,但有高冗余度。

如何评价Dual Path Networks(DPN)? 论文链接:https://arxiv.org/pdf/1707.01629v1.pdf在ImagNet-1k数据集上,浅DPN超过了最好的ResNeXt-101(64×4d),具有26%更小的模型尺寸,25%的计算成本和8%的更低的内存消耗 5 个回答 xiaozhi CV.ML.DL 1.针对视觉识别任务的"网络工程"一直是研究的重点,其重在设计更为高效的网络拓扑结构,一方面考虑更好的特征表示学习,另一方面尽可能减少计算复杂度

残差网络(Residual Networks, ResNets)

1. 什么是残差(residual)? "残差在数理统计中是指实际观察值与估计值(拟合值)之间的差.""如果回归模型正确的话, 我们可以将残差看作误差的观测值." 更准确地,假设我们想要找一个 $x$,使得 $f(x) = b$,给定一个 $x$ 的估计值 $x_0$,残差(residual)就是 $b-f(x_0)$,同时,误差就是 $x-x_0$. 即使 $x$ 不知道,我们仍然可以计算残差,只是不能计算误差罢了. 2. 什么是残差网络(Residual Net

Deep Residual Network

最近在看的一篇论文中使用来了残差网络的结构,所以来了解一下残差网络的工作原理.残差网络的深度可以达到令人发指的深度,具体有多牛逼我也不多说了. 背景 大家都知道更深的网络能够产生更好的效果,但是训练一个很深的网络却一直是一个难题,主要原因有如下几点:梯度消失.尺度不均匀的初始化.为了解决这些问题,许多研究者也提出了很多种解决办法,但是并没有很好的解决问题.何恺明发现了下面这种状况: 随着网络深度的增加,网络性能反而下降,而且不仅仅是测试误差增大,训练误差也更大,说明这并不是由过拟合导致的.这种现

深度复数网络 Deep Complex Networks

转自:https://www.jiqizhixin.com/articles/7b1646c4-f9ae-4d5f-aa38-a6e5b42ec475  (如有版权问题,请联系本人) 目前绝大多数深度学习模型中的数学都是实数值的,近日,蒙特利尔大学.加拿大国家科学院-能源/材料/通信研究中心(INRS-EMT).微软 Maluuba.Element AI 的多名研究者(其中包括 CIFAR Senior Fellow Yoshua Bengio)在 arXiv 上发布了一篇 NIPS 2017(

深度残差收缩网络:(五)实验验证

实验部分将所提出的两种深度残差收缩网络,即“通道之间共享阈值的深度残差收缩网络(Deep Residual Shrinkage Networks with Channel-shared Thresholds,简称DRSN-CS)”,和“逐通道不同阈值的深度残差收缩网络(Deep Residual Shrinkage Networks with Channel-wise Thresholds,简称DRSN-CW)”,与传统的卷积神经网络(Convolutional Neural Networks,