美文网首页
GoogleNet论文笔记

GoogleNet论文笔记

作者: 老哥你瞅啥 | 来源:发表于2017-09-27 09:36 被阅读0次

    Abstract

    本篇论文的主要成就是高效的利用了网络内部的计算能力,在保证计算消耗稳定不变的情况下提升了网络的深度和宽度。设计基于海扁准则和多尺度处理问题的直觉。

    1、introduction

    在过去的三年中(2013-2015),由于深度学习和卷积神经网络的发展,我们在分类和检测问题上有了飞速的发展。并且,这些进步往往是由于一系列的新想法,算法和提升的网络结构而并不是更强硬件或者更深的网络或者更大的数据集导致的。有效率的利用计算资源才是今后发展的关键。就像我们的GoogleNet一样强无敌(名为inception)。

    2、Related Work

    从LeNet-5开始,cnn就开始有了比较标准的结构(有一系列的可选的标准化和池化层堆叠而成)。基于这种结构的模型在各个数据中都有不错的表现,而最近的趋势则是增加网络的深度和宽度并使用dropout来处理过拟合。尽管max-pooling会造成空间信息的丢失,但还是被应用到了局部化,物体检测和人体姿势识别等方面。

    收到生物神经学的启发有人使用了一系列固定的大小的不同Gabor滤波器来处理多尺度的问题。inception也使用了类似的结构。但是不同的是,inception中所有的过滤器都是学习得来的,他们多次的出现构成了22层的googlenet。

    lin提出的network-in-network结构增强了网络的表现能力。他们使用11的卷积层增加了深度,在我们goolenet中同样大量的使用了11的卷积层。主要是为了降低维度用以解决计算瓶颈。这使得我们不仅可以加深网络,同时还可以加宽,而不造成严重的性能下降。

    现在最好的物体检测方法是区域卷积神经网R-CNN,它将整个检测问题分解为两个子问题:第一部使用低层线索比如组成潜在物体的颜色、超像素等,提取出一些类别不可知的信息,然后接下来利用CNN在这些区块信息上识别物体类别。这种双步方法中,低层线索会影响切分区块大小的准确性以及CNN分类的准确度。我们在提交的检测程序中采用了同样的管道,但我们对其中的每一步都进行了加强,比如采用多盒预测以提高边界识别集合的召回率,还对bounding box提出的分类建议进行了不同方法的搭配合成,以获得更好的结果。

    3、Motivation and High Level Considerations

    最直接增强深度网络的表现能力的方法就是增大他们的体积。尤其是当🈶️足够大的训练集的时候,增大深度和宽度就显得尤其简单粗暴。但是有两个缺点
    首先大号的网络意味着很多的参数,这就会更容易导致过拟合。
    另一个问题就是会导致计算资源需求的增加,在深度网络中,还可能会有很多计算资源被浪费。
    解决这两个问题的根本途径就是将全连接替换为稀疏连接结构,甚至是在卷积内部。但是目前的计算设备对于非均匀的稀疏数据计算效率非常低下,即使是算术运算量减少100倍,分支预测和缓存的开销依然非常显著导致稀疏矩阵无法运用。cnn使用随机和特征维度的稀疏连接表,打破网络的对称性和改善学习效果,但为了更好地优化并行计算,趋势又重新回到了全连接。文章中提到将稀疏矩阵分解成稠密子矩阵进行计算加速,但同时指出稀疏矩阵在近期还不会用于深层网络的构建。

    4、Architectural Details

    inception的主要思想就是找到一个简单可实现的稠密组件去逼近和替代一个最优的局部稀疏结构,并在空间上不断重复这种结构。
    Arora提出了一个逐层了结构,它能够对上一层进行相关统计分析,将相关性较高的单元聚类在一起组成下一层并与上一层的单元相连。我们假设下层的每个单元都与输入图片的一些区域相关,并且这些单元被组分到filter banks中,而在更底层(接近输入)中的相关单元会注意集中在局部区域。因此我们就发现了很多的聚类关注是同一个区域,在下一层通过1*1的卷积覆盖。


    也可以通过在更大的patch上卷积,覆盖少量的在空间上更大的聚类,区域越来越大,patch数越来越少

    为了避免patch校准问题,现在的滤波器大小限制在1x1,3x3和5x5,主要是为了方便,不是必要的。inception最后将这些层的结果合并到一起,作为下一步的输入,此外inception结构中也加入了pooling操作提升效果。


    总结:
    1 . 采用不同大小的卷积核意味着不同大小的感受野,最后拼接意味着不同尺度特征的融合;
    2 . 之所以卷积核大小采用1、3和5,主要是为了方便对齐。设定卷积步长stride=1之后,只要分别设定pad=0、1、2,那么卷积之后便可以得到相同维度的特征,然后这些特征就可以直接拼接在一起了;
    3 . 文章说很多地方都表明pooling挺有效,所以Inception里面也嵌入了。
    4 . 网络越到后面,特征越抽象,而且每个特征所涉及的感受野也更大了,因此随着层数的增加,3x3和5x5卷积的比例也要增加。

    但是,使用5x5的卷积核仍然会带来巨大的计算量。采用1x1卷积核来进行降维。 例如:上一层的输出为100x100x128,经过具有256个输出的5x5卷积层之后(stride=1,pad=2),输出数据为100x100x256。其中,卷积层的参数为128x5x5x256。假如上一层输出先经过具有32个输出的1x1卷积层,再经过具有256个输出的5x5卷积层,那么最终的输出数据仍为为100x100x256,但卷积参数量已经减少为128x1x1x32 + 32x5x5x256,大约减少了4倍。

    具体改进后的Inception Module:

    这一结构一个有利的方面是它允许每一步的神经元大量增加,而不会导致计算复杂度的暴增。
    降维的普遍存在能够阻挡大量来自上一层的数据涌入下一层的过滤器,在大区块上对其进行卷积之前就对其进行降维。
    简而言之,inception用非对称的稠密组件去近似一个稀疏结构,既增加了网络的深度和宽度,减少了计算需求,稀疏连接的方式还有助于减少过拟合。

    5、googlenet

    总体结构:
    1.包括Inception模块的所有卷积,都用了修正线性单元(ReLU);
    2.网络的感受野大小是224x224,采用RGB彩色通道,且减去均值;
    3.#3x3 reduce和#5x5 reduce分别表示3x3和5x5的卷积前缩减层中1x1滤波器的个数;pool proj表示嵌入的max-pooling之后的投影层中1x1滤波器的个数;缩减层和投影层都要用ReLU;
    4.网络包含22个带参数的层(如果考虑pooling层就是27层),独立成块的层总共有约有100个;
    5.网络中间的层次生成的特征会非常有区分性,给这些层增加一些辅助分类器。这些分类器以小卷积网络的形式放在Inception(4a)和Inception(4b)的输出上。在训练过程中,损失会根据折扣后的权重(折扣权重为0.3)叠加到总损失中。

    具体细节:
    1.均值pooling层滤波器大小为5x5,步长为3,(4a)的输出为4x4x512,(4d)的输出为4x4x528;
    2.1x1的卷积有用于降维的128个滤波器和修正线性激活;
    3.全连接层有1024个单元和修正线性激活;
    4.dropout层的dropped的输出比率为70%;
    5.线性层将softmax损失作为分类器(和主分类器一样预测1000个类,但在inference时移除)。

    相关文章

      网友评论

          本文标题:GoogleNet论文笔记

          本文链接:https://www.haomeiwen.com/subject/zrcsextx.html