深度学习经典论文(四)Inception V3

注:借鉴整理,仅供自学,侵删

1 四大准则

下面的准则来源于大量的实验,因此包含一定的推测,但实际证明基本都是有效的:

  1. 避免表达瓶颈,特别是在网络靠前的地方。 信息流前向传播过程中显然不能经过高度压缩的层,即表达瓶颈。从input到output,feature map的宽和高基本都会逐渐变小,但是不能一下子就变得很小。比如你上来就来个kernel = 7, stride = 5 ,这样显然不合适。另外输出的维度channel,一般来说会逐渐增多(每层的num_output),否则网络会很难训练。(特征维度并不代表信息的多少,只是作为一种估计的手段)
  2. 高维特征更易处理。 高维特征更易区分,会加快训练。
  3. 可以在低维嵌入上进行空间汇聚而无需担心丢失很多信息。 比如在进行3x3卷积之前,可以对输入先进行降维而不会产生严重的后果。假设信息可以被简单压缩,那么训练就会加快。
  4. 平衡网络的宽度与深度。

上述的这些并不能直接用来提高网络质量,而仅用来在大环境下作指导。

2 一些改变

  1. 分解卷积核尺寸(分解为对称的小的卷积核和分解为不对称的卷积核)考虑到第三条设计准则,提出来分解为对称的小的卷积核,由于feature map的临近区域具有很高的相关性,再使用空间聚合的前提下,可以减小feature map也就是activation的维度,因此也可以使用更小的滤波器(卷积)来提取局部的特征,同时这样做还可以提高计算的效率,例如将7×7的卷积替换成3个3×3卷积的叠加,将5×的卷积替换成2个3×卷积的叠加,这也是VGG所提到的改进。这在参数量和计算量上都减少了很多。多层的表达能力不会受到影响,同时增加了非线性修正,对模型的效果进行了改善。深度学习经典论文(四)Inception V3_第1张图片
    考虑到第二条设计准则提出了一种非对称的方式,不仅减少了参数量,在计算量上又降低了33%,但是作者发现,在比较前面的层使用这种结构,效果并不好,因此只有在17×17的feature map上才使用这种结构,其中n=7。

不对称分解方法有几个优点:

  • 节约了大量的参数
  • 增加一层非线性,提高模型的表达能力
  • 可以处理更丰富的空间特征,增加特征的多样性
    深度学习经典论文(四)Inception V3_第2张图片
  1. 使用辅助分类器。在GoogLeNet的原始论文中提到了,在模型的中间层上使用了辅助的分类器,因为作者认为中间层的特征将有利于提高最终层的判别力。但是在这篇文章中,作者发现辅助层在训练初期并没有起到很好的效果,只有在辅助分类器增加了BN层或者drop out时,能够提升主分类器的性能。
  2. 改变降低特征图尺寸的方式。那么传统的卷积神经网络的做法,当有pooling时(pooling层会大量的损失信息),会在之前增加特征图的厚度(就是双倍增加滤波器的个数),通过这种方式来保持网络的表达能力,但是计算量会大大增加。
    深度学习经典论文(四)Inception V3_第3张图片
    以上左图缺点:带来了一个representation瓶颈;
    右图缺点:计算量增加三倍

作者提出了一种并行的结构,使用两个并行的步长为2的模块,P 和 C。P是一个池化层,C是一个卷积层,然后将两个模型的响应组合到一起:这样做既没有造成信息提取上的损失,也能够很好的降低维度。
深度学习经典论文(四)Inception V3_第4张图片

3 网络结构

深度学习经典论文(四)Inception V3_第5张图片
任意nxn的卷积都可以通过1xn卷积后接nx1卷积来替代。实际上,作者发现在网络的前期使用这种分解效果并不好,还有在中度大小的feature map上使用效果才会更好。(对于mxm大小的feature map,建议m在12到20之间)。

Inception v2的网络在v1的基础上,进行了改进,一方面加入了BN层,减少了Internal Covariate Shift(内部neuron的数据分布发生变化),使每一层的输出都规范化到一个N(0, 1)的高斯,另外一方面学习VGG用2个3x3的conv替代inception模块中的5x5,既降低了参数数量,也加速计算。

1*1的卷积核不会带来信息损失,又减小了下一层卷积的计算量。

4 总结

低分辨率图像的识别:对于低分辨率的图像,应降低前两层的步长,或将第一个池化层去除
低输入分辨率的情况下也可以达到近乎高分辨率输入的准确率。这可能有助于小物体的探测。降低参数量、附加BN或Dropout的辅助分类器、label-smoothing三大技术可以训练出高质量的网络(适当的训练集)

Inception V3设计了3种形式的Inception模块,包括将大滤波器进行分解、分解成不对称的结构、以及通过并行结构来解决信息损失的问题,虽然模型的拓扑结构更加复杂了,但是计算量大大降低,而且模型性能大大提高了。总的看来,今后模型主要解决两个问题:

  1. 如何在计算量不增加的情况下,解决由于信息压缩造成的信息损失问题。
  2. 如果在计算量不增加的情况下,增加模型的拓扑结构,以提高模型的表达能力。

也就是说,计算量才是王道啊!

你可能感兴趣的:(深度学习经典论文)