GoogLeNet:Inception V3:Rethinking the Inception Architecture for Computer Vision论文笔记

论文地址:Rethinking the Inception Architecture for Computer Vision

前言

俗话说得好,探索的道路是永无止境的,GoogLeNet经过了Inception V1Inception V2(BN)的发展以后,Google的Szegedy等人又对其进行了更深层次的研究和拓展,在本文中,作者提出了当前环境下,网络设计的一些重要准则,并根据这些准则,对原有的GoogLeNet进行了改进,提出了一个更加复杂、性能更好的模型框架:Inception V3。这篇文章证明了这些改进的有效性,并为以后的网络设计提供了新的思路。

背景

自ILSVRC2014之后,GoogLeNet备受追捧,它具有非常好的性能,虽然它的网络拓扑比较复杂,但是由于其特殊的设计模式(见前两篇文章),它的参数量、内存与计算资源的消耗都比传统的网络、甚至是同期的VGG相比,都要小很多,因此GoogLeNet的适用性更强。但是GoogLeNet也存在它的缺陷,Inception的复杂性注定了网络的改变会很困难,随着网络结构的拓展,如果仅仅是简单的通过复制模块来对模型进行放大,模型计算上的优势将会消失,并且GoogLeNet原文中也并没有提出网络设计的原理和准则,因此很难在此基础上进行改变。

本文贡献

提供了一些通用的设计准则以及优化思路,并对GoogLeNet进行拓展,设计出了更加复杂、性能更好的Inception V3的结构。

设计准则

  1. 避免表达的瓶颈,表达的尺寸(即feature map的大小)不应该出现急剧的衰减,如果对流经层(尤其是卷积层)的信息过度的压缩,将会丢失大量的信息,对模型的训练也造成了困难。
  2. 在网络中对高维的表达进行局部的处理,将会使网络的训练增快。
  3. 在较低维度的输入上进行空间聚合,将不会造成任何表达能力上的损失,因为feature map上,临近区域上的表达具有很高的相关性,如果对输出进行空间聚合,那么将feature map的维度降低也不会减少表达的信息。这样的话,有利于信息的压缩,并加快了训练的速度。
  4. 设计网络的深度和宽度达到一个平衡的状态,要使得计算资源平衡的分配在模型的深度和宽度上面,才能最大化的提高模型的性能。

改进方案

  1. Factorizing Convolutions with Large Filter Size
    考虑到第三条设计准则,由于feature map的临近区域具有很高的相关性,再使用空间聚合的前提下,可以减小feature map也就是activation的维度,因此也可以使用更小的滤波器(卷积)来提取局部的特征,同时这样做还可以提高计算的效率,例如将7*7的卷积替换成3个3*3卷积的叠加,将5*5的卷积替换成2个3*3卷积的叠加,这也是VGG所提到的改进。
    这里写图片描述
    这在参数量和计算量上都减少了很多,详见(简书专栏)。多层的表达能力不会受到影响,同时增加了非线性修正,对模型的效果进行了改善。
    那么参数量和计算量可否进一步的减少呢,见下图:
    这里写图片描述
    作者又提出了一种非对称的方式,不仅减少了参数量,在计算量上又降低了33%(感兴趣的同学可以自己推一下)。
    于是就衍生出了如下图的结构:
    这里写图片描述
    但是作者发现,在比较前面的层使用这种结构,效果并不好,因此只有在17*17的feature map上才使用这种结构,其中n=7。
  2. Utility of Auxiliary Classifiers
    在GoogLeNet的原始论文中提到了,在模型的中间层上使用了辅助的分类器,因为作者认为中间层的特征将有利于提高最终层的判别力。但是在这篇文章中,作者发现辅助层在训练初期并没有起到很好的效果,只有在增加了BN层或者drop out时,能够提升主分类器的性能。

  3. Efficient Grid Size Reduction
    为了避免第一条准则中提到的计算瓶颈所造成的的信息损失,一般会通过增加滤波器的数量来保持表达能力,但是计算量会增加。作者提出了一种并行的结构,使用两个并行的步长为2的模块,P 和 C。P是一个池化层,C是一个卷积层,然后将两个模型的响应组合到一起:
    这里写图片描述
    这样做既没有造成信息提取上的损失,也能够很好的降低维度。

新的结构

这里写图片描述
其中figure5为:
这里写图片描述
figure6为:
这里写图片描述
figure7为:
这里写图片描述

针对低分辨率输入的改进

在这里还想提到的就是低分辨率的问题,机器所要识别的目标并不总是高分辨率的,有可能是比较小,或者分辨率比较低的。
常用的做法是使用更高分辨率的接受域,但是有时候我们需要分清,究竟是使用更高分辨率接受域的效果,还是更大的模型容量和计算量的效果。
作者提出的方法如下:针对低分辨率的图像输入,应该降低前两层的步长,或移除第一个池化层。

总结

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

  1. 如何在计算量不增加的情况下,解决由于信息压缩造成的信息损失问题。
  2. 如果在计算量不增加的情况下,增加模型的拓扑结构,以提高模型的表达能力。
    也就是说,计算量才是王道啊!
发布了43 篇原创文章 · 获赞 333 · 访问量 52万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章