CNN经典论文系列之 Inception(V1~V4及其他版本比较)

Inception V1

Inception v1的网络,将1x1,3x3,5x5的conv和3x3的pooling,堆叠在一起,一方面增加了网络的width,另一方面增加了网络对尺度的适应性。
CNN经典论文系列之 Inception(V1~V4及其他版本比较)

  • 第一张图是论文中提出的最原始的版本,所有的卷积核都在上一层的所有输出上来做,那5×5的卷积核所需的计算量就太大了,造成了特征图厚度很大。
  • 为了避免这一现象提出的inception具有如下结构,在3x3前,5x5前,max-pooling后分别加上了1x1的卷积核起到了降低特征图厚度的作用,也就是Inception v1的网络结构。

Inception V2

这版本在V1的基础上进行了很大的改进:
CNN经典论文系列之 Inception(V1~V4及其他版本比较)

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

Batch Normalization:BN就是调整每层网络输出数据的分布,使其进入**函数的作用区。**函数的作用区就是指原点附近的区域,梯度弥散率低,区分率高。同时,BN会在训练过程中,自己调节数据分布,使其“更合理”地进入**函数。有如下特点:

  1. 加速收敛。减少epoch轮数,因为不必训练神经网络去适应数据的分布。同时,完美地使用了**函数对数据的“修剪”,减少梯度弥散。同时,学习率也可以大一点。
  2. 准确率更高。这也是得亏于对**函数的完美使用,切得更准,垂直度更高。比如,yolo v2加入BN后,mAP提高了2%。

Inception v3

引入Factorization into small convolutions的思想,将一个较大的二维卷积核拆成两个较小的一维卷积核,比如使用1∗3和3∗1的卷积核代替3∗3卷积核。(节约了参数,加速运算并减轻了过拟合;增加了一层非线性扩展了模型表达能力;这种非对称的卷积结构拆分,可以处理更多、更丰富的空间特征,增加特征多样性)但是,如果在模型的前期就使用这种分解,特征的表达效果不好,在中度大小的feature maps,比如size在12到20之间。

CNN经典论文系列之 Inception(V1~V4及其他版本比较)
其实在第一篇论文中GoogLeNet中就使用了辅助分类器,使用了2个,那么它的优势就是

  1. 把梯度有效的传递回去,不会有梯度消失问题,加快了训练
  2. 中间层的特征也有意义,空间位置特征比较丰富,有利于提成模型的判别力

Inception v4

CNN经典论文系列之 Inception(V1~V4及其他版本比较)
这是两种缩小feature maps的方式。前者计算量小,但是限制了特征的表征能力;后者表征能力更强,但计算量更大。所以GoogleNet有了新的整合方式:
CNN经典论文系列之 Inception(V1~V4及其他版本比较)
于是有了Inception v4:
CNN经典论文系列之 Inception(V1~V4及其他版本比较)
同时在这篇文章中,作者考虑了将Inception 与resnet结合起来,提出Inception-ResNet v1:
在inception-resnet中所用的inception-resnet模块里都在inception子网络的最后加入了一个1x1扩展conv操作用于使得它的输出宽度(channels数目)与子网络的输入宽度相同,从而方便相加。
CNN经典论文系列之 Inception(V1~V4及其他版本比较)
Inception-ResNet v2:
CNN经典论文系列之 Inception(V1~V4及其他版本比较)
关于inception v4里的一些实现可参考:https://github.com/tensorflow/models/blob/master/research/slim/nets/inception_v4.py