您的位置:首页 > 编程语言 > Go语言

[论文笔记]Going deeper with convolutions(Inception-V1)

2018-03-14 12:11 537 查看
摘要:
贡献1:提出了一种新的网络结构,在ImageNet 2014图像分类比赛上获得了冠军。
贡献2:这种新的结构可以在增加网络宽度与深度的同时,提升计算资源的利用率。
贡献3:优化新的网络是基于赫本理论和多尺度处理。

一.介绍
      GoogLeNet的参数是AlexNet的十二分之一,但是精度却更加的准确。GoogLeNet可以更好的应用到移动平台或是嵌入式计算中。在设计这个网络的时候,考虑的是如何更好地应用在移动平台,而不是精度的提升。这个网络在前向传播的时候用了1.5billion的乘加法,所以可以投入到真实世界的使用。除此之外,在目标检测领域,获得巨大的成功是通过协同深度结构与经典的计算机视觉算法,比如像R-CNN那样。
      在这篇文章中,Inception的名字来源于论文《Network in network》。
      "deep"有两种意义:第一种是引入一种新的网络结构叫做”Inception“,第二种是直观的增加网络的深度。

二.相关工作
      从LeNet-5开始,CNN有着一种标准的结构:栈式的卷基层通过持续的正则化和最大池化,紧接着通过一层或更多的全连接层。在MNIST,CIFAR和ImageNet都取得了很好地效果,近年来有着增加层数和层大小的趋势,同时使用Dropout来解决过拟合问题。
      尽管max-pooling会丢失一些空间的信息,但是同样的网络结构依然成功的应用在目标定位,目标检测和人类姿态。受到了神经科学的启发,在Gabor 滤波器中,使用不同大小的滤波器来解决图像尺度变化的问题,类似于Inception模块,但是相对于两层的深度的Gabor滤波器,Inception所有的滤波器都是靠学习而来的。
      Network-in-Network是为了提升模型的表达能力,是通过在矫正的线性激活函数后面的一层加入1X1的卷积核,这使得它弄个很容易的被嵌入到CNN中。然而在我们的Inception模型中1X1卷积层的目的主要是为了唯独减少,来移除计算瓶颈,否则会限制我们网络的大小。这不仅限制增加网络深度,也限制增加网络宽度。
      现在处于目标检测领域中主导地位的算法是R-CNN。R-CNN将整个工作分解成了检测中的两个子问题:首先利用低层次的线索,比如像颜色或是超级像素的持续性,来提出类别位置的目标提议。然后使用CNN来分类和识别目标的类别和类。

三.动机和高级的考虑
      最直观的方法是直接增加网络的大小(增加层数或是每一层的单元数),但是这种方法有两个缺点:1.当数据集不足的时候,容易产生过拟合,制造大数据集成本是很高的。2.会提升训练时对计算资源的要求。
      解决这两种问题的基本方法就是转移全连接结构到稀疏的连接结构,即使是在卷积里面。除了模仿生物系统,则因为A拥有坚实的理论基础,这个理论基础是来自于Arora的工作。论文的结果说明了如果数据集的概率分布可以被一个大的,非常稀疏的深度神经网络表达的话,那么优化的网络结构可以层层构建通过分析最后一层激活函数的统计相关性和用高度相关的输出聚类神经元。尽管严格的数学证明需要非常强的条件,但事实上这解释了知名的赫本理论—神经激活的时候连接在一起。
      今天的计算基础设施是非常不足的,当在不均匀的系数矩阵的数值计算中。在高强度的计算中,这种问题尤其明显。大部分机器学习系统通过利用在空域的稀疏性来使用卷积,然而卷积被用来作为收集前面层的密集信息。ConvNets传统上使用随机和稀疏的连接表为了来打破对称,并且提升学习效果。在AlexNet中重新使用全连接层是为了优化平行计算(这里提出个问题,为什么全连接层有利于平行计算?)。结构的均匀性,更多的滤波器和更大的Batch size有利于有效地密集计算。
      在这里,我们提出一个问题,是否有这样的一个中间结构:一个结构可以利用稀疏性和密集矩阵的计算优势。有大量的文字在文献中描述聚集稀疏矩阵到相对密集的子矩阵可以提神计算性能。所以可以先打类似的方法尅用来构建非均匀的深度学习结构。
      Inception模块假设输出是利用密集计算来近似稀疏计算。有一点值得思考:尽管网络在计算机视觉任务中,效果不错。但影响结果的是否真的就是以上原则造成的?可以用相同微分器但是完全不同的结构的网络来验证,如果效果差不多,那可能就不是这个原因造成的。

