专栏首页mathorGoogLeNet论文阅读

GoogLeNet论文阅读

论文下载

在2014年的ImageNet图像识别挑战赛中,一个名叫GoogLeNet的网络结构大放异彩。它虽然在名字上向LeNet致敬,但在网络结构上已经很难看到LeNet的影子。在随后几年里,研究人员对GoogLeNet进行了数次改进,本篇文章介绍的是这个模型系列的第一个版本

摘要中,作者提出了一种代号为"Inception"(得名于同名电影《盗梦空间》(Inception))的深度卷积神经网络结构,这个结构主要是将几个卷积层以及池化层并联在一起,具体的下面再具体讲解

1.Introduction

这篇文章的引言其实没有说很多有关本身网络的内容,而是铺垫性的介绍了以往深度学习的发展,其中提到一个令人鼓舞的消息是,大部分的进步不仅仅是更强大硬件、更大数据集、更大模型的结果,而主要是新的想法、算法和网络结构改进的结果

我们以"Inception module的形式引入了一种新层次的组织方式,在更直接的意义上增加了网络的深度"。话说回来,当年ILSVRC的比赛,GoogLeNet和VGG分别取得了1,2名,而这两个网络的结构相比以往都更深

2.Related Work

作者提到,从LeNet-5开始,卷积CNN通常有一个标准的结构——堆叠的卷积层(后面也可能会跟归一化和池化层)后面是一个或多个全连接层,这个基本设计的变种在图像分类中很流行,并且到目前为止的表现也都不错。但是对于更大的数据集,例如ImageNet来说,目前的趋势是增加层的数目和层的大小,同时利用Dropout来解决过拟合问题

受灵长类视觉皮层神经科学模型的启发,Serre等人使用了一系列固定的不同大小的Gabor滤波器来处理多尺度。我们使用一个了类似的策略。然而,与固定的2层深度模型相反,Inception结构中所有的滤波器是学习到的。此外,Inception层重复了很多次,在GoogLeNet模型中得到了一个22层的深度模型

Lin等人为了增加神经网络的表现能力提出了Network-in-Network的新方法,在他们的模型中,网络中添加了1×1的卷积层。这里首先解释一下什么是Network-in-Network(简称NiN)。在AlexNet和VGG的网络中,都是Conv->Conv->FC->FC这种结构,而NiN使用1×1的卷积层来代替全连接层,从而使空间信息能够自然传递到后面的层去,下图对比了NiN同AlexNet和VGG等网络在结构上的主要区别(右边的是NiN结构)

那么使用1×1的卷积层到底有什么作用呢?首先1×1卷积没有识别高和宽维度上相邻元素构成的模式的功能。实际上,1×1卷积的作用主要发生在Channel维上,下图展示了使用输入Channel为3、输出Channel为2的1×1卷积核的计算机过程。值得注意的是,输入核输出具有相同的高和宽。输出中的每个元素来自输入中在高和宽上相同位置的元素在不同通道之间的按权重累加。假设我们将Channel维当作特征维,将高和宽维度上的元素当成数据样本,那么1×1卷积层的作用与全连接层等价

讲完了NiN相关的内容,我们再回到论文中,GoogLeNet也大量使用了这个方法,但是,在我们的设置中,1×1卷积主要是用来作为降为模块来移除卷积瓶颈,否则将会限制我们网络的大小。这不仅允许了深度的增加,而且允许我们网络的宽度增加而且不会产生明显的性能损失。

目前最好的目标检测是Girshick等人的基于区域的卷积神经网络(R-CNN)方法。R-CNN将整个检测问题分为两个自问题:利用低层次的提示,例如颜色、纹理以跨类别的方式来产生目标位置候选区域,然后用CNN分类器来识别那些位置上的对象类别。作者在其检测提交中也采用了类似的方式,但倾向于增强这两个阶段,例如对于更高的目标边界框召回使用多盒预测,并融合了更好的边界框候选区域分类方法

3.Motivation and High Level Consierations

作者在这篇文章中强调了很多遍,提高深度神经网络性能最直接的方式是增加它们的尺寸。不仅包括增加深度(网络层次的数目),也包括它的宽度(每一层的单元数目)。但是,这个简单的方案有两个主要的缺点。更大尺寸意味着更多的参数,这会使增大的网络更容易过拟合 ,尤其在训练集的标注样本有限的情况下;另一个缺点是计算资源使用的显著增加。在一个深度视觉网络中,如果两个卷积层相连。它们的滤波器数目的任何均匀增加都会引起计算量平方式的增加

