文章《Rethinking the Inception Architecture for Computer Vision》

介绍

VGG与GoogLeNet相比更朴素,但计算量大。GoogLeNet中的Inception结构设计的目的是减少计算量和内存。GoogLeNet中只有5百万参数,是AlexNet的1/12,而VGG的参数是AlexNet的3倍。

如果增大Inception类型模型的容量,如果只是double滤波器组的数量,参数量和计算量将会增大4倍;在许多场景中,不允许这样设计。

下面讲解几个增大卷积网络的原则和优化方法。

通用设计原则

1.避免表示瓶颈,尤其是在网络的前面。前向传播网络可以看作一个有向无环图,从输入到输出。一般来说,representation size从输入到输出特征应该缓慢减小。理论上来说,不能仅仅通过维度得到信息,因为它已经丢弃了许多重要特征例如相关结构,维度只能代表信息的粗略估计。

2.高纬度特征在网络局部处理更加容易。在卷积神经网络中增加非线性可以解耦合特征,训练更快

3.空间聚合可以以低维度嵌入进行,这样不会影响representational power.例如,在进行大尺度卷积(3×3)时,在空间聚合前,先对输入进行降维,这样不会带来严重影响。我们猜测原因为:如果输出是为了空间聚合,那么临近单元的强相关性在降维过程中信息损失会很少。考虑到这些信号容易压缩,降维会加速学习过程

4.平衡宽度和深度。增加宽度或深度都会带来性能上的提升,两者同时增加带了并行提升,但是要考虑计算资源的合理分配。

分解大的卷积核

GoogLeNet性能优异很大程度在于使用了降维。降维可以看做卷积网络的因式分解。例如1×1卷积层后跟着3×3卷积层。在网络角度看,激活层的输出是高相关的;因此在聚合前进行降维,可以得到类似的局部表示性能。

这里考虑计算性能,我们探索其他形式的卷积因式分解。因为Inception结构是全卷积,每一个激活值对应的每一个权重,都对应一个乘法运算。因此减小计算量意味着减少参数。所以通过解耦和参数,可以加快训练。利用节省下来的计算和内存增加filter-bank大小,来提升网络性能。

分解为更小的卷积

大的卷积计算量更大,例如filter相同情况下,5×5卷积核比3×3卷积核计算量大25/9=2.78倍。5×5卷积核相比3×3卷积核有广阔“视野”,可以捕捉更多信息,单纯减小卷积核大小会造成信息损失。是否可以通过多层网络代替5×5卷积。把5×5网络看做全卷积,每个输出是卷积核在输入上滑动;可以通过2层3×3全卷积网络替换。如图所示。

原来的Inception结构:

使用2个3x3替换5x5后的Inception结构:

对于分解的卷积层,使用线性激活还是非线性激活,实验表明,非线性激活性能更好。

空间上分解为非对称卷积核

大于3×3的卷积层,都可以分解为连续的3×3的卷积层,那么是不是可以分解为更小的卷积核呢?实际上分解为非对称的更好,例如一个3×1卷积,后跟一个1×3卷积,相当于3×3卷积。如图:

两层结构计算量减少33%。而2×2卷积替代的话计算量仅仅减少11%

理论上,n×n卷积可以通过1×n->n×1卷积代替,随着n增大,能减少更多计算量。在实践中,前几层这样的分解效果并不好;但是在中等网络中,有着不错的性能(m×m的feature map m介于12到20之间)

使用辅助分类器

GoogLeNet引入了附加分类器,其目的是想把有效梯度传递回去,从而加快训练。我们发现辅助分类器扮演着regularizer的角色;因为当辅助分类器使用了batch-normalized或dropout时,主分类器效果会更好。

降低特征图大小

pooling层用来减小feature map大小,为了避免出现representation bottleneck,在使用pooling前常常增加feature map个数。例如k个d×d的feature map,pooling后为k个d/2×d/2.如果想要得到pooling后有2k个feature map,那么在pooling前面的卷积层卷积核个数应该有2k个。前者卷积计算量为2D^2k^2,而后者为2(d/2)^2k^2,是前者四分之一。这样在representation上会有瓶颈。可以使用另一种方法,降低更多计算量:使用2个模块P和C。P表示pooling,C表示卷积;它们stride都为2.如下图所示:

Inception-V2

我们提出Inception-V2模型。结构图下所示:

把7×7卷积替代为3个3×3卷积。包含3个inception部分。第一部分35×35×288,使用了2个3×3卷积代替传统的5×5;第二部分减小了feature map,增多filters,为17×17×768,使用了n×1->1×n结构;第三部分增多了filter,使用了卷积池化并行结构。网络有42层,但是计算量只有GoogLeNet的2.5倍。

通过平滑标签正则化模型

输入x,模型计算得到类别为k的概率

假设真实分布q(k),交叉熵损失函数为

