解读(GoogLeNet)Going deeper with convolutions

时间:2021-12-10 05:30:49

GoogLeNetGoing deeper with convolutions

Inception结构

目前最直接提升DNN效果的方法是increasing their size,这里的size包括depth和width两方面。在有足够的labeled training data 时这种方法是最简单以及稳妥的方法来获得一个高质量的模型。但是往往实际中大的网络会有更多的参数,当training data数量很少时,很容易出现overfitting,并且大的网络需要的计算资源也是更多。这是需要将fully connected改变成sparsely connected:

 解读(GoogLeNet)Going deeper with convolutions

1x1大小卷积最主要的作用是dimension reduction,否则会限制网络的大小,1x1卷积核的应用允许从depth和width上都增大网络,而不会带来大量计算的负担。

在Inception中1x1考虑到local region,3x3和5x5则考虑到spatially spread out clusters。所以在lower的层中主要是local信息,所以1x1的output number要多一些,但在higher的层中往往捕捉的是features of higher abstraction,所以在higher layer中3x3和5x5的比例应该增大。

但在这种naïve Inception中有一个跟严重的问题是:经过结构以后的卷积output number增加太多,这样就导致只经过几个stage就会出现computation blow up问题。因为pooling只能改变mapping的大小,而不改变output num,所以当使用naïve Inception时需要concatenate三个卷积的输出以及pooling的输出,所以当上一层的channel较大时,输出的output number会更大。并且5x5的卷积即使在output number适中时,当channel极大时,计算量也是巨大的。

上述问题引出了带有dimension reduction的Inception结构:这种方法源于即使一个低维度的embedding也能包含一个相对大的image patch的很多信息。但embedding压缩过于稠密,但需要这种结构的稀疏性,所以在耗费计算量的3x3和5x5卷积之前使用1x1 reduction减少卷积输入的channel。在使用reduction后同时使用ReLU一方面降维减少输入channel数量,另一方面增强非线性。

解读(GoogLeNet)Going deeper with convolutions

上述的结构主要有两个优点:一是可以再每个stage增加units的数量,仅为即使output number多了,在下一个stage时也会通过dimension reduction去减少channel数,所以不会出现计算爆炸的情况。二是这种结构满足了在不同的scale下处理视觉信号然后聚集在一起输入到下一个阶段以至于可以继续从多scales下提取特征。

GoogLeNet22层)

解读(GoogLeNet)Going deeper with convolutions

所有的卷积包括Inception都使用ReLU,训练图像大小为224x224,RGB三通道,减均值。“#3x3 reduce”和“#5x5 reduce”表示1x1 reduction layer的数量。“pool proj”表示max-pooling后1x1 projection layer的数量。在网络中,并没有完全使用Inception,一开始的三层使用的是原始的卷积,这样是出于技术的原因(memory efficiency during training),但不是必须。

网络中的最后使用的是average pooling,而不是全连接,结果发现可以提高0.6%,但使用dropout是必要的,使用linear线性层是为了方便fine-tuning模型。

另外,发现在网络中间层产生的特征很有判别性,所以在中间层添加辅助分类器(auxiliary classifiers)希望在较浅的层中获得具有判别性的分类器,为反传过程增强梯度并且增强正则化。在训练过程中这些损失都会加权计入总损失(0.3),详细的结构见论文。

Training Methodology

训练采用随机梯度下降,冲量momentum:0.9,固定学习率8 epochs减小4%。训练策略一直在变化,参考文章Some improvements on deep convolutional neural network based image classification。

在测试中使用提升准确率的技巧

  1. 集成方法:训练了7个相同结构的GoogLeNet模型,初始化方法,学习率调整策略相同,图像采用(patch)以及随机输入的顺序不相同。
  2. 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
  3. multiple crops的softmax概率取平均效果最好。

