本文主要是回顾一下一些经典的CNN网络的主要贡献。

论文传送门

【google团队】

  1. [2014.09]inception v1: https://arxiv.org/pdf/1409.4842.pdf
  2. [2015.02]inception v2: https://arxiv.org/pdf/1502.03167.pdf
  3. [2015.12]inception v3: https://arxiv.org/pdf/1512.00567.pdf
  4. [2016.02]inception v4: https://arxiv.org/pdf/1602.07261.pdf

【microsoft】

  1. [2015.12]resnet : https://arxiv.org/pdf/1512.03385v1.pdf

【Facebook】

  1. [2016.11]resnext : https://arxiv.org/pdf/1611.05431.pdf

【CORNELL & Tsinghua & Facebook】

  1. [2016.08]DenseNet : https://arxiv.org/pdf/1608.06993.pdf

【momenta】

  1. [2017.09]SEnet : https://arxiv.org/pdf/1709.01507.pdf

Inception v1

【主要贡献】

在传统网络中,神经网络都是通过增加深度来扩展的。Inception结构的最大特点是从网络的宽度上进行改进,通过concat操作将经过不同kernel尺度处理的feature map进行拼接。

【其他贡献】

使用global average pooling代替全连接层,减小参数数量;使用1*1卷积层来缩减通道数量

Inception v2

【主要贡献】

首次提出BN层,减少Internal Covariate Shift。

Inception v3

【主要贡献】

提出卷积分解,用两个3*3卷积核代替5*5的卷积,用三个3*3卷积核代替7*7卷积核,后来提出用1*n,n*1的卷积核代替n*n

Inception v4

【主要贡献】

基于inception v3的基础上,引入残差结构,提出了inception-resnet-v1和inception-resnet-v2,并修改inception模块提出了inception v4结构。

【值得一提的是】

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

Inception v4的结构

感觉到Inception v4,结构就有点诡异而复杂了,有点魔改的味道。

Inception-resnet-v1

就是有一个残差结构,其他部分也是跟inception v4类似。

Inception-resnet-v2

与incpetion-resnet-v1差别不大,在通道数上做了修改。

实验结果对比

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

【个人建议把重点放在inceptionv1-v3上,对v4了解一下即可】

Resnet

resnet提出是在Inception v3和inception v4中间,这样时间线就连上了。

【主要贡献】

残差结构提出解决了梯度消失的问题。

左边是基本的结构,右边是使用1*1卷积核来降低参数。

下图是VGG网络,plain网络和残差网络的对比,重点就是体现残差网络的残差结构的跳跃的感觉。

ResNext

增加网络的深度depth是改进网络的一种思路,GoogLeNet增加网络的宽度width是另一种思路,ResNext提出了一种新的方式叫做cardinality,基数。

cardinality=32的时候,就是分成32组进行卷积。上图中右边的模块,就是把输入feature map卷积从256通道压缩到4通道,然后再对4通道的特征图进行3*3的卷积。然后这个过程并行重复32次,最后再把所有的结果相加,然后再根据残差结构加上输入的特征图。

【值得一提的是】

下面的三种变体完全等价:

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

【因为组卷积的放在在pytorch等库函数中支持,所以使用组卷积的方法来实现resnext就非常的方便,就改一下参数就可以了。】

【实验结果来说,增加Cardinality的效果是有的,和resnet50/101相比,参数量相近的情况下,resnext的准确率有所提升。】

【个人感想:这个resnext我觉得就是一个提升网络模型的trick,在建立模型的时候,baseline跑完了,可以可以试一试分组卷积,看看是否会有提升】

DenseNet

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有正则化的效果,因此对于过拟合有一定的抑制作用,博主认为是因为参数减少了,所以过拟合现象减轻。

后来引入了dense block来解决特征图尺寸不一致的问题:



可以看出,只有在dense block内才会网络层全连接的这种结构,彼此dense block并无连接。

SENet

【主要贡献】

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

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

SE是这个结构的两个步骤,squeeze和excitation。

squeeze挤压

对通道进行挤压,也就是全局平均池化,将shape为[C,H,W]的特征图变成[C,1,1]。

Excitation激励

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

\(s = \sigma(W_2\delta(W_1z))\)

这个s就是特征图每一个通道的权重值。

之后我们把这个s和每一个通道相乘,就可以得到权衡过通道重要性的特征图了。个人经过这个SENet,效果真的不错。

下面试SENet block:

可以看到,这个模块是放在Inception模块之后的,所以在自己的网络中,也可以加入一个SENet组件进去。SE block是一个寄生在其他网络结构上的一个性能提升trick。

下面是残差se block,增加了残差结构:

【性能对比】

论文中,作者浮现了各大主流网络模型,然后加入了SE模块,发现性能均有提升!



参考博文:

  1. https://www.cnblogs.com/shouhuxianjian/p/7786760.html
  2. https://blog.csdn.net/loveliuzz/article/details/79135583
  3. https://blog.csdn.net/u014380165/article/details/71667916
  4. https://blog.csdn.net/xjz18298268521/article/details/79078551
  5. http://www.sohu.com/a/161633191_465975





大汇总 | 一文学会八篇经典CNN论文的更多相关文章

  1. 秒杀多线程第八篇 经典线程同步 信号量Semaphore

    阅读本篇之前推荐阅读以下姊妹篇: <秒杀多线程第四篇一个经典的多线程同步问题> <且不超过最大资源数量. 第三个參数能够用来传出先前的资源计数,设为NULL表示不须要传出. 注意:当 ...

  2. 转---秒杀多线程第八篇 经典线程同步 信号量Semaphore

    阅读本篇之前推荐阅读以下姊妹篇: <秒杀多线程第四篇一个经典的多线程同步问题> <秒杀多线程第五篇经典线程同步关键段CS> <秒杀多线程第六篇经典线程同步事件Event& ...

  3. 小白经典CNN论文复现系列(一):LeNet1989

    小白的经典CNN复现系列(一):LeNet-1989 之前的浙大AI作业的那个系列,因为后面的NLP的东西我最近大概是不会接触到,所以我们先换一个系列开始更新博客,就是现在这个经典的CNN复现啦(。・ ...

  4. 秒杀多线程第八篇 经典线程同步 信号量Semaphore (续)

    java semaphore实现: Semaphore当前在多线程环境下被扩放使用,操作系统的信号量是个很重要的概念,在进程控制方面都有应用.Java 并发库 的Semaphore 可以很轻松完成信号 ...

  5. 大礼包!ANDROID内存优化(大汇总)

    写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上把网上搜集的各种内存零散知识点进行汇总.挑选.简化后整理而成. 所以我将本文定义为一个工具类的文章,如果你在A ...

  6. 秒杀多线程第六篇 经典线程同步 事件Event

    原文地址:http://blog.csdn.net/morewindows/article/details/7445233 上一篇中使用关键段来解决经典的多线程同步互斥问题,由于关键段的“线程所有权” ...

  7. 转--- 秒杀多线程第六篇 经典线程同步 事件Event

    阅读本篇之前推荐阅读以下姊妹篇: <秒杀多线程第四篇 一个经典的多线程同步问题> <秒杀多线程第五篇 经典线程同步关键段CS> 上一篇中使用关键段来解决经典的多线程同步互斥问题 ...

  8. ANDROID内存优化(大汇总——全)

    写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上把网上搜集的各种内存零散知识点进行汇总.挑选.简化后整理而成. 所以我将本文定义为一个工具类的文章,如果你在A ...

  9. ANDROID内存优化(大汇总——中)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上 ...

随机推荐

  1. linux下将多个ts文件合并为一个MP4文件

    1. 安装ffmpeg工具 sudo apt install ffmpeg 2. 确保所有ts文件无损坏后,确保当前目录(即存放ts文件的目录)无txt文件及mp4文件,在存放ts文件的目录下建立te ...

  2. 使用Fiddler模拟Post请求

    做了一个动态的GIF来做演示,应该更加直观些. (完)

  3. Linux必须要掌握的命令

    Linux必须要掌握的命令 文件目录操作命令 ls 命令格式:ls [选项] [目录名] 命令功能:列出目标目录中所有的子目录和文件 常用参数:-a,-l,-R, 例1:列出/home/peidach ...

  4. CSS中的一些细节

    一.塌陷 1.当position设置为:absolute或者fixed时,元素的display会转换为block.(设置float也会产生这样的效应)2.正常情况下,div会被内容撑开,但是如果设置了 ...

  5. JavaGUI练习 - 正交测试用例生成小工具

    正交表生成小工具 说明 小工具的适用对象主要是测试人员,他们日常工作中手动设计大量测试用例,工作繁杂甚至还存在覆盖不全面等问题. 为了提高他们的测试效率,该小工具可以通过输入一组多因素多水平的数据,然 ...

  6. 哎,老了之display-box

    哎,不想吐槽自己了,表示已远远落后,从今天起开始恶补吧,来一个实例 <html> <head> <meta name="generator" cont ...

  7. CentOS7下安装和配置SVN

    1. 由于是在CentOS7最小化安装的操作系统环境安装SVN,我们首先排除一些环境因素.在此首先关闭了防火墙,安装了vim文本编辑工具.   2. 使用yum install -y subversi ...

  8. PE文件格式详解(七)

    PE文件格式详解(七)   Ox00 前言 前面好几篇在讲输入表,今天要讲的是输出表和地址的是地址重定位.有了前面的基础,其实对于怎么找输出表地址重定位的表已经非常熟悉了.   0x01 输出表结构 ...

  9. Python List comprehension列表推导式

    http://blog.chinaunix.net/uid-28631822-id-3488324.html 具体内容需要进一步学习

  10. java的自定义配置文件统一读取配置类示例

    前言:在我们的日常编程中难免会有些我们自定义的配置,虽然Java中提供了很多的读取配置文件的方法,但是当我们需要修改配置文件的key的时候,就会发现太过散乱了,工作量也会很大,涉及的文件还很多,一不小 ...