最小化交叉熵等价最大化似然函数。交叉熵函数对逻辑输出求导

训练方法

batch-size=32,epoch=100。SGD+momentum,momentum=0.9。使用RMSProp,decay=0.9,ϵ=0.1,效果达到最好。lr=0.045,每2个epoch,衰减0.94。梯度最大阈值=2.0.

低分辨率图像的识别

对于低分辨有图像,使用“高分辨率”receptive field。实践中:1、减小前2个卷积层的stride,2、去掉第一个pooling层。

Inception 2.0的更多相关文章

  1. MySQL SQL审核平台 inception+archer2.0(亲测)

    docker run -d --privileged -v `pwd`/archer_data:/data -p 9306:3306 --name archer --hostname archer - ...

  2. 【Network Architecture】Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning(转)

    文章来源: https://www.cnblogs.com/shouhuxianjian/p/7786760.html Feature Extractor[Inception v4] 0. 背景 随着 ...

  3. [C6] Andrew Ng - Convolutional Neural Networks

    About this Course This course will teach you how to build convolutional neural networks and apply it ...

  4. ZAM 3D 制作简单的3D字幕 流程(二)

    原地址:http://www.cnblogs.com/yk250/p/5663907.html 文中表述仅为本人理解,若有偏差和错误请指正! 接着 ZAM 3D 制作简单的3D字幕 流程(一) .本篇 ...

  5. ZAM 3D 制作3D动画字幕 用于Xaml导出

    原地址-> http://www.cnblogs.com/yk250/p/5662788.html 介绍:对经常使用Blend做动画的人来说,ZAM 3D 也很好上手,专业制作3D素材的XAML ...

  6. 微信小程序省市区选择器对接数据库

    前言,小程序本身是带有地区选着器的(网站:https://mp.weixin.qq.com/debug/wxadoc/dev/component/picker.html),由于自己开发的程序的数据是很 ...

  7. osg编译日志

    1>------ 已启动全部重新生成: 项目: ZERO_CHECK, 配置: Debug x64 ------1> Checking Build System1> CMake do ...

  8. 学习笔记TF032:实现Google Inception Net

    Google Inception Net,ILSVRC 2014比赛第一名.控制计算量.参数量,分类性能非常好.V1,top-5错误率6.67%,22层,15亿次浮点运算,500万参数(AlexNet ...

  9. Inception使用详解

    一.Inception简介一款用于MySQL语句的审核的开源工具,不但具备自动化审核功能,同时还具备执行.生成对影响数据的回滚语句功能. 基本架构: 二.Inception安装 1.软件下载 下载链接 ...

随机推荐

  1. ELF解析(part one)

    the contents class elf { //date structure Elf32_Ehdr ehdr; Elf32_Shdr shdr; Elf32_Phdr phdr; // void ...

  2. 过滤NSString中的Emoji

    有时候由于项目需求.要过滤NSString中的emoji. 比方下面情况: 要跟android互通,android假设还没做这方面的支持. 内容做为手机短信发出去. 思路例如以下,遍历NSString ...

  3. 设计模式之里氏替换原则(LSP)

    在java等面向对象编程语言里面,我想继承性应该是一大特色吧!所以今天所要讲解的里氏替换原则主要是针对这一特性而提出来的,当我们定义对象的时候,尽量找出对象之间的相同点,然后将其抽象成基类对象.比如水 ...

  4. RabbitMQ基础概念

    转至:http://blog.csdn.net/whycold/article/details/41119807 RabbitMQ简介 AMQP,即Advanced Message Queuing P ...

  5. nginx源码学习_数据结构(ngx_pool_t)

    nginx中关于ngx_pool_t的数据结构位于src/core/ngx_palloc.c和src/core/ngx_palloc.h中,该数据结构主要是和内存池相关的,写下这篇博客前参考了网上很多 ...

  6. SpringBoot支持https和http

    1.application.propertites #server.port=8081 server.port: 8443 server.ssl.key-store: classpath:keysto ...

  7. 更新换代----systemctl命令取代chkconfig和service

    systemctl命令是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起. 任务 旧指令 新指令 使某服务自动启动 chkconfig --level 3 ...

  8. Hibernate命名查询

    hibernate命名的查询是通过一些有意义的名称来使用查询的方式.就类似于使用别名一样. Hibernate框架提供命名查询的概念,以便应用程序员不需要将查询分散到所有的java代码,进一步提高代码 ...

  9. Spring MVC控制器类名称处理映射

    以下示例显示如何使用Spring Web MVC框架使用控制器类名称处理程序映射. ControllerClassNameHandlerMapping类是基于约定的处理程序映射类,它将URL请求映射到 ...

  10. struts-config.xml 文件:

    struts-config.xml配置文件是一个在Web客户端组件的视图和模型之间的联系,但你的项目的99.99就不会碰这些设置%.基本的配置文件包含以下主要内容: SN Interceptor &a ...