Rethinking the Inception Architecture for Computer Vision-Inception v2 v3详细解读

作者:18届CYL

日期:2020.9.3

期刊: 2015-CVPR

标签: Inception v2 v3

《Rethinking the Inception Architecture for Computer Vision》

一、写在前面的话:若有差错 欢迎指正

背景知识区
1、Inception v1架构的各种设计决策的贡献因子并没有明确表述。而尽管直观的看inception架构是由inception模块堆叠而成,看起来网络结构好像不是很复杂,但是相对于其他如VGG这样的网络还是复杂了不少。(这里的复杂不是从参数的规模上评估,而是表示数据在层与层之间的传递复杂)。一个又复杂又不知道效果为什么这么好的网络在面对一个新的数据集时是不容易进行相应的更改来适应的。

2、不容易不代表不可以,在通用设计原则的指导下还是采用了一系列手段来组合成新的模型结构。

3、原则1:避免表征瓶颈。由于图片数据是在网络中正向传播的,经过一层又一层的滤波器提取特征。因为在高层是想要提取局部特征,所以一般来说,从输入到输出,特征图像会越来越小,同时在这个越来越小的过程中会当然会丢失掉一些重要的信息,如果减小的太快或者是最终特征图像太小就难免造成表征瓶颈。 此原则在GoogLeNet中遵守,在Inception v2中继续遵守。

4、原则2:特征越多,收敛越快。这里的特征多不是说特征图像多,而是说相互独立的特征多,特征分解的彻底。比如:人脸特征分解成人脸、人左眼、人右眼、鼻子、嘴巴、眉毛等等独立特征会比单纯的一张大脸特征收敛的快。(赫布原理)

5、原则3、大卷积核的卷积之前可以先降维,这个操作并不会造成太多的损失。例如:在33卷积核55卷积之前用1*1卷积进行压缩降维是可行的。因为具有强相关性的一组数据在降维过程中信息损失很少,而每一个feature map的同一个位置的像素对应的原输入的位置是相同的,所以这些像素是高度相关的。

6、原则4、均衡网络的宽度和深度。即两者同时适当提升,不要顾此失彼。

7、常用的模型
在这里插入图片描述

二、2、 Inceprion v2 v3相对于v1做的改进(建议对照着4个原则进行理解,同时比对v1的结构)

1、 把大卷积核分解成数个小卷积核(原则3)

思考:参照v1,损失少,大大降低计算量,增加非线性,跨通道交流的1*1卷积起了大作用。那么还有没有方法也能起到类似效果呢。

策略:
1.1: 55的卷积换成两个33卷积(感受野相同)同理77卷积可以用3个33卷积
在这里插入图片描述
问题:这么着分解可行吗?在分成两层之后中间要不要加非线性的relu激活函数?
对于第一小问:直观的看是可行的,从结果看也是可行的。但是要问严谨的数学原理,确实难以解释。

对于第二小问:
在这里插入图片描述
此图表示 非线性会比线性激活好。(即使相差很近,但是Top-1这个标准比的就是1%的提升)

1.2: 不对称卷积(空间可分离卷积),33卷积换成两个31卷积。
在这里插入图片描述
经过验证:不对称卷积的分解比较适用于feature map大小为(12-20)的。(我认为可能的原因是:层数靠前的话,提取出来的特征不明显,像素之间的相关性还没有那么大,所以用不对称分解造成的信息丢失会比较大)

2、辅助分类器的改进(好像没有对应上面的原则)

在GoogLeNet里面用了两个辅助分类器(4a和4b两个模块后面),但是事后实验证明,第一个没什么用,在v2,v3里面去掉了。(这个的作者与GoogLeNet的作者是一个作者,一个敢于指出自己问题的大佬是值得尊敬的。大名:Christian Szegegy)

3、有效地降低网格尺寸(特征图像宽度),有效的下采样技巧。(原则1)

为了避免池化后尺寸直接变为1/2可能带来的表征瓶颈,这里的策略是让:
ddk->d/2d/22k 也就是在长宽减半的同时 厚度变为2倍来防止信息丢失太多。

问题:实现这种结果的操作可以有:

  • 先用2k个步长为1的卷积核卷积,再用步长为2的池化层池化。
  • 先池化再卷积。
    在这里插入图片描述
    而先卷积再池化计算量超大(计算量集中在卷积层),不划算。先池化再卷积又会造成在池化的时候信息已经丢了,再增加厚度好像没什么用了。那么如何解决这个问题。

聪明的作者给出了他的做法:左图为操作,右图为特征图像的变化过程
在这里插入图片描述

4、扩展滤波器组(原则2)

在这里插入图片描述
这个模块是用在分类之前,可以将大特征拆成小特征。(让特征变多)

5、将上面的策略汇总提出inception v2(原则4)

在这里插入图片描述
注:figure5 是把55用两个33代替
figure6 是把分解不对称卷积
figure7 是扩展滤波器组

总体看,深度和宽度是均衡的,两者同时提升,即可以提高性能,也提高了计算效率。层数为42层,计算量为GoogLeNet的2.5倍,但仍比VGG高效的多。
在这里插入图片描述

6、使用Label Smooth替代SoftMax进行预测分类。

在这里插入图片描述

三、Incetion v3来源于结果

在这里插入图片描述
这个表中表示 在v2这个模型结构的一些策略选择。其中最后一行的另一个名字叫做Inception v3。

四、思考:(抛出小问题)

根据四个原则在v1的基础之上做了相应的改变形成Inception v2、v3,结果看起来确实有了不错的提升。我们是否可以理所当然的认为,在inception这个整体框架不变的情况下,对inception module进行小修小补,如在模块上增加7*7卷积作为第五个通道,增加模块数量来增加网络深度,增加残差策略来增快迭代速度、拓宽网络深度等操作,这些情况下经过适量调参当然可以获得更好的结果。(在我的理解中事实上v4与Inception-ResNet就是在调参与策略选择),也就是因为实验上的不错效果让从v1到v4的数个模型被框在了inception的架构里面。但是v1里面提出的主要问题:如何既利用了卷积的稀疏性又通过一定的聚类效果来得到稠密矩阵来加速训练?当时尝试给出的解决方案便是Inception module利用并行的不同大小的卷积核来可能实现一定的聚类效果。当时作者也有表示:这个网络结构实现这么好的效果需要进一步的研究来探索到底是为什么。但是后来 是否真的可以实现一定的聚类效果、正确率的提升是否与一定的聚类效果有关,这个网络结构到底为什么会得到更好的正确率 再也没有被回答过。整体的模型改进与优化是否是抛弃了追求数学上的寻找可解释性(即寻找数学因果关系)而转向了工程上的调参?神经网络这个黑匣子是不是更黑了?

猜你喜欢

转载自blog.csdn.net/cyl_csdn_1/article/details/108981164