ResNet深度残差网络
ResNet
论文:“Deep Residual Learning for Image Recognition”
面临的问题
ResNet解决的是深度神经网络的“退化”(degradation)问题。对于卷积神经网络,网络的深度对于最终网络的表现性能至关重要,从vgg、GoogLeNet等网络就可以看出。然而随着网络层数的加深,会出现许多问题:梯度消失、梯度爆炸、过拟合以及退化。梯度消失、梯度爆炸的问题通过权重初始化和引入Batch Normalization来解决。过拟合也可以通过引入dropout来解决。但是Batch Normalization和Dropout不能同时使用。
退化是指网络整体的性能下降,无论是在训练集还是在测试集上的水平都下降。
残差块(Residual Block)
设潜在需要学习到的映射为 H ( x ) H(x) H(x) 。对于一般的神经网络,都是让神经元 F ( x ) F(x) F(x) 去直接学习潜在的映射 H ( x ) H(x) H(x)。 而ResNet是让 F ( x ) F(x) F(x)去学习残差 H ( x ) − x H(x)-x H(x)−x 。用 F ( x ) + x F(x)+x F(x)+x 来拟合 H ( x ) H(x) H(x) 。
比如需要学习的潜在映射 H ( x ) H(x) H(x) 本身就是一个恒等映射(identity mapping),那么让 F ( x ) F(x) F(x) 学习残差优化得到0,比直接让 F ( x ) F(x) F(x) 学习恒等映射简单得多。
这样后面层的表现至少不会比之前层的差。
在具体实现上,使用的是上图的结构。 F ( x ) + x F(x)+x F(x)+x 构成的block成为Residual Block,即残差块。 一个残差块有两条路径, F ( x ) F(x) F(x) 和 x x x 。 x x x 是恒等映射,成为**“shortcut connections”**。 F ( x ) F(x) F(x) 路径拟合残差。两条路径的结果相加(element-wise addition)之后进行激活。shortcut connections没有需要学习的参数。用数学公式描述就是:
F ( x ) = W 2 σ ( W 1 x ) F(x)=W_2\sigma(W_1x) F(x)=W2σ(W1x)
两条路径相加时需要维度相同。如果 F ( x ) F(x) F(x) 这一路有下采样层导致维度不等,则可以给shortcut connections这一路进行线性变换
y = F ( x , { W i } ) + W s x y=F(x,\{W_i\})+W_sx y=F(x,{Wi})+Wsx
这里 W s W_s Ws 也可以用在维度相同时的情况,但"Identity Mapping in Deep Residual Networks"文中指出恒等映射效果最好。
实现
论文中对比了两种网络:Plain Network和Residual Network。
Plain Network
Plain Network主要仿照VGG网络设计,除了第一层,其他所有曾都使用最多 3 × 3 3\times3 3×3卷积,并且遵循两条简单的设计规则:
- 输入输出通道数相同的,卷积核数量与特征图的通道数相同。
- 当特征图的通道数减半时,卷积核数量翻倍。
直接通过将卷积层的 stride 设为2来进行下采样,并且结束时使用全局均值池化(GAP)层加1000的全连接层最后跟随一个softmax层。
这个Plain Network总共有34层,但只有VGG-19运算量的18%。
在每个卷积层之后,激活之前使用BN层。
Residual Network
在Plain Network的基础上加入shortcut connections。图中实线表示的是两条路维度相等。虚线表示的是两条路维度不相等。对于不相等的情况有两种方法:
- 将多的通道置零,直接相加
- 使用 1 × 1 1\times1 1×1 卷积进行升维
在每个卷积层之后,激活之前使用BN层。
在此之外,实验阶段还训练了一个18层的网络。
实验
使用ImageNet数据集对18层、34层、ResNet-34进行训练,发现34层网络无论是训练误差还是测试误差都高于18层的网络。
在给34层的网络加上残差的 shortcut connections之后,34层模型的效果则会优于18层的网络。(升维时使用zero padding)
除此之外,还发现了残差的结构可以加快收敛速度。
结论:
- 带残差的比不带残差的网络效果好
- 带残差的深度网络比浅层网络效果好
- 带残差可以加快收敛速度
- 使用 1 × 1 1\times1 1×1 卷积效果比zero padding效果好,但参数多
对于更深层的残差网络,为了减少计算量,可以改用 Bottleneck Architectures ,如下图所示
类似于GoogLeNet的Inception结构,在 3 × 3 3\times3 3×3 卷积前后使用 1 × 1 1\times1 1×1 卷积进行降维和升维。
ResNet-50(升维时projection)、ResNet-101、ResNet-152都使用了Bottleneck Architectures。对于152层的网络,尽管层数增加了很多,但是计算量仍然小于 VGG-16/19。
层数计算时只算带学习参数的层
ResNet深度残差网络相关推荐
- 详解ResNet(深度残差网络)
引言 深度残差网络(Deep residual network, ResNet)的提出是CNN图像史上的一件里程碑事件,让我们先看一下ResNet在ILSVRC和COCO 2015上的战绩: ResN ...
- 【PyTorch】Resnet/深度残差网络
1 模型描述 深度残差网络(Resnet)是由来自Microsoft Research的4位学者(Kaiming He等人)提出的卷积神经网络,在2015年的ImageNet大规模视觉识别竞赛(Ima ...
- 7 Resnet深度残差网络实现102种花卉分类
Resnet(Deep residual network, ResNet),深度残差神经网络,卷积神经网络历史在具有划时代意义的神经网络.与Alexnet和VGG不同的是,网络结构上就有很大的改变,在 ...
- ResNet(深度残差网络)
参考:同济子豪兄
- 42_ResNet (深度残差网络)---学习笔记
1.39.ResNet (深度残差网络) Why call Residual # -*- coding: UTF-8 -*-import torch.nn as nn import torch.nn. ...
- 【深度学习之ResNet】——深度残差网络—ResNet总结
目录 论文名称:Deep Residual Learning for Image Recognition 摘要: 1.引言 2.为什么会提出ResNet残差网络呢? 3.深度残差网络结构学习(Deep ...
- 深度残差网络ResNet解析
ResNet在2015年被提出,在ImageNet比赛classification任务上获得第一名,因为它"简单与实用"并存,之后很多方法都建立在ResNet50或者ResNet1 ...
- dlibdotnet 人脸相似度源代码_使用dlib中的深度残差网络(ResNet)实现实时人脸识别 - supersayajin - 博客园...
opencv中提供的基于haar特征级联进行人脸检测的方法效果非常不好,本文使用dlib中提供的人脸检测方法(使用HOG特征或卷积神经网方法),并使用提供的深度残差网络(ResNet)实现实时人脸识别 ...
- 深度残差网络(ResNet)详解与实现(tensorflow2.x)
深度残差网络(ResNet)详解与实现(tensorflow2.x) ResNet原理 ResNet实现 模型创建 数据加载 模型编译 模型训练 测试模型 训练过程 ResNet原理 深层网络在学习任 ...
最新文章
- 陈怡然团队最新研究:用复数神经网络提高梯度正则化准确度 | ICML 2021
- 【错误记录】Android Studio 编译报错 ( Cannot use connection to Gradle distribution . as it has been stopped. )
- ThinkPad系列笔记本待机恢复后,双击我的电脑始终运行而无法打开
- 单片机四位数加减计算机程序,51单片机简易计算器程序 实现数字的加减乘除运算...
- Linux下安装-配置-mysql-5.7.13
- 去哪儿-14-vuex_localstorage
- git之提交本地代码到远端指定仓库
- 【NOI 2001】食物链(种类并查集)
- windows freeSSHd搭建SFtp服务器
- 登录注册页面html模版
- 这款打怪升级的小游戏,7 年前出生于 GitHub 社区,如今在谷歌商店有 8 万人打了满分...
- mac打不开磁盘映像资源忙
- 从unity3d官网下载教程
- UiPath中文教程PDF
- 三国志2017攻略 服务器维护,三国志2017新手攻略少走弯路
- C++——打印乘法口诀表
- 全文检索服务 _ ElasticSearch
- 关掉win10电脑hyper-v虚拟机方法
- GBase 8c的易维护性
- 17年电赛综合测评——四分频电路