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

Going deeper with convolutions-GoogLeNet(阅读)

2015-12-29 15:32 417 查看
Abstract

网络结构称为Inception,名字的获得来自Network in Network。这个网络是一个分类和检测的网络。该网络最大的特点就是提升了计算资源的利用率。在网络需要的计算不变的前提下,通过工艺改进来提升网络的宽度和深度。最后基于Hebbian Principle和多尺寸处理的直觉来提高性能。GoogLeNet有22层。

Introduction

GoogLeNet 用了比"Imagenet classification with deep convolutional neural network"少12倍的参数,但正确率更高。本文最大的工作类似于R-CNN。因为算法的the ongoing traction of mobile和embedded计算,算法的效率变得很重要。

Related Work

论文参考文献15使用不同尺度的Gabor过滤器来处理多尺度问题,同本文的Inception Model类似。GoogLeNet用了很多相同的层,共22层。Network in Network用来提高神经网络的power。本文用Network in Network有两方面用途,使用了很多1×1的卷积核,降低维度来降低计算瓶颈,也可以提高网络的深度和宽度。R-CNN将检测分成两部分:在浅层利用颜色、次像素组成等信息检测,再利用深层的CNN进行分类。

Motivation and High Level Considerations

网络更深更大,容易导致过拟合,且增加计算性能的消耗。其根本的解决办法是将全连接层变为稀疏链接层。对于非均衡的稀疏数据,现在的计算效率不高。"On two-dimensional sparse matrix partitioning:
Models, methods, and a recipe"提出将多个稀疏矩阵合并成相关的稠密子矩阵来解决问题。

Architectural Details

Inception主要的思想就是如何找出最优的局部稀疏结构并将其覆盖为近似的稠密的组件。"Provable bounds for learningsome
deep representations"提出一个层与层的结构,在结构的最后一层进行相关性统计,将高相关性的聚集到一起。这些簇构成下一层的单元,与上一层的单元连接。假设前面层的每个单元对应输入图像的某些区域,这些单元被滤波器进行分组。低层(接近input层)的单元集中在某些局部区域,意味着在最终会得到在单个区域的大量群,他们能在下一层通过1*1卷积覆盖"Network
in network"。然而也可以通过一个簇覆盖更大的空间来减小簇的数量。为了避免patch-alignment问题,现在滤波器大小限制在1*1,3*3和5*5(主要是为了方便也非必要)。在pooling层添加一个备用的pooling路径可以增强效率。Inception模块都堆在其他Inception模块的上面,上述模块一个巨大的问题就是,即使是一个合适数量的卷积,也会因为大量的滤波而变得特别expensive。经过pooling层输出的合并,最终可能会导致数量级增大不可避免。处理效率不高导致计算崩溃。

第二种方法:在需要大量计算的地方进行慎重的降维。压缩信息以聚合。1*1卷积不仅用来降维,还用来修正线性特性。

如何发现最优结构呢? 较低的层次对应着图像的某个区域,使用1×1的卷积核仍然对应这个区域,使用3×3的卷积核,可以得到更大的区域对应。因而设计如图(a)。



为了降维,使用1×1的核进行降维,设计如图(b)。降维能够起效主要得益于embedding技术的发展,即使较低的维度仍然可以包含很多信息。

在Filter concatenation层将1×1/3×3/5×5的卷积结果连接起来。如此设计的好处在于防止了层数增多带来的计算资源的爆炸性需求。从而使网络的宽度和深度均可扩大。使用了Inception层的结构可以有2-3×的加速。

GoogLeNet



#3*3 reduce代表3*3卷积前1*1滤波器的个数。所有的reduction/projection层都利用了修正线性激活。网络包含22层带参数层和5层不含参数的pooling层。总共有约100层。分类前的pooling是基于[12],只是我们利用了不同的线性层。有利于精细的调节网络,但不期望它有多出色。从全连接层move到下采样会将Top1准确率提高0.6%,但是dropout仍然需要。GoogLeNet通过减少1*1的卷积核数量来降维。对于参数计算不是很清楚,(7x7+1)x64=3200?为什么是2700?哪位网友知道,留个言,非常感谢。



在浅层网络来说,相对中间的网络产生的特征非常有辨识力。在这些层中增加一些额外的分类器,能个增加BP的梯度信号和提供额外的正则化。这些分类器将小德卷积网络放在4a和4b的输出上。在训练过程中,损失会根据权重叠加,而在测试时丢弃。

Training Methodology

利用"Large scale distributed deep networks"提供的分布式机器学习系统和数据平行。用数个高端GPU,一周达到收敛。利用"On
the importance
of initialization and momentum in deep learning"异步随机梯度下降,0.9动量,学习率每八个周期下降4%。最后用"Acceleration of stochastic approximation by averaging"来创建最后用来测试的模型。

采样变化很大。"Some improvements on deep convolutional neural network based imageclassification"的光度扭曲有助于对付过拟合。还进行了随机插入。

ILSVRC 2014 Classification Challenge Setup and Results

①训练了7个网络,只是采样方法和随机输入图像不同,取综合值。

②将图像的短边缩放成4中:256,288,320,352。取图像的上中下块。每块取四个角、中间的224*224和将其缩放到224*224以及它们的镜像。结果是4*3*6*2=144,即每个图像采样144块输入图。但可能实际生产中不能应用。

③maxpooling和在分类器平均,最后的结果都不如简单的平均好。

ILSVRC 2014 Detection Challenge Setup and Results

方法与R-CNN很像,但增加了Inception模块。结合了用multi-box 的方法和Selective Search来提高定位框的召回率。这让从Selective Search得到的结果减半。再加上200个的方法,总共占60%,可以将覆盖率从92%提高到93%。上述方法可以将准确率相对单一模型提高1%。在分类区域的时候利用6个卷积网络科将准确率从40%提高到43.9%。

最后GoogLeNet最好,比去年大了接近一倍。GoogLeNet在单模型的情况下,只比最好的低0.3%,但那个用了3个模型,而GoogLeNet在多模型的情况下结果好得多。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: