CV 经典主干网络 (Backbone) 系列: GoogLeNet(InceptionNet)
作者:Christian Szegedy 等
发表时间:2014
Paper 原文:Going deeper with convolutions
该篇是 CV 经典主干网络 (Backbone) 系列 下的一篇文章。
GoogLeNet 有多个版本(V1到V4),这里讲的仅仅是 V1。如果想全面了解可以参考 图像分类丨Inception家族进化史「GoogleNet、Inception、Xception」。
GoogLeNet 也叫 Inception net, 因为 GoogLeNet 中的核心组成部分就是 inception module.另外值得一提的是 GoogLeNet 的名字有向 LeNet 致敬的意思.
GoogLeNet 参加了2014年的 ImageNet 挑战赛,并取得分类任务第一名的成绩。
GoogLeNet 相比 VGG 来说网络深度更进一步,达到了 22 层, 另外在宽度上也做了拓展,但是参数量却小得多, 而且效果也很不错.
YOLO V1 的主干网络就是基于 GoogLeNet 的.
1.1 网络结构
网络结构如下,有 22 层(3 conv + 9 inception + 1 fc,其中每个 inception 层有两个卷积层).另外值得注意的是,网络有总共有三个输出.
1.2 Inception Module
Inception module 应该算是 GoogLeNet 的核心所在了.结构如下所示.
-
将 1x1, 3x3, 5x5 的 kernel 卷积后得到的特征进行融合(卷积步长stride=1,pad 分别为 0、1、2,那么卷积之后便可以得到相同维度的特征,这些特征就可以直接拼接在一起了),这实际上就是起到了一个图像金字塔的作用,即 所谓的 multiple resolution.
-
大量 1x1 的卷积, 先对网络进行压缩(减少 channel 数量),然后再进行 3x3 或者 5x5 的卷积,这样大大减少了计算量.
-
用 Global Ave Pool 取代 FC。下图可以看到,对于 FC ,超参数的个数为 7x7x1024x1024=51.3M,但是换成 Ave Pool之后,超参数数量变为0,所以这里可以起到防止过拟合的作用,另外作者发现采用 Ave Pool 之后,top-1的精度提高了大概0.6%。但是需要注意的是,在 GoogLeNet 中并没有完全取代 FC。
-
采用了辅助分类器(就是上面提到的训练的时候有多个输出)。整个模型有三个 output(比如 VGG 只有一个 output),这里的多个 output 仅仅在训练的时候用,也就是说测试或者部署的时候仅仅用最后一个输出。在训练的时候,将三个输出的loss进行加权平均,weight=0.3, 通过这种方式可以缓解梯度消失,同时作者也表示有正则化的作用。其实这个思想有点类似于传统机器学习中的投票机制,最终的结果由多个决策器共同投票决定,这个在传统机器学习中往往能提升大概2%的精度。
1.3 性能
GoogLeNet 大约 700 万个参数, MAC(multiply-add operations)约 15.5亿. 更多内容参考 GoogLeNet V1的计算量和参数量精算表.