解读(GoogLeNet)Going deeper with convolutions的更多相关文章

  1. 图像分类(一)GoogLenet Inception_V1:Going deeper with convolutions

    论文地址 在该论文中作者提出了一种被称为Inception Network的深度卷积神经网络,它由若干个Inception modules堆叠而成.Inception的主要特点是它能提高网络中计算资源 ...

  2. Going Deeper with Convolutions (GoogLeNet)

    目录 代码 Szegedy C, Liu W, Jia Y, et al. Going deeper with convolutions[C]. computer vision and pattern ...

  3. Going deeper with convolutions 这篇论文

    致网友:如果你不小心检索到了这篇文章,请不要看,因为很烂.写下来用于作为我的笔记. 2014年,在LSVRC14(large-Scale Visual Recognition Challenge)中, ...

  4. Going Deeper with Convolutions阅读摘要

      论文链接:Going deeper with convolutions 代码下载: Abstract We propose a deep convolutional neural network ...

  5. [论文阅读]Going deeper with convolutions(GoogLeNet)

    本文采用的GoogLenet网络(代号Inception)在2014年ImageNet大规模视觉识别挑战赛取得了最好的结果,该网络总共22层. Motivation and High Level Co ...

  6. 【网络结构】GoogLeNet inception-v1:Going deeper with convolutions论文笔记

    目录 0. 论文链接 1. 概述 2. inception 3. GoogleNet 参考链接 @ 0. 论文链接 1. 概述   GoogLeNet是谷歌团队提出的一种大体保持计算资源不变的前提下, ...

  7. 【CV论文阅读】Going deeper with convolutions(GoogLeNet)

    目的: 提升深度神经网络的性能. 一般方法带来的问题: 增加网络的深度与宽度. 带来两个问题: (1)参数增加,数据不足的情况容易导致过拟合 (2)计算资源要求高,而且在训练过程中会使得很多参数趋向于 ...

  8. Going deeper with convolutions(GoogLeNet、Inception)

    从LeNet-5开始,cnn就有了标准的结构:stacked convolutional layers are followed by one or more fully-connected laye ...

  9. 论文阅读笔记四十二:Going deeper with convolutions (Inception V1 CVPR2014 )

    论文原址:https://arxiv.org/pdf/1409.4842.pdf 代码连接:https://github.com/titu1994/Inception-v4(包含v1,v2,v4)   ...

随机推荐

  1. 隐语义模型LFM(latent factor model)

    对于某个用户,首先得到他的兴趣分类,然后从分类中挑选他可能喜欢的物品.总结一下,这个基于兴趣分类的方法大概需要解决3个问题. 如何给物品进行分类? 如何确定用户对哪些类的物品感兴趣,以及感兴趣的程度? ...

  2. golang时间

    //获取本地location toBeCharge := "2015-01-01 00:00:00" //待转化为时间戳的字符串 注意 这里的小时和分钟还要秒必须写 因为是跟着模板 ...

  3. Visual C++ 2012/2013的内存溢出检測工具

    在过去,每次编写C/C++程序的时候,VLD差点儿是我的标配.有了它,就能够放心地敲代码,随时发现内存溢出. VLD最高可支持到Visual Studio 2012.不知道以后会不会支持Visual ...

  4. Java继承与清理

    [程序实例] import java.util.*; class Characteristic { private String s; Characteristic(String s) { this. ...

  5. #JavaScript对象与继承

    JavaScript对象与继承 JavaScript是我在C语言之后接触的第二门编程语言,大一暑假的时候在图书馆找了一本中国人写的JavaScript程序设计来看.那个时候在编程方面几乎还是小白,再加 ...

  6. Android跳转WIFI界面的四种方式

    第一种 Intent intent = new Intent(); intent.setAction("android.net.wifi.PICK_WIFI_NETWORK"); ...

  7. case when 遇到varchar转为int类型值失败的错误

    问题描述: 在Sql Server 2005下, 使用如下语句报错:在将 varchar 值 '大' 转换成数据类型 int 时失败. 注:status 是整型字段 select ff=  case ...

  8. 自定义Kettle数据库插件

    项目需要实现使用Kettle向神通数据库中写入数据,Kettle官方标准的数据库插件里面并没有对神通数据库的支持,因此需要自己写一个数据库插件.下面我们开始写一个数据库插件 1.在eclipse中创建 ...

  9. javascript中字符串拼接详解

    字符串拼接是所有程序设计语言都需要的操作.当拼接结果较长时,如何保证效率就成为一个很重要的问题.本文介绍的是Javascript中的字符串拼接,希望对你有帮助,一起来看.   最近在研究<jav ...

  10. 设置loadrunner中每个mdrv&period;exe进程中包含的vuser个数

    设置loadrunner中每个mdrv.exe进程中包含的vuser个数 在loadrunner中,默认的是每50个vuser会使用一个mdrv.exe进程,但是有些时候vuser中的使用的线程太多就 ...