四.结构细节
      Inception模块主要的有以下几点:



      1.主要思想就是能否把优化的局部稀疏结构用近似的密集成分来近似。(需要说明详细点)
      2.每一个特征融合了不同尺度的特征。
      3. 因为随着层数的增多,每一个卷积单元的感受野会越来越大,并且也会减少。
      4. 为了避免patch连在一起,使用1X1,3X3,5X5的卷积核,其中主要是方便于后面的整合。
      5. 因为pooling有效,也被加入了里面。
      但是这里有一个问题,随着网络的加深,滤波器会有越来越多的维度,所以这里采用1X1的卷积核来降维比如一个7*7*512的特征用1*1*224的特征降维后,维度变为7*7*224节省了不少空间。改进版如下:



      Inception模块的好处就是可以增加每一层的卷积核数,这使得增加了网络的宽度,但是又不用担心计算资源不够;同时这个网络融合了多尺度的特征,使得下一层网络可以拥有不同尺度的抽象特征。

五.GoogLeNet
      之所以取名叫GoogLeNet是为了表示对LeNet的尊敬。下图是GoogLeNet的结构参数表:



      所有的卷积核都采用了ReLu激活函数,输入图像为224x224的RGB图像,"#3x3 reduce"和"#5x5 reduce"代表着在3x3或是5x5卷积核前面跟着一个1x1卷积核来减少维度。
      如果把带参数的层都算进去的话,网络一共有22层。在编程中,依据机器学习系统而定,一共有大约100层左右。在分类器前面使用了average pooling层,这使得fine-tuning我们的网络变得容易,同时用average代替全连接网络可以提示0.6%的top-1精度。
      为了使得梯度有效地传播,加入了辅助的分类模块连接到中间层,使得梯度可以更好地传播下去,加在Inception(4a)和Inception(4d)模块上。在训练阶段,这两个付辅助模块的loss会乘以权重(0.3)然后将其梯度一起后传,在测试阶段不会使用该模块。
GoogLeNet的框架为下图:



      GoogLeNet额外的结构可以概括为以下几句话:
      1.平均池化层的滤波器大小为5x5,stride = 3,这样输出大小分别为4x4x512(Inception(4a)) 和 4x4x528(Inception(4d))。
      2.128个,1x1的卷积核,配上ReLu激活函数来减少维度。
      3.1024单元的全连接层,配上ReLu激活函数。
      4.在输出部分,70%的Dropout。
      5.分类器是Softmax。

六. 训练方法
      使用asynchronous stochastic gradient方法,momentum为0.9。固定的学习率,每8个epoch减少4%。

七. ILSVRC 2014 分类挑战计划和结果
      在测试阶段采用了一系列的方法来提升精度:
      1. 独立的训练了其中版本的GoogLeNet,然后测试集成的结果,训练的时候有相同的学习率和初始化,唯一不同的是在采样方法上和输入图像的顺序。
      2.在测试阶段采用的截取策略是,将图像大小分别调整为256, 288, 320, 352,然后截取左边,右边和中间区域。对于每个区域截取了四个角和中间,并且都调整大小到224x224,然后翻转。这样每个图片都可以截取出4x3x6x2 = 144张图片。
      3. Softmax是在多个块的平均结果,同时也试过了在每个计算出的块做最大池化和把分类器输出的结果做平均,但是效果都不如第一个好。
      这样可以获得6.67%的top-5的错误率。结果如下:



八. ILSVRC 2014 检测挑战任务和结果



九.结论
      实验表明,通过密集的结果来近似优化的稀疏结构可以提升网络的性能。通过我们的结构表明转移稀疏的结构是可行的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息