经典卷积神经网络总结:Inception v1\v2\v3\v4、ResNet、ResNext、DenseNet、SENet等

本文主要是介绍经典卷积神经网络总结:Inception v1\v2\v3\v4、ResNet、ResNext、DenseNet、SENet等,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


本文为总结今年来的卷积神经网络,主要按照时间线和方法类似程度的顺序总结。

开篇先前说下概要,然后展开详细介绍,主要是在densenet、resnext、senet这三个网络上介绍,前面的一系列网络大概讲一下思想。

1、时间轴

时间团队论文
2014.09googleInception v1
2015.02googleInception v2
2015.12googleInception v3
2016.02googleInception v4
时间团队论文
2015.12microsoftResNet
2016.11UCSD & FacebookResNext
时间团队论文
2016.08CORNELL & Tsinghua & FacebookDenseNet
2017.09momentaSENet

2、关于模型改进的一些个人总结

  1. 扩展网络深度,如resnet结构;
  2. 扩展网络宽度,如inception结构;
  3. 扩展cardinality,如resnext结构;
  4. 使用3x3卷积核替换5x5\7x7卷积核;
  5. 分解卷积核,nxn->1xn,nx1,减少模型参数;
  6. 上面方法进行排列组合;
  7. attention结构,用在batch、channel、pixel上;

Inception系列

1、Inception v1

论文链接:https://arxiv.org/pdf/1409.4842.pdf

1.1 核心思想

传统网络都是通过层的叠加,增加网络深度,这篇论文提出从网络宽度上改进,通过concat操作,将经过不同kernel尺度的feature map进行concat,增加网络对尺度的适应性、增加网络的宽度,提高了网络内部资源的利用率。

inception block结构如下图所示:

这里写图片描述

网络中除了添加inception block之外,还使用global average pooling代替了全连接层,可以减少参数量,保留显著特征,降低特征维度。

1.2 网络结构

这里写图片描述

1.3 实验结果

这里写图片描述

参考链接:

2、Inception v2

论文链接:https://arxiv.org/pdf/1502.03167.pdf

1.1 核心思想

首次提出BN层,减少Internal Covariate Shift,具体BN层的解释可以参考以前的博客,将每一次一个batch中的数据分布控制在均值为0,方差为1。

1.2 网络结构

就是添加了BN层

1.3 实验结果

这里写图片描述

参考链接:

3、Inception v3

论文链接:https://arxiv.org/pdf/1512.00567.pdf

1.1 核心思想

1、卷积核进行分解:使用两个3x3卷积核代替5x5卷积核,三个3x3卷积核代替7x7卷积核,减少参数量,加快计算。(两个3x3与一个5x5作用是一样的,其感受野都是5)

这里写图片描述

这里写图片描述

2、进一步将nxn卷积核分解为1xn和nx1卷积核;

这里写图片描述

这里写图片描述

3、减少feature map的size,增加channel数;

1.2 网络结构

这里写图片描述

1.3 实验结果

这里写图片描述

参考链接:https://www.cnblogs.com/eniac1946/p/8669937.html

4、Inception v4

论文链接:https://arxiv.org/pdf/1602.07261.pdf

1.1 核心思想

基于inception v3的基础上,引入残差结构,提出了inception-resnet-v1和inception-resnet-v2,并修改inception模块提出了inception v4结构。基于inception v4的网络实验发现在不引入残差结构的基础上也能达到和inception-resnet-v2结构相似的结果,从而认为何凯明等人认为的:“要想得到深度卷积网络必须使用残差结构”这一观点是不完全正确的。

1.2 网络结构

这里写图片描述

1.2.1 Inception-v4

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

1.2.2 Inception-resnet-v1

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

1.2.3 Inception-resnet-v2

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

1.3 实验结果

  • 在inception-resnet-v1与inception v3的对比中,inception-resnet-v1虽然训练速度更快,不过最后结果有那么一丢丢的差于inception v3;
  • 在inception-resnet-v2与inception v4的对比中,inception-resnet-v2的训练速度更块,而且结果比inception v4也更好一点。所以最后胜出的就是inception-resnet-v2。

这里写图片描述

参考链接:

1、https://www.cnblogs.com/shouhuxianjian/p/7786760.html

2、https://blog.csdn.net/loveliuzz/article/details/79135583

ResNet系列

5、ResNet

论文链接:https://arxiv.org/pdf/1512.03385v1.pdf

1.1 核心思想

