inception——Going deeper with convolutions阅读笔记

该论文介绍的是Szegedy等人提出的深层卷积神经网络架构——inception,并以基于这种结构的22层的深度神经网络GooLeNet参加了ILSVRC 2014比赛,获得了当年比赛中Classification和Detection项目的第一名。下面来详细的介绍这篇论文的内容。

Abstract

作者在论文中提出了一种新的命名为inception的深度卷积神经网络架构,并在ILSVRC 2014的classification和detection项目中取得了当时最好的结果。Inception网络结构的主要特点是提高了网络内部计算资源的利用率,可以在保持计算成本不变的情况下增加网络的深度和宽度。另外,Inception结构还遵循了Hebbian原则并增加了多尺度的处理。作者在比赛中使用的是基于这种结构的22层的深度神经网络GooLeNet并取得了非常好的结果。

Hebbian principle:

我们可以假定,反射活动的持续与重复会导致神经元稳定性的持久性提升……当神经元A轴突与神经元B很近并参与了对B的重复持续的兴奋时,这两个神经元或其中一个便会发生某些生长过程或代谢变化,致使A作为能使B兴奋的细胞之一,它的效能增强了

这一理论经常会被总结为“一起激发的神经元连在一起”(Cells that fire together, wire together)。

一个很通俗的现象,先摇铃铛,之后给一只狗喂食,久而久之,狗听到铃铛就会口水连连。这也就是狗的“听到”铃铛的神经元与“控制”流口水的神经元之间的链接被加强了,而Hebbian principle的精确表达就是如果两个神经元常常同时产生动作电位,或者说同时激动(fire),这两个神经元之间的连接就会变强,反之则变弱(neurons that fire together, wire together) 

1.Introduction

作者提到最近三年以来由于深度学习的发展,对于图像分类和目标检测都有了非常大的提升。同时,取得进展的原因不单单是靠更加强力的计算资源和更大的数据集和网络模型,更多的原因主要是人们对深度学习的新观念、新算法以及新的模型结构。作者提出,他们所用的网络结构用到的模型参数是AlexNet的1/12,但是却极大的提升了识别结果的准确性。同时对于目标检测任务,当前的发展趋势也不是越来越大的网络结构,而是像R-CNN算法一样,使用深度学习和传统的计算机视觉算法结合的方式。

随着移动计算的兴起,高效率的算法非常重要,特别是他们需要的计算资源和内存占用的要求很高。因此本文中提出的模型结构设计的原则之一就是模型的高效性。

文章中提出的Inception结构是从Lin等人的Network in network中发展而来的,同时作者也提出,要想取得更好的识别结果,当前的深度神经网络结构需要变的更深。在这里“深”有两层含义:1)第一种是作者提出的Inception model是一种新的组织层次;2)直观意义上的深,即网络层数更多。

2.Related Works

这一部分作者主要讲解与本文相关的工作,主要分为以下几个部分:
(1)从LeNet开始,卷积神经网络的结构基本没有大的变化,都是由卷积层——激活函数——[可选] 池化层——[可选]归一化层——全连接层组成。这种结构非常的流行,同时在像MNIST和CIFAR等数据集中去了非常好的成果;而对于像ImageNet上,最近的趋势则是采用更多层的网络结构并使用Dropout防止过拟合进行处理和识别。
(2)受灵长类的神经结构的启发,Srre使用了一系列不同大小的Gabor滤波以获得不同尺度上的特征,与之相同,本文中的Inception结构也使用了类似的处理,与之不同的是,这里的卷积核都是通过学习得到的,并处理的很多次;
(3)Lin等人提出的Network-in-Network最初用于提高神经网络的表达能力。在Lin等人的实验中采用1×1大小的卷积核进行了处理,从而提升的网络的深度和学习能力。在作者的实验中同样采用了1×1的卷积核,作用有二:1)用于降低特征的维度,从而降低计算需求;2)在没有损失多少特征的基础上增加网络深度的同时增加了网络的宽度;
(4)RCNN的部分:RCNN把目标检测分为了两个阶段,第一个阶段利用低层次的特征,如颜色和纹理等产生目标的候选位置区域,第二个阶段则是利用CNN来对候选区域的物体进行分类,从而完成定位。本文作者也采用了类似的方法进行检测,并在一定程度上进行了改进。

3.Motivation and High Level Considerations