解决这两个问题的一个基本方式就是引入稀疏性,并将全连接层替换为稀疏的全连接层,甚至是卷积层

稀疏连接有两种方法,一种是空间(spatial)上的稀疏连接,也就是传统的CNN卷积结构:只对输入图像的某一部分patch进行卷积,而不是对整个图像进行卷积,共享参数降低了总参数的数目减少了计算量;另一种方法是在特征(feature)维度进行稀疏连接,就是前一节提到的在多个尺寸上进行卷积再聚合,把相关性强的特征聚集到一起,每一种尺寸的卷积只输出256个特征中的一部分,这也是种稀疏连接。作者提到这种方法的理论基础来自于Arora et al的论文Provable bounds for learning some deep representations

遗憾的是,当碰到在非均匀的稀疏数据结构上进行数值计算时,现在的计算架构效率非常低下。即使算法运算的数量减少100倍,查询和缓存丢失上的开销仍占主导地位:切换到稀疏矩阵可能是不可行的。作者提到如今的计算机对稀疏数据进行计算的效率是很低的,即使使用稀疏矩阵算法也得不偿失

这一部分我看的不是很懂,因为涉及到比较复杂的数学背景,所以暂时略过,问问别人,问懂了以后再来填坑

4.Architectural Details

Inception架构的主要思想是找出如何让已有的稠密组件接近于覆盖卷积视觉网络中的最佳局部稀疏结构。作者首先提出下面这样的基本结构

针对该结构图,做以下说明:

  1. 采用不同大小的卷积核意味着不同的感受野,最后拼接意味着不同尺度特征的融合
  2. 之所以卷积大小采用1、3和5,主要是为了方便对齐。设定卷积步长stride=1之后,只要分别设定padding=0、1、2,那么卷积之后高和宽的大小就可以保证相同,然后将这些特征按照Channel叠在一起
  3. 文章说很多地方都表明Pooling挺有效,所以Inception里面也嵌入了
  4. 网络越到后面,特征越抽象,而且每个特征所涉及的感受野也更大了,因此随着层数的增加,3×3和5×5卷积核的比例也要增加。但是,使用5×5的卷积核仍会带来巨大的计算量。为此,论文借鉴NiN结构,采用1×1卷积核来进行降维

例如,上一层的输出为100×100×128,经过具有256个输出的5×5卷积层之后(stride=1,padding=2),输出维度为100×100×256.其中,卷积层的参数为128×5×5×256。假如上一层输出先经过具有32个输出的1×1卷积层,再经过具有256个输出的5×5卷积层,那么最终的输出数据仍为100×100×256,但卷积参数量已减少为128×1×1×32 + 32×5×5×256,大约减少了4倍

具体改进后的Inception Module如下图所示

5.GoogLeNet

取名GoogLeNet是对Yann LeCuns的LeNet-5网络致敬。我们也使用了一个稍微优质的更深更宽的Inception网络,但将其加入到组合中似乎只稍微提高了结果

采用Incetion架构的GoogLeNet如下所示

总体结构:

  1. 包括Inception模块的所有卷积,都采用了ReLU激活函数
  2. 输入图像的大小是3×224×224,并且对RGB三通道都减去了均值
  3. #3×3 reduce和#5×5分别表示3×3和5×5的卷积前,降维层所用的1×1卷积核的数量;pool proj表示进行max-pooling之后,投影层所用的1×1卷积核的数量。所有的这些降维/投影层也都使用了ReLU
  4. 网络包含22个带参数的层(如果考虑pooling层就是27层),独立成块的层总共有约有100个
  5. 网络中间的层次生成的特征会非常有区分性,给这些层增加一些辅助分类器。这些分类器以小卷积网络的形式放在Inception(4a)和Inception(4b)的输出上。在训练过程中,损失会根据折扣后的权重(折扣权重为0.3)叠加到总损失中

辅助分类器的具体细节:

  1. avg-pooling size=5×5,stride=3,(4a)的输出为4×4×512,(4d)的输出为4×4×528
  2. 具有128个卷积核的1×1小卷积,作用是降维和ReLU激活
  3. FC layer有1024个单元和ReLU激活函数
  4. Dropout的失活概率为30%
  5. 使用带有Softmax损失的线性层作为分类器

最终的网络模型如下图

6.Training Methodology

利用分布式机器学习系统和数据并行来训练网络,虽然实现时只用了CPU,但其实是可以用个别高端的GPU一周达到收敛的。采用异步随机梯度下降,momentum=0.9,learning rate每8个epoch下降4%。用Polyak平均来创建最后的模型。