第一次提出残差结构,主要解决两个问题

  • 梯度消失
  • 随着网络深度增加,性能没有提升反而有所下降

如下图,本来要学习H(x),现在转换为F(x)+x,二者效果相同,但是优化难度下降,并且因为多了一个x,使得求导时总有1,避免了梯度消失问题。

这里写图片描述

进一步拓展残差结构:

这里写图片描述

1.2 网络结构

1、首先是vgg网络、plain 网络和残差网络的结构比较;

这里写图片描述
这里写图片描述

2、本文中的网络结构

这里写图片描述

1.3 实验结果

这里写图片描述

参考链接:

6、ResNext

论文链接::https://arxiv.org/pdf/1611.05431.pdf

6.1 核心思想

主要是采用了VGG堆叠思想和Inception的split-transform-merge思想,在不增加参数复杂度的前提下提高准确率。

对比于之前提高准确率的方法,大都是在depth和width上改进,本文提出一种新的方式,命名为cardinality,基数。即得到上一次feature map后,假设cardinality=32,则取32组1x1卷积核,每组4个,分别进行卷积,得到32组feature map,然后再分别进行3x3卷积,最后再通过1x1卷积把通道数还原回来。

具体残差结构如下所示:

这里写图片描述

上图右图中可以进行变体,下图中这三种结构是完全相等的,

  • 图A就是上面所说的结构;
  • 图B是在3x3卷积后进行了concat,然后再通过统一的1x1卷积操作,这个有点类似于inception-resnet;
  • C图结构更简洁且速度更快。采用组卷积。采用32个group,每个group的输入输出的通道数都是4;

这里写图片描述

6.2 网络结构

1、网络结构

这里写图片描述

resnext与resnet50/101参数量差不多,但是准确率却提升了。

6.3 实验结果

增加Cardinality和增加深度或宽度的对比实验,证明增加Cardinality确实效果比较好。

这里写图片描述

参考链接:https://blog.csdn.net/u014380165/article/details/71667916

其他

7、DenseNet

论文链接:https://arxiv.org/pdf/1608.06993.pdf

7.1 核心思想

densenet紧接着在resnet之后提出,结合了resnet的思想。网络改进除了像resnet和inception在深度和宽度上做文章外,densenet通过利用feature来减少参数的同时提高效果,对feature进行有效利用并加强feature的传递。

主要思想是将每一层都与后面的层连接起来,如果一个网络中有L层,那么会有L(L+1)/2个连接,具体连接如下图所示:

这里写图片描述

引用参考链接中的一段话:

DenseNet的一个优点是网络更窄,参数更少,很大一部分原因得益于这种dense block的设计,后面有提到在dense block中每个卷积层的输出feature map的数量都很小(小于100),而不是像其他网络一样动不动就几百上千的宽度。同时这种连接方式使得特征和梯度的传递更加有效,网络也就更加容易训练。原文的一句话非常喜欢:Each layer has direct access to the gradients from the loss function and the original input signal, leading to an implicit deep supervision.直接解释了为什么这个网络的效果会很好。前面提到过梯度消失问题在网络深度越深的时候越容易出现,原因就是输入信息和梯度信息在很多层之间传递导致的,而现在这种dense connection相当于每一层都直接连接input和loss,因此就可以减轻梯度消失现象,这样更深网络不是问题。另外作者还观察到这种dense connection有正则化的效果,因此对于过拟合有一定的抑制作用,博主认为是因为参数减少了(后面会介绍为什么参数会减少),所以过拟合现象减轻。

给出resnet和resnext两个结构的公式比较:

resnet:前一层经过非线性变换后与前一层相加得到本层的结果。

这里写图片描述

densenet:前n层所有的结果进行concat,然后再进行非线性转换。

这里写图片描述

为了保证feature map的channel不会太大,而且size要保持统一才能concat,将上述作为一个dense block,每个block之间通过池化层相连。

7.2 网络结构

1、引入dense block后的结构图

这里写图片描述

2、网络结构,图中k表示每个dense block中每层输出的feature map个数

这里写图片描述

3、bottleneck layer和translation layer

此外,在dense block中引入bottleneck layer,即卷积3x3前增加1x1卷积,以此来减少feature map数量。结构为:

BN -> Relu -> Conv 1x1 -> BN -> Relu -> Conv 3x3

由于feature map通道数量可能还是很大,在每个dense block之间,增加了translation layer,通过1x1卷积核来实现。

BN -> Relu -> Conv 1x1 -> Pooling

7.3 实验结果

这里写图片描述

