此文章是vip文章,如何查看?  

1,点击链接获取密钥 http://nicethemes.cn/product/view29882.html

2,在下方输入文章查看密钥即可立即查看当前vip文章


物体分类(三)GoogLeNet

  • 时间:
  • 浏览:
  • 来源:互联网

前言

GoogLeNet是2014年ImageNet挑战赛(ILSVRC14)的冠军,将Top5的错误率降低到6.67%,是由谷歌(Google)研究出来的深度网络结构,为什么不叫GoogleNet,而叫GoogLeNet呢?据说是为了向“LeNet”致敬,因此取名为GoogLeNet。从LeNet到VGGNet,提升网络性能最直接的办法就是增加网络深度和宽度,深度指网络层次数量、宽度指神经元数量。但这种方式存在以下问题:

  • 参数太多,在训练数据有限情况下,容易过拟合
  • 网络越深、越宽,计算复杂度越大,更难以应用
  • 网络越深,梯度越往后穿越容易消失,难以优化模型、更难收敛

观察之前的经典神经网络可以发现,模型的大多数参数都出现在全连接层。GoogLeNet就是基于这一点,考虑在增加网络深度的基础上,同时减少模型参数诞生的。同时,GoogLeNet的深度也到了22层。

论文地址:

https://arxiv.org/pdf/1409.4842.pdf

https://arxiv.org/pdf/1502.03167.pdf

https://arxiv.org/pdf/1512.00567v3.pdf

Inception V1

Inception就是为了解决上文中的问题出现的,论文认为解决上述缺点的根本方法是将全连接甚至一般的卷积都转化为稀疏连接。但是在实现上,全连接变成稀疏连接后实际计算量并不会有质的提升,因为大部分硬件是针对密集矩阵计算优化的,稀疏矩阵虽然数据量少,但是计算所消耗的时间却很难减少。

那么,有没有一种方法既能保持网络结构的稀疏性,又能利用密集矩阵的高计算性能。大量的文献表明可以将稀疏矩阵聚类为较为密集的子矩阵来提高计算性能,就如人类的大脑是可以看做是神经元的重复堆积,因此,GoogLeNet团队提出了Inception网络结构,就是构造一种“基础神经元”结构,来搭建一个稀疏性、高计算性能的网络结构。

如图1(a),通过设计一个稀疏网络结构,但是能够产生稠密的数据,既能增加网络表现,又能保证计算资源的使用效率,谷歌提出了最原始Inception的基本结构,也就是Inception V1,如图1。特点如下:

  • 采用不同大小的卷积核意味着不同大小的感受野,可以提取更丰富的特征,最后横向拼接意味着不同尺度特征的融合
  • 采用大小为1、3、5的卷积核,stride=1,通过pading后,保证卷积结果和输入大小一样
  • 鉴于pooling的有效性,Inception里面也嵌入了一层并行大小为3 * 3的max pooling,构成了inception module的四个分支
  • 对前两步的结果通过横向concat拼接到一起,得到卷积结果,如图2
图1 Inception

图1(a)中使用5x5卷积核仍然会带来巨大的计算量,因此论文借鉴了NIN(Network In Network)的思想进行降维来减少参数。如图2,参数个数为:1*1*192*64 + 3*3*192*128 + 5*5*192*32。如果在5*5的卷积之前先加入一层1*1*192*16的卷积降维,那么参数将由 5*5*192*32 变为 1*1*192*16 + 5*5*16*32,可见参数个数会大大降低,如图1(b)。

图2 Inception V1
图3 GoogLeNet

如图3,是GoogLeNet的结构图,特点如下:

  • 采用了模块化的结构(9个Inception),方便增添和修改
  • 最后去除FC,采用了average pooling层(实际上还是加入了FC,方便调整输出),想法来自NIN,事实证明可以将TOP1 accuracy提高0.6%
  • 虽然移除了全连接,但是网络中依然使用了Dropout,见表1
  • 为了避免因为网络较深导致的梯度消失现象,网络额外增加了2个辅助的softmax用于向前传导梯度(辅助分类器/loss)。辅助分类器是将中间某一层的输出用作分类,并按一个较小的权重(0.3)加到最终分类结果中,这样相当于做了模型融合,同时给网络增加了反向传播的梯度信号,也提供了额外的正则化,对于整个网络的训练很有裨益。而在实际测试的时候,这两个额外的softmax会被去掉。其实这种训练方式可以看作将几个不同深度的子网络合并到一块进行训练,由于网络的卷积核共享,因此计算的梯度可以累加,这样最终的梯度便不会很小。在测试的时候,使用最深的那个。

:上表中的#3x3 reduce,#5x5 reduce表示在3x3,5x5卷积操作之前使用了1x1卷积的数量

GoogLeNet网络结构明细表解析如下:

0、输入
原始输入图像为224x224x3,且都进行了零均值化的预处理操作(图像每个像素减去均值)。
1、第一层(卷积层)
使用7x7的卷积核(滑动步长2,padding为3),64通道,输出为112x112x64,卷积后进行ReLU操作
经过3x3的max pooling(步长为2),输出为((112 - 3+1)/2)+1=56,即56x56x64,再进行ReLU操作
2、第二层(卷积层)
使用3x3的卷积核(滑动步长为1,padding为1),192通道,输出为56x56x192,卷积后进行ReLU操作
经过3x3的max pooling(步长为2),输出为((56 - 3+1)/2)+1=28,即28x28x192,再进行ReLU操作
3、第三层(Inception层)
分为四个分支,采用不同尺度的卷积核来进行处理
(1)64个1x1的卷积核,然后RuLU,输出28x28x64
(2)96个1x1的卷积核,作为3x3卷积核之前的降维,变成28x28x96,然后进行ReLU计算,再进行128个3x3的卷积(padding为1),输出28x28x128
(3)16个1x1的卷积核,作为5x5卷积核之前的降维,变成28x28x16,进行ReLU计算后,再进行32个5x5的卷积(padding为2),输出28x28x32
(4)pool层,使用3x3的核(padding为1),输出28x28x192,然后进行32个1x1的卷积,输出28x28x32。
将四个结果进行连接,对这四部分输出结果的第三维并联,即64+128+32+32=256,最终输出28x28x256。

在ILSVRC 2014挑战赛上,GoogLeNet也采用了一些训练技巧提高性能和准确率:

  • 训练了7个GoogLeNet网络来集成预测,7个网络的初始值和学习率都一样,采用了不同的采样方法和不同的训练集图片输入顺序
  • 图像增强:将原始输入图片的最短维度(高或者宽)调整为256、288、320、352四个维度(x 4),;取调整后图片的左、中、右(高比宽大的取上、中、下)三个正方形(x 3),正方形的大小和前面四个数值相同;取所有正方形的的四个角和中心大小为224 x 224大小的正方形,并把正方形也resize到224 x 224大小(x 6);对所有得到224 x 224大小的图片再取一次镜像(翻转)(x 2)。这样一张原始图片就变为了:4 x 3 x 6 x 2 = 144 张图片。但是作者也在论文中说明了,这么多的增强可能是不必要的,因为在一定数量的crop图片增强以后,更多的图片增强效果就会非常有限。
  • 对图像增强的结果和所有softmax的概率求平均,得到最终的预测结果。

表3可以看到增加模型数量和图像增强以后的准确率提升,表2是和其他模型的对比结果。

Inception V2

大尺寸的卷积核可以带来更大的感受野,也意味着更多的参数。GoogLeNet的表现很好,但是如果想要通过简单地放大Inception结构来构建更大的网络,则会立即提高计算消耗。此外,在V1版本中,文章也没给出有关构建Inception结构注意事项的清晰描述。因此,在V2中作者首先给出了一些已经被证明有效的通用准则和优化方法。这些准则和方法适用但不局限于Inception结构。

  • 避免表示瓶颈,应该避免极端压缩。从输入到输出,feature map的宽和高基本都会逐渐变小,但是不能一下子就变得很小。理论上,信息内容不能仅通过表示的维度来评估,因为它丢弃了诸如相关结构的重要因素,维度仅提供信息内容的粗略估计。
  • 对于输出的维度channel,一般来说会逐渐增多(每层的num_output),否则网络会很难训练。高维特征更易处理、更易区分,会加快训练。
  • 空间聚合可以在较低维度嵌入上完成,而不会在表示能力上造成过多损失,比如在 3 x 3 卷积之前可以先通过1 x 1卷积降维,且可以加快计算速度。
  • 平衡网络的宽度和深度。通过平衡每个阶段的滤波器数量和网络的深度可以达到网络的最佳性能。增加网络的宽度和深度可以有助于更高质量的网络。然而,如果两者并行增加,则可以达到恒定计算量的最佳改进。因此,计算应该在网络的深度和宽度之间以平衡方式进行分配。

GoogLeNet设计的初衷就是要又准又快,而如果只是单纯的堆叠网络虽然可以提高准确率,但是会导致计算效率有明显的下降,所以如何在不增加过多计算量的同时提高网络的表达能力就成为了一个问题。Inception V2版本的解决方案就是修改Inception的内部计算逻辑,GoogLeNet团队提出可以用2个连续的3x3卷积层组成的小网络来代替单个的5x5卷积层,即在保持感受野范围的同时又减少了参数量,如图4,这就是Inception V2结构。

图4 Inception V2

 

Inception V2使用两个个连续的3x3卷积代替单个的5x5的大卷积,同时还提出了著名的Batch Normalization(BN)。BN是非常有效的正则化方法,可以让大型卷积网络的训练速度加快,同时提高收敛后的分类准确率。BN在训练模型时,会对每个batch中的数据进行标准化处理,使输出规范化到0~1的正态分布。

Inception V3

Inception V2可以看出,大卷积核完全可以由一系列的3x3卷积核来替代,那能不能再分解得更小一点呢?我们仍然可以问这个问题,例如2×2的卷积。然而,通过使用非对称卷积,可以做出甚至比2×2更好的效果,即n×1。在理论上,可以进一步论证,可以通过1×n卷积再接一个n×1卷积替换任何n×n卷积,并且随着n增长,计算成本显著减少(如图5)。另外,作者也发现在网络的前期使用这种分解效果并不好,在中度大小的feature map上使用效果才会更好。(对于nxn大小的feature map,建议n在12到20之间)。

图5 Inception V3

 

参考资料

https://blog.csdn.net/loveliuzz/article/details/79135583

https://blog.csdn.net/guoyunfei20/article/details/78395500

https://my.oschina.net/u/876354/blog/1637819

https://www.cnblogs.com/zhhfan/p/10122019.html

本文链接http://element-ui.cn/news/show-577383.aspx