图像采样的patch大小从图像的8%到100%,选取的长宽比在3/4到4/3之间,光度扭曲也有利于减少过拟合,还使用随机插值方法结合其他超参数的改变来调整图像大小

7.ILSVRC 2014 Classification Challenge Setup and Results

ILSVRC 2014的分类任务有1000个label,120万张训练图片,5万张验证图片,10万张测试图片,每一张图片与一个实际类别相关联,性能度量基于分类器预测的最高分。常用指标有两个(本次比赛采用top-5错误率):

  • top-1准确率:比较实际类别与第一个预测类别;
  • top-5错误率:比较实际类别与前5个预测类别,如果图像实际类别在top-5中,则认为分类正确,与其在top-5钟的排名无关

我们参加竞赛时没有使用外部数据来训练。除了本文前面提到的训练技术外,我们在获得高性能的测试中采用了一系列技巧,具体如下:

  1. 训练了7个GoogLeNet,初始化和权重都相同,只是采样方法和随机输入图像不同
  2. 将图像的短边分别缩放成256、288、320、352这4中尺度。取图像的左中右块(或上中下块)。每块取四个角和中间的224×224的裁剪,和将这个块缩放到224,以及它们的镜像。这样每个图像有436*2=144个,但实际可能不需要这么多
  3. softmax概率在多个裁剪图像上和所有单个分类器上进行平均,然后获得最终预测。在实际中,我们分析了验证数据的替代方法,例如裁剪图像上的maxpooling和分类器的平均,但是它们的效果都比简单平均略逊

下表显示了过去三年中一些表现最好的方法的统计

8.ILSVRC 2014 Detection Challenge Setup and Results

检测任务的标准是检测到的bounding box与ground truth的交叠比大于50%且正确,图像中可能包含多个目标或者不包含目标,尺度可能很大可能很小,采用的结果报告方式是mAP。图中的表4是一些比赛的结果。表5是单个模型的性能比较

9.Conclusions

对于分类和检测,作者原本预期通过更昂贵的类似深度和宽度的非Inception网络实现类似的结果。然而,作者的方法取得了可靠的证据,即转向更稀疏的结构一般来说是可行有用的想法。这表明未来的工作将在[2]的基础上以自动化方式创建更稀疏更精细的结构,以及将Inception架构的思考应用到其它领域

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JAVA——安装jdk与配置环境变量

    mathor
  • AutoEncoder

    自编码AutoEncoder是一种无监督学习的算法,他利用反向传播算法,让目标值等于输入值。什么意思呢,下面举个例子

    mathor
  • 百度语音合成模型Deep Voice3

    Deep Voice3是由百度提出的一个全新的全卷积TTS架构。百度的主要工作分为如下五个方面:

    mathor
  • 反向传播算法推导-卷积神经网络

    原创声明:本文为 SIGAI 原创文章,仅供个人学习使用,未经允许,不能用于商业目的。

    SIGAI学习与实践平台
  • 人脸识别算法系列文章之facenet讲解

    人脸识别所面临的一个挑战就是你需要解决一次学习问题,这意味着在大多数人脸识别应用中,你需要通过单单一张图片或者单单一个人脸样例就能去识别这个人。

    算法发
  • ZKEACMS的高级自定义 - 内容和模板

    使用自定义内容的功能,可以方便的创建特有的内容类型,每个类型的字段都可以自定义,例如添加一个“个人信息”的类型,有两个字段,姓名和地址:

    Mr. Wei
  • Sprite 从PS切图到具体实现完整过程

    从入门到进错门
  • iOS音视频接入 - 使用短视频UGCKit问题

    在项目中集成了腾讯的短视频UGCKit,但是我们的界面并不打算用UGCKitRecordViewController,而是要自定义一下,但是要用到进度条(UGC...

    小明同学接音视频
  • Kubernetes 故障诊断神器 kubectl-debug 入门教程

    容器技术的一个最佳实践是构建尽可能精简的容器镜像。但这一实践却会给排查问题带来麻烦:精简后的容器中普遍缺失常用的排障工具,部分容器里甚至没有 shell (比如...

    iMike
  • 哇~这么Deep且又轻量的Network,实时目标检测

    最近挺对不住关注“计算机视觉战队”平台的小伙伴,有段时间没有给大家分享比较硬比较充实的“干货”了,在此向大家表示抱歉,今天抽空之余,想和大家说说目标的实时检测。

    计算机视觉研究院

扫码关注云+社区

领取腾讯云代金券