参考链接:https://blog.csdn.net/u014380165/article/details/75142664

8、SENet

论文链接:https://arxiv.org/pdf/1709.01507.pdf

8.1 核心思想

从特征通道之间的关系入手,对特征通道之间的关系进行建模表示,根据重要程度增强有用的特征、抑制没有用的特征。

个人感觉像是在通道上做权重,类似于通道上的attention。

主要分为两个过程,如下图所示,squeeze挤压和excitation激励。

这里写图片描述

8.1.1 Squeeze

如下图所示,对通道进行了挤压,即通过全局平均池化,将shape为[H, W, C]的feature map变为[1, 1, C]。

顺着空间维度来进行特征压缩,将每个二维的特征通道变成一个实数,这个实数某种程度上具有全局的感受野,并且输出的维度和输入的特征通道数相匹配。它表征着在特征通道上响应的全局分布,而且使得靠近输入的层也可以获得全局的感受野,这一点在很多任务中都是非常有用的。

这里写图片描述

8.1.2 Excitation

得到挤压后的feature map后,进行激励,使用sigmoid函数。。

首先通过一个全连接层进行降维,即如下公式中的W1z,然后经过relu激活函数。即δ(W1z),再经过全连接进行升维,即W2(δ(W1z)),然后通过sigmoid进行权重激活。

它是一个类似于循环神经网络中门的机制。通过参数 w 来为每个特征通道生成权重,其中参数 w 被学习用来显式地建模特征通道间的相关性。

这里写图片描述

8.1.3 Reweight

最后通过scale相乘,得到se block的结果。

将 Excitation 的输出的权重看做是进过特征选择后的每个特征通道的重要性,然后通过乘法逐通道加权到先前的特征上,完成在通道维度上的对原始特征的重标定。

这里写图片描述

8.1.4 se block

block结构图如下所示:

这里写图片描述

进一步,变为残差se block,

这里写图片描述

8.2 网络结构

整个网路结构如下图所示:分别为resnet-50,se-resnet-50,se-resnext-50;

这里写图片描述

8.3 实验结果

在主流网络上进行了复现,并加了se block结构后进行了比较。

这里写图片描述

参考链接:

1、https://blog.csdn.net/xjz18298268521/article/details/79078551

2、http://www.sohu.com/a/161633191_465975

这篇关于经典卷积神经网络总结:Inception v1\v2\v3\v4、ResNet、ResNext、DenseNet、SENet等的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/168930

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

二分最大匹配总结

HDU 2444  黑白染色 ,二分图判定 const int maxn = 208 ;vector<int> g[maxn] ;int n ;bool vis[maxn] ;int match[maxn] ;;int color[maxn] ;int setcolor(int u , int c){color[u] = c ;for(vector<int>::iter

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

状态dp总结

zoj 3631  N 个数中选若干数和(只能选一次)<=M 的最大值 const int Max_N = 38 ;int a[1<<16] , b[1<<16] , x[Max_N] , e[Max_N] ;void GetNum(int g[] , int n , int s[] , int &m){ int i , j , t ;m = 0 ;for(i = 0 ;

go基础知识归纳总结

无缓冲的 channel 和有缓冲的 channel 的区别? 在 Go 语言中,channel 是用来在 goroutines 之间传递数据的主要机制。它们有两种类型:无缓冲的 channel 和有缓冲的 channel。 无缓冲的 channel 行为:无缓冲的 channel 是一种同步的通信方式,发送和接收必须同时发生。如果一个 goroutine 试图通过无缓冲 channel

9.8javaweb项目总结

1.主界面用户信息显示 登录成功后,将用户信息存储在记录在 localStorage中,然后进入界面之前通过js来渲染主界面 存储用户信息 将用户信息渲染在主界面上,并且头像设置跳转,到个人资料界面 这里数据库中还没有设置相关信息 2.模糊查找 检测输入框是否有变更,有的话调用方法,进行查找 发送检测请求,然后接收的时候设置最多显示四个类似的搜索结果

java面试常见问题之Hibernate总结

1  Hibernate的检索方式 Ø  导航对象图检索(根据已经加载的对象,导航到其他对象。) Ø  OID检索(按照对象的OID来检索对象。) Ø  HQL检索(使用面向对象的HQL查询语言。) Ø  QBC检索(使用QBC(Qurey By Criteria)API来检索对象。 QBC/QBE离线/在线) Ø  本地SQL检索(使用本地数据库的SQL查询语句。) 包括Hibern