【网络结构】GoogLeNet inception-v1:Going deeper with convolutions论文笔记
@
0. 论文链接
1. 概述
GoogLeNet是谷歌团队提出的一种大体保持计算资源不变的前提下,通过精妙的设计来增加网络的深度和宽度,基于Hebbian法则和多尺度处理来进行设计,在ILSVRC2014中获得了分类和检测第一的好成绩。
通过实验,可以发现神经网络的效果可以通过网络更深、更宽来提升。但也有两个很明显的问题:过拟合和极大的增加了计算量,作者想通过增加网络的稀疏性的同时加深与加宽网络,但是计算机的基础结构在遇到稀疏数据计算时会很不高效,使用稀疏矩阵会使得效率大大降低,所以作者提出了一种既能利用稀疏性,又可以利用稠密计算的网络结构。
ps:读论文的时候,文章中很多sparse,十分不理解,在网上查阅了一些资料,1.CNN具有稀疏性跟参数共享的特性,稀疏性指的是他相比于同规格的全连接,输出的数值量较少。2.稀疏性就是有输出的神经元比例比较少的意思(某 UCLA大神在知乎上的回答)
总得来说,1.inception-v1引入了inception结构,并针对一些问题进行了改进。2.因为网络很深,训练的时候增加辅助分类器防止梯度消失。3.巧用1x1卷积。
2. inception
inception结构主要考虑了如何设计近似卷积视觉网络的最优稀疏结构并用容易获得的密集组件进行覆盖,然后在网络中重复这个局部结构。他们先提出了这个“naive inception”,如下图

针对结构图做以下说明
1)采用不同大小的卷积核意味着不同大小的感受野,最后拼接意味着不同尺度特征的融合;
2) 之所以卷积核大小采用1、3和5,主要是为了方便对齐。设定卷积步长stride=1之后,只要分别设定pad=0、1、2,那么卷积之后便可以得到相同维度的特征,然后这些特征就可以直接拼接在一起了;
3) 文章说很多地方都表明pooling挺有效,所以Inception里面也嵌入了;
4) 网络越到后面,特征越抽象,而且每个特征所涉及的感受野也更大了,因此随着层数的增加,3x3和5x5卷积的比例也要增加;
可以发现,这样设计,网络结构不但更宽了而且融合不同尺度的特征,同时他们的输出拼接起来组成一个输出向量,因此相当于一个“神经元”,这样保证了网络结构的稀疏性,算是设计的十分巧妙了。
但是,使用5x5的卷积核仍然会带来巨大的计算量。 为此,论文借鉴NIN结构,采用1x1卷积核在进行3x3以及5x5卷积之前先进行降维,这样在增加宽度与深度的同时平衡计算量。改进的inception如下:

3. GoogleNet
这是他们团队在比赛中使用的模型,基于inception模型,采用模块化结构,方便添加和修改。为了防止梯度消失,同时网络中间的层次生成的特征会非常有区分性,所以给这些层增加一些辅助分类器。这些分类器以小卷积网络的形式放在Inception(4a)和Inception(4b)的输出上。在训练过程中,损失会根据折扣后的权重(折扣权重为0.3)叠加到总损失中(详细的可以看下图)。
把全连接层改成average pooling层,想法来自NIN,经过试验可以将top-1 acc提高0.6%,即使去掉了FC层同样需要dropout,但是,实际在最后还是加了一个全连接层,主要是为了方便以后大家finetune(原因是网上同学解释的),在总得结构图中也可以发现在每个分类器之前都有一个average pooling层。

总体结构:
- 包括Inception模块的所有卷积,都用了修正线性单元(ReLU);
- 网络的感受野大小是224x224,采用RGB彩色通道,且减去均值;
- #3x3 reduce和#5x5 reduce分别表示3x3和5x5的卷积前缩减层中1x1滤波器的个数;pool proj表示嵌入的max-pooling之后的投影层中1x1滤波器的个数;缩减层和投影层都要用ReLU;
- 网络包含22个带参数的层(如果考虑pooling层就是27层),独立成块的层总共有约有100个;
- 添加辅助分类器

