题目:Going deeper with convolutions
下载地址:GoogLeNet论文
代码:GoogLeNet代码
GoogLeNet在2014年的ISCRC分类比赛中第一名。
创新点
引入Inception结构(融合不同尺度的特征信息);
使用1*1的卷积核降维以及映射处理;
添加两个辅助分类器帮助训练;
使用平均池化层代替全连接层。
摘要
目的:我们提出了一个叫Inception的深度卷积神经网络结构;
成绩:它在ILSVRC2014的分类和目标检测中取得最高水平。
优点:这个模型结构的特点是在网络内部提高资源利用率;通过精心设计,允许增加网络的深度和宽度,同时保持计算量不变;为了提高优化质量,结构决策基于Hebbian原则和多尺度信息处理设计;
提交时使用GoogLeNet是一个22层的深度网络。
1 引言
在过去三年,随着深度学习的发展,尤其是卷积网络的发展,图像识别和目标检测取得惊人的进步。这些发展不仅仅是因为强大的硬件,大数据集和大模型的出现,更主要是算法和网络的框架改进。在ILSVRC2014比赛中,选手都使用的同样的数据集完成比赛。我们提交给ILSVRC2014的GoogLeNet比两年前的AlexNet参数少12倍,同时精度更高。目标检测的最大获益不仅仅来自于使用深度网络或更大模型,而是深度框架和经典计算机视觉的共同作用,比如R-CNN算法。
另一个因素,随着移动和嵌入式计算的持续发展,算法的效率变得越来越重要,特别是考虑电力和内存的使用。本文在设计深度框架的时候考了这个因素,而不是只关注精度。对于大多数实验,模型的设计是为了在推理时保持15亿次乘加的计算预算,因此它们不仅为了纯粹的学术好奇心,而是可以以合理的成本投入真实的工程中。
论文中重点介绍代号为Inception,用于计算机视觉的搞笑深度学习网络框架。命名基于Lin的论文和“we need to go deeper”的理念。在本论文中,“deep”有两种含义:首先,引入“Inception模块”,其次可以增加网络深度。Inception模块可以给设计带来灵感,比如Arora等人的理论。该架构在ILSVRC2014比赛中,取得最好的成绩。
2 相关工作
从LeNet-5开始,CNN设计都是标准结构——堆叠卷积层(选择归一化和最大池化层)后面跟一个或多个全连接层。这种结构在MNIST,CIFAR以及ImageNet分类比赛中取得最佳结果。对于较大的数据集比如Imagenet,现在的趋势是增加层数量和层的尺寸大小,同时使用dropout解决过拟合问题。尽管担心最大池化层会引起空间信息的丢失,但是这种卷积框架也成功的被应用到定位、目标检测和人体姿态估计等领域。受Serre等人使用一系列不同大小的Gabor滤波器处理多尺度问题的启发,类似于Inception模型。Inception模型的所有滤波器都可以学习。通过多次重复使用Inception模型,可以产生深度到22层的GoogLeNet模型。
NiN是Lin等人提出的方法,目的是提高神经网络的表示能力。通过使用1*1卷积层,后面接ReLU激活函数。方便集成,所以我们大量使用这种方法在我们的结构中。1*1卷积有两个目的:降维,消除计算瓶颈;增加网络深度和宽度,不带来明显的性能损失。
当前目标检测的主要方法是Girshick等人提出的R-CNN。R-CNN检测的两个阶段:利用低层次信号(如颜色,纹理)找候选区域,再对每个候选区域用CNN分类。我们使用了类似的方法,在第一个阶段使用多个候选框来使候选框中包含真目标的比例提高,并使用了更好的识别算法。
3 动机和深层考虑
提高深度神经网络的最直接的方法是增加尺寸。包括增加网络的深度和宽度。这种方法,简单和安全。特别是在大量标记的训练集上。但是有两个缺点:
更大的尺寸产生更大的参数,容易过拟合。特别是在训练集有限时更明显。高质量的训练集收集费用昂贵,而且专业性强。
其次,对硬件计算资源要求高。卷积层的增加引起计算量按照平方级数增加。如果权重为0,会造成资源浪费。
解决办法:
(1)、引入稀疏连接取代密集链接;
理论基础:
《Provable bounds for learning some deep representations》如果数据集的概率分布可以通过一个大型稀疏的深度神经网络表示,则最优的网络拓扑结构可以通过分析前一层激活的相关性统计和聚类高度相关的神经元来一层层的构建。(当某个数据集的分布可以用一个稀疏网络表达的时候就可以通过分析某些激活值的相关性,将相关度高的神经元聚合,来获得一个稀疏的表示。)
Hebbian principle:如果两个神经元常常同时产生动作电位(fire),这两个神经元之间的连接(wire)就会变强,反之则变弱(neurons that fire together, wire together)
(2)、密集运算
提出Inception模块
4 结构细节
以模块化的方式构建Inception。Inception结构是不断堆叠模块来来提取特征,但是会增加3*3和5*5的滤波器数量,增加参数量。适量数量的5*5卷积,在具有大量滤波器的卷积层上会十分昂贵。池化层的滤波器数量和上一层一致,所以会加剧这个问题。会出现计算爆炸。所以提出了第2个方案,通过降维和投影减少计算量。这是基于嵌入的思想。在3*3和5*5之前先使用1*1进行约简。
优点:允许每个阶段增加单元的数量,不会导致计算复杂性的失控。
5 GoogLeNet
GoogLeNet命名是致敬LeNet 5。
采用224*224感受野,并采用RGB颜色通道,并采用均值减法。#3*3 reduce和#5*5reduce指的是在3*3和5*5卷积之前使用的1*1过滤器的数量。模型的推理可以在单个设备上运行,特别是内存专用较低的设备。网络深度为22层,包括池化为27层。块总数为100个。
采用平均池化取代全连接层,精度提高0.6%,但是dropout必须保留。为了避免梯度消失,网络额外增加了2个辅助的softmax用于向前传导梯度(辅助分类器)。
参考资料:
1、【论文研读】GoogLeNet-Going de在e信息处理per with convolutions - 知乎 (zhihu.com)