[论文阅读]Going deeper with convolutions(GoogLeNet)
本文采用的GoogLenet网络(代号Inception)在2014年ImageNet大规模视觉识别挑战赛取得了最好的结果,该网络总共22层。
Motivation and High Level Considerations
提升深度神经网络的一个最直接的方法就是增加网络的大小。这包括增加网络的深度(网络的层数)和宽度(每一层神经元的个数)。这种简单粗暴的方法有两个缺点:1)更大网络意味着更多数量的参数,这非常容易导致过拟合。2)更大的网络意味着要使用更多的计算资源。
解决这两个问题的一个基本的方式就是引入稀疏性,即将全连接层替换为稀疏连接(卷积层其实就是一个稀疏连接)(减少参数,降低过拟合风险)。而非均匀稀疏网络的弊端是计算效率不高,可以采用将多个稀疏矩阵合并成 相关的稠密子矩阵的方法来解决(即减少计算资源使用)。
Architectural Details
Inception 结构的主要思路是怎样用密集成分来近似最优的局部稀疏结构。

对上图做以下说明:
- 采用不同大小的卷积核意味着不同大小的感受野(尺寸不同的卷积核可以提取不同尺寸的特征,单层的特征提取能力增强了),最后拼接意味着不同尺度特征的融合;
- 之所以卷积核大小采用1、3和5,主要是为了方便对齐。设定卷积步长stride=1之后,只要分别设定pad=0、1、2,那么卷积之后便可以得到相同维度的特征,然后这些特征就可以直接拼接在一起了;
- 文章说很多地方都表明pooling挺有效,所以Inception里面也嵌入了。
- 网络越到后面,特征越抽象,而且每个特征所涉及的感受野也更大了,因此随着层数的增加,3x3和5x5卷积的比例也要增加。
但是,使用5x5的卷积核仍然会带来巨大的计算量。 为此,文章借鉴Network in Network,采用1x1卷积核来进行降维。在Filter concatenation层将1×1/3×3/5×5的卷积结果连接起来。如此设计的好处在于防止了层数增多带来的计算资源的爆炸性需求。从而使网络的宽度和深度均可扩大。使用了Inception层的结构可以有2-3×的加速。
例如:上一层的输出为100x100x128,经过具有256个输出的5x5卷积层之后(stride=1,pad=2),输出数据为100x100x256。其中,卷积层的参数为128x5x5x256。假如上一层输出先经过具有32个输出的1x1卷积层,再经过具有256个输出的5x5卷积层,那么最终的输出数据仍为为100x100x256,但卷积参数量已经减少为128x1x1x32 + 32x5x5x256,大约减少了4倍。
具体改进后的Inception Module如下图:

Training Methodology
训练采用随机梯度下降(SGD),momentum为0.9,固定学习率每个8 epochs减小4%。训练策略一直在变化,参考文章Some improvements on deep convolutional neural network based image classification。
在测试中使用提升准确率的技巧
集成方法:训练了7个相同结构的GoogLeNet模型,初始化方法,学习率调整策略相同,图像采用(patch)以及随机输入的顺序不相同。
aggressive cropping方法:ILSVRC中使用的很多图是矩形,非正方形。将图像resize成4种scales,使得最短的边分别为256,288,320和352,然后从左、中、右分别截取方形square图像(如果是肖像图像,则分为上、中、下),然后对于每个square图像从4个角及中心截取224x224 square images,并把原square图像resize成224x224,在对上面5种做镜像变换。所以这样一幅图像可以得到4x3x6x2=144个crops。参考:Imagenet classification with deep convolutional neural networks
multiple crops的softmax概率取平均效果最好。
注:
(1)本文的主要想法其实是想通过构建密集的块结构来近似最优的稀疏结构,从而达到提高性能而又不大量增加计算量的目的。GoogleNet的caffemodel大小约50M,但性能却很优异。
(2)1X1卷积核作用:
1. 实现跨通道的交互和信息整合
2. 进行卷积核通道数的降维和升维
http://www.caffecn.cn/?/question/136
(3)Network-in-Network是Lin等人[12]为了增加神经网络表现能力而提出的一种方法。在他们的模型中,网络中添加了额外的1 × 1卷积层,增加了网络的深度。我们的架构中大量的使用了这个方法。但是,在我们的设置中,1 × 1卷积有两个目的:最关键的是,它们主要是用来作为降维模块来移除卷积瓶颈,否则将会限制我们网络的大小。这不仅允许了深度的增加,而且允许我们网络的宽度增加但没有明显的性能损失。
参考文献:
http://blog.csdn.net/Quincuntial/article/details/76457409?locationNum=7&fps=1
http://www.cnblogs.com/Allen-rg/p/5833919.html
http://www.cnblogs.com/neuface/archive/2016/03/11/5265740.html
附录:GoogLeNet网络结构:


图片出处见水印
[论文阅读]Going deeper with convolutions(GoogLeNet)的更多相关文章
- Going Deeper with Convolutions (GoogLeNet)
目录 代码 Szegedy C, Liu W, Jia Y, et al. Going deeper with convolutions[C]. computer vision and pattern ...
- 【CV论文阅读】Going deeper with convolutions(GoogLeNet)
目的: 提升深度神经网络的性能. 一般方法带来的问题: 增加网络的深度与宽度. 带来两个问题: (1)参数增加,数据不足的情况容易导致过拟合 (2)计算资源要求高,而且在训练过程中会使得很多参数趋向于 ...
- Going deeper with convolutions(GoogLeNet、Inception)
从LeNet-5开始,cnn就有了标准的结构:stacked convolutional layers are followed by one or more fully-connected laye ...
- 解读(GoogLeNet)Going deeper with convolutions
(GoogLeNet)Going deeper with convolutions Inception结构 目前最直接提升DNN效果的方法是increasing their size,这里的size包 ...
- 图像分类(一)GoogLenet Inception_V1:Going deeper with convolutions
论文地址 在该论文中作者提出了一种被称为Inception Network的深度卷积神经网络,它由若干个Inception modules堆叠而成.Inception的主要特点是它能提高网络中计算资源 ...
- Going deeper with convolutions 这篇论文
致网友:如果你不小心检索到了这篇文章,请不要看,因为很烂.写下来用于作为我的笔记. 2014年,在LSVRC14(large-Scale Visual Recognition Challenge)中, ...
- Going Deeper with Convolutions阅读摘要
论文链接:Going deeper with convolutions 代码下载: Abstract We propose a deep convolutional neural network ...
- 论文阅读:Face Recognition: From Traditional to Deep Learning Methods 《人脸识别综述:从传统方法到深度学习》
论文阅读:Face Recognition: From Traditional to Deep Learning Methods <人脸识别综述:从传统方法到深度学习> 一.引 ...
- 论文阅读(Zhuoyao Zhong——【aixiv2016】DeepText A Unified Framework for Text Proposal Generation and Text Detection in Natural Images)
Zhuoyao Zhong--[aixiv2016]DeepText A Unified Framework for Text Proposal Generation and Text Detecti ...
随机推荐
- 15.C++-操作符重载
首先回忆下以前学的函数重载 函数重载 函数重载的本质为相互独立的不同函数 通过函数名和函数参数来确定函数调用 无法直接通过函数名得到重载函数的入口地址 函数重载必然发生在同一个作用域中 类中的函数重载 ...
- DB2开发系列之一——基本语法
最近看了些db2开发方面的资料,现做摘要,以供自己和大家参考: 1.变量声明 DECLARE v_salary DEC(9,2) DEFAULT 0.0; DECLARE v_status char( ...
- UnderScore.jsAPI记录
Collection Functions (Arrays or Objects) each _.each(list, iterator, [context]) 遍历list中的所有元素 ...
- SVN报E155024: Invalid relocation destination
大家开发过程会遇到一个场景! 我们在使用SVN版本管理工具进行开发的过程中,前一个版本在Branch->201803 分支开发完成之后,后一版本要求在Branch->201804版本开发 ...
- 教你怎么样在大陆直接使用google搜索
一.环境准备 我们需要一个nginx的模块来进行设置,ngx_http_google_filter_module.前提我们是有一个海外的VPS,并且可以访问谷歌,我的VPS是亿速云香港的. 首先先感受 ...
- 使用ADO.NET查询和操作数据库
String和StringBuilder 语法: //声明一个空的StringBuilder对象 StingBuilder对象名称 = new StringBuilder(); //声明一个Str ...
- Dynamics 365 for CRM:修改ADFS的过期时间,TokenLifetime
通过Microsoft PowerShell修改ADFS的过期时间实现延长CRM的过期时间 To change the timeout value, you will need to update t ...
- web api 安全设计(1)
环境:后台 ASP.NET Web API ,前端为 html,js(跨域访问) 场景1: 客户端自保管RSA 公钥和密钥,签名为客户端私钥签名,服务端用客户端公钥进行签名验证 场景2: 客户端使用S ...
- python全栈开发-Day11 迭代器、生成器、面向过程编程
一. 迭代器 一 .迭代的概念 迭代器即迭代的工具,那什么是迭代呢? 迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 while True: #只是单纯地重复,因而 ...
- python全栈学习--day11(函数高级应用)
一,函数名是什么? 函数名是函数的名字,本质:变量,特殊的变量. 函数名()执行此函数 ''' 在函数的执行(调用)时:打散. *可迭代对象(str,tuple,list,dict(key))每一个元 ...