具体细节:
- 均值pooling层滤波器大小为5x5,步长为3,(4a)的输出为4x4x512,(4d)的输出为4x4x528;
- 1x1的卷积有用于降维的128个滤波器和修正线性激活;
- 全连接层有1024个单元和修正线性激活;
- dropout层的dropped的输出比率为70%;
- 线性层将softmax损失作为分类器(和主分类器一样预测1000个类,但在inference时移除)。
参考链接
https://www.jianshu.com/p/ffae362527f0
https://blog.csdn.net/xjz18298268521/article/details/52381919
https://blog.csdn.net/wspba/article/details/61921619
【网络结构】GoogLeNet inception-v1:Going deeper with convolutions论文笔记的更多相关文章
- 图像分类(一)GoogLenet Inception_V1:Going deeper with convolutions
论文地址 在该论文中作者提出了一种被称为Inception Network的深度卷积神经网络,它由若干个Inception modules堆叠而成.Inception的主要特点是它能提高网络中计算资源 ...
- 深度学习面试题20:GoogLeNet(Inception V1)
目录 简介 网络结构 对应代码 网络说明 参考资料 简介 2014年,GoogLeNet和VGG是当年ImageNet挑战赛(ILSVRC14)的双雄,GoogLeNet获得了第一名.VGG获得了第二 ...
- Inception V1、V2、V3和V4
Inception模块分为V1.V2.V3和V4. V1(GoogLeNet)的介绍 论文:Going deeper with convolutions 论文链接:https://arxiv.org/ ...
- 深度学习面试题29:GoogLeNet(Inception V3)
目录 使用非对称卷积分解大filters 重新设计pooling层 辅助构造器 使用标签平滑 参考资料 在<深度学习面试题20:GoogLeNet(Inception V1)>和<深 ...
- 网络结构解读之inception系列二:GoogLeNet(Inception V1)
网络结构解读之inception系列二:GoogLeNet(Inception V1) inception系列的开山之作,有网络结构设计的初期思考. Going deeper with convolu ...
- Going Deeper with Convolutions(Inception v1)笔记
目录 Abstract Introduction First of All Inception Depth Related Work Motivation and High Level Conside ...
- GoogLeNet 之 Inception v1 v2 v3 v4
论文地址 Inception V1 :Going Deeper with Convolutions Inception-v2 :Batch Normalization: Accelerating De ...
- 解读(GoogLeNet)Going deeper with convolutions
(GoogLeNet)Going deeper with convolutions Inception结构 目前最直接提升DNN效果的方法是increasing their size,这里的size包 ...
- Going Deeper with Convolutions (GoogLeNet)
目录 代码 Szegedy C, Liu W, Jia Y, et al. Going deeper with convolutions[C]. computer vision and pattern ...
随机推荐
- hbctf---whatiscanary学习
题目中除了能栈溢出实在找不到其他能泄露信息的地方了.而且也没法修改GOT表,始终绕不过stack_chk_fail函数.感到无从下手.只到官方给WP了,才觉得自己基础太过浅薄了. 如果我们仔细观察崩溃 ...
- Storm-源码分析-Topology Submit-Supervisor
mk-supervisor (defserverfn mk-supervisor [conf shared-context ^ISupervisor isupervisor] (log-message ...
- Android项目使用Eclipse进行单元测试
Android项目如果每次都整个调试的话,要加载UI,会等很长时间.所以单元测试就显得很方便了. 要进行单元测试,首先得修改下AndroidManifest.xml文件.在Instrument标签里点 ...
- ifram+form方式实现文件、图片上传、预览
1.前端代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- Linux升级python至3.4.4
wget https://www.python.org/ftp/python/3.4.4/Python-3.4.4.tgz ls .tgz mkdir /usr/local/python3 cd Py ...
- Java应用程序中System.out.println输出中文乱码
其实,解决办法比较简单,即:编译时指定编码为UTF-8,如: javac -encoding utf- HelloJava.java 这样,再运行时就不会出现乱码. 比较详细的内容可以参考:http: ...
- jmeter使用代理服务器录制脚本端口号被占用
初学jmeter工具,在设置端口号时,使用8080,IE设置的局域网端口也为8080,启动代理服务器时,提示:Could not create script recorder-port in use. ...
- epson Robot 指令集合
******************************************************************* 目的:定义一个整型数据 原型:Integer varName[( ...
- python全栈开发从入门到放弃之内置函数
1.locals.globals def func(): x = 1 y = 2 print(locals()) #打印局部作用域中的名字 print(globals()) #打印全局作用域中的名字 ...
- mysql数据库从删库到跑路之mysql完整性约束
一 介绍 约束条件与数据类型的宽度一样,都是可选参数 作用:用于保证数据的完整性和一致性主要分为: PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录 FOREIGN KEY ...