Going Deeper with Convolutions
CVPR2015
Christian Szegedy, Wei Liu, Yangqing Jia
(不增加计算负载的情况下实现更大的网络)
文章发表之前,那时候大多数提升深度网络性能的方法是增大网络的规模(深度和宽度),而不是通过新的思想、算法和改善网络结构。这样的方法会有两个缺点:
那么作者提出了一个方法来解决这个问题:引进稀疏连接的结构来替代全连接的结构。
实现稀疏连接有两种方法:
因此,基于Hebbian原理和多尺度处理,作者提出了Inception这个结构,该结构通过密集的、容易获得的组件覆盖了上述的最优局部稀疏连接。
而整体的GoogLeNet网络是对Inception模块的堆叠,并且为了能有效地进行梯度的反向传播,还在中间层引入了辅助分类器。
文章的最后把网络应用在分类和检测两个问题中,通过实验对网络的性能进行了评估。
作者提出Inception结构的主要思想是如何让已有的稠密组件逼近与覆盖卷积视觉网络中的最佳局部稀疏结构。
文章基于Hebbian原理和多尺度处理(这种多尺度的处理也是遵循一种视觉信息应该在不同尺度上处理并汇总的直觉),对输入做了4个分支,通过不同尺度的卷积或池化,将特征聚集成具有高相关性的单元组,最后汇总串联成单个输出向量形成下一阶段的输入。
如上图所示,Inception的结构限制在1x1、3x3、5x5的卷积之上,这主要是基于便捷性,另外作者认为pooling也能起到提取特征的作用,所以有一个分支使用了max pooling。
然而,这只是最初的设计,这样的结构会出现一个很大的问题——计算量爆炸,我的理解是随着层数的加深,filter数量的增加,再加上池化操作,5x5的filter计算开销非常大,另外,池化层输出与卷积层输出的合并也增加了输出值的数量,就造成计算量爆炸的后果,使得整个网络非常低效。
因此作者在这之上做了一些改进之后提出了第二种设计,我认为基本思想大概就是使用1x1卷积实现降维。
可以看到,作者在昂贵的3x3和5x5之前使用了1x1卷积来降维,大大降低了计算复杂度。
1x1卷积还有另外一个作用——提取更丰富特征,我觉得大概可以这样理解,该结构每个卷积后面都跟着非线性激活函数,将两个卷积串联,就能组合出更多的非线性特征。
那么,有了上面的这种结构形式,就可以实现显著增加每个阶段的单元数量而不会在后面阶段出现计算量爆炸的问题,即在不增加计算负载的条件下实现了更大的网络。
GoogLeNet的整体网络包含了以下特点:
在本文中,作者做了两个主要的实验,即把GoogLeNet应用在分类与目标检测两个问题上。
作者独立训练了7个版本的相同的GoogLeNet模型,仅在采样方法和随机输入图像顺序方面不同。在测试中,对图像进行了一些预处理,即使用了裁剪方法,对数据进行增强。最终提交在验证集和测试集上得到了top-5 6.67%的错误率,而当时最好的VGG仅得到了7.32%的效果。
检测任务的标准是检测出来的bounding box与groundtruth的交叠比大于50%且是正确的,采用的评价指标是mAP,最终的效果达到了当时最好的成绩,mAP为43.9%,比2013年的结果高了一倍。
这两个实验都说明了GoogLeNet结构在分类与检测问题上的有效性,并且在不增加计算资源的条件下,实现了更宽更深的网络,而且准确率更高。
总的来说,GoogLeNet的总体思想就是围绕两个思路进行的,在不增加计算资源的前提下,一方面通过近似稀疏化结构来增加网络的宽度,另一方面通过1x1的卷积来降维,并且在中间层增加额外的辅助分类器解决网络过深的梯度消失的问题,从而实现增加网络的深度。