提升深度神经网络识别能力的最直接的方式就是提升网络的尺寸大小,这不单单包括增加网络的深度,同时包括需要对网络的宽度进行扩展。这里网络的深度就是指网络的层数,而网络的宽度指的是每一层网络中单元的数量。这种做法简单有效,特别是当你有大量的带标签数据的情况下,然而这样做也带来了以下两个问题: 

(1)网络的结构越来越大的意味着网络中的参数数量越来越多,如此多的参数会导致网络的学习能力过强,训练时非常容易过拟合,特别是当你的训练数据不够多的情况下。这个问题是最主要的难题,因为创建高质量的训练集是一种非常昂贵且棘手的事,需要专业人士的大量人工操作,不现实。
(2)网络结构增大带来的另一个问题就是这个网络需要更多的计算资源。例如两个连续的卷积层中,随便增加一点点filter的数量就会极大的增大计算量,然而我们增加的filter很多都可能根本是没用的,这就平白的浪费了很多的计算资源。在实际情况中,由于计算预算总是有限的,因此即使当主要目的是提高性能质量时,计算资源的有效分布也要优先于网络结构的随机增加。

解决上面问题的方式就是用稀疏的网络结构代替稠密的网络。Arora等人的工作证明如果数据集的概率分布可由大的,非常稀疏的深度神经网络表示,则可以通过分析最后一层激活的相关统计来逐层构建最优网络拓扑,然后将具有高度相关输出的神经元聚集在一起。这一结果也与Hebbian原理——neurons that fire together, wire together有相同之处。

问题是当前的硬件在处理非均匀的稀疏结构的计算时效率非常低,这就带来一个问题,计算稀疏的结构很有可能是不划算的。为了既能保有网络结构的稀疏性,又能利用密集矩阵的高计算性能,论文提出了一种Inception Module。

4. Architectural Details

Inception架构的主要思想就是考虑如何使用一个密集的网络去近似我们前面提到的那个最佳的稀疏的卷积神经网络。Arora等人提出,我们建立的神经网络,可以通过分析最后的输出,然后把最后输出的结果中具有较强联系的聚合成多个clusters。然后cluster组成下一层并与上一层连接起来。我们假定我们在网络的较浅的层中提取的特征都是针对图像中的某个部分,因此在较浅层中提取的特征将主要表达的是图像的局部特征。因此到最后我们能够得到图像中一个局部区域的多个特征(由较浅层网络提取的),并把这些特征使用conv1×1的卷积层进行降维。与此同时,我们也可以使用更大的卷积核提取特征,由于卷积核增大,它对应的图像区域就会更大,因此我们就不需要使用那么多的patches,为了避免patch-alignment问题,作者目前实现的Inception架构中,卷积核的大小分别为1×1,3×3,5×5。也就是说,作者提到的Inception架构就是把这些卷积核卷积后提取的feature map进行组合作为输出同时还加上max pooling提取的结果,结构如下图所示:

我们都知道,在卷积神经网络中较浅的层中提取的是一些局部特征,如边缘、角点等;而网络中较深的层得到的一般则是较高的特征,而局部特征则会较少,因此后面的Inception model中的3×3,5×5的filter在整个model的filter总数占比要提高。

然而如上图这种Inception model的缺点则是需要大量的计算能力,即使是5×5这样的卷积核,在较深的层次中由于filter的数量较多,特别是pooling,因为pooling不会改变feature map的数量,导致该层输出的feature map数量会越来越多,因此会耗费大量的计算资源。作者提出,尽管这种结构可能能够近似我们要得到的稀疏结构,然而这是非常非常的不高效的,很有可能网络还没有几个Inception结构时,就已经出现了计算爆炸。这个问题的解决方法就是在进行3×3,5×5之前,以及在pooling之前加上一个1×1的卷积层用以降维(减少feature maps的厚度),从而降低计算量。(例如:上一层的输出为100x100x128,经过具有256个输出的5x5卷积层之后(stride=1,pad=2),输出数据为100x100x256。其中,卷积层的参数为128x5x5x256。假如上一层输出先经过具有32个输出的1x1卷积层,再经过具有256个输出的5x5卷积层,那么最终的输出数据仍为为100x100x256,但卷积参数量已经减少为128x1x1x32 + 32x5x5x256,大约减少了4倍。)改进后的Inception结构如下:

è¿éåå¾çæè¿°

(注意:这里的每个1×1卷积后面都要跟ReLU等激活函数,使得网络具有非线性)
以上就是Inception的架构,Inception网络就是由多个上面介绍的Inception model堆叠起来的,其中Inception model之间可能通过max pooling使得feature map尺寸减小。作者提出,从技术层面上出发(memory efficiency),最好前几层按照正常的CNN网络的套路来,在深层的时候使用Inception model,然而这也不是一定要严格遵守的,看自己的训练任务来吧。

作者提出,使用Inception model的好处就是得益于1×1卷积层的降维,使得我们可以在不显著增加计算量的情况下加深和扩宽网络结构,使得网络具有更强的学习能力。同时根据人们的直觉感官来看,视觉信息经过不同尺度的处理结果会更好,而Inception的另一个好处就是可以提取来自不同尺度下的特征,使得下一个layer可以得到来自不同尺度的特征。作者最后提出,具有Inception结构的网络可以比与他具有相同的识别结果的网络快上3~10倍。 

5.GoogLeNet

GooLeNet是作者参加比赛时所用的网络,网络结构如下所示: 

è¿éåå¾çæè¿°

表中的#1×1,#3×3,#5×5列分别表示Inception中的三种不同的卷积层中的feature map数目,#3×3reduce,和#5×5reduce分别表示Inception中这卷积层之前的1×1的卷积层的filter数目,可以看出1×1通过降低输出的feature map数目,从而起到降维减少计算量的作用。pool proj表示Inception中pooling层之后使用1×1的卷积层的数量。
作者在最后使用的average pooling代替了FC层。作者提出他们使用的22层的神经网络是按照depth列中数值相加计算得到的,每个Inception算两层(因为有1×1卷积层)。
作者提出由于GooLeNet层数较多,为了避免梯度消失,作者在网络中加上了两个辅助的分类器以增读的传播,同时两个辅助分类器的loss分别为0.3,而在实际测试时则不使用这两个辅助的分类器。但是作者最后又提到,通过后面的实验看出辅助的分类器作用并不明显,并且不需要两个,有一个就可以达到同样的效果。

6. Conclusion

GooLeNet通过使用Inception网络结构提取了图像中多个尺度的信息,也就能够提取更多的特征,而同时使用1×1大小的卷积层进行降维,使得计算量能够降低好几倍,这也就是GooLeNet的创新点。以后在自己的网络中也可以试着增加Inception网络结构,或者在后面当feature map数量过多时使用1×1卷积核降维,降低计算量。

本课程适合具有一定深度学习基础,希望发展为深度学习之计算机视觉方向的算法工程师和研发人员的同学们。基于深度学习的计算机视觉是目前人工智能最活跃的领域,应用非常广泛,如人脸识别和无人驾驶中的机器视觉等。该领域的发展日新月异,网络模型和算法层出不穷。如何快速入门并达到可以从事研发的高度对新手和中级水平的学生而言面临不少的挑战。精心准备的本课程希望帮助大家尽快掌握基于深度学习的计算机视觉的基本原理、核心算法和当前的领先技术,从而有望成为深度学习之计算机视觉方向的算法工程师和研发人员。本课程系统全面地讲述基于深度学习的计算机视觉技术的原理并进行项目实践。课程涵盖计算机视觉的七大任务,包括图像分类、目标检测、图像分割(语义分割、实例分割、全景分割)、人脸识别、图像描述、图像检索、图像生成(利用生成对抗网络)。本课程注重原理和实践相结合,逐篇深入解读经典和前沿论文70余篇,图文并茂破译算法难点, 使用思维导图梳理技术要点。项目实践使用Keras框架(后端为Tensorflow),学员可快速上手。通过本课程的学习,学员可把握基于深度学习的计算机视觉的技术发展脉络,掌握相关技术原理和算法,有助于开展该领域的研究与开发实战工作。另外,深度学习之计算机视觉方向的知识结构及学习建议请参见本人CSDN博客。本课程提供课程资料的课件PPT(pdf格式)和项目实践代码,方便学员学习和复习。本课程分为上下两部分,其中上部包含课程的前五章(课程介绍、深度学习基础、图像分类、目标检测、图像分割),下部包含课程的后四章(人脸识别、图像描述、图像检索、图像生成)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值