[重读经典论文]Inception V4
1. 前言
Inception V4是google团队在《Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning》论文中提出的一个新的网络,如题目所示,本论文还提出了Inception-ResNet-V1、Inception-ResNet-V2两个模型,将residual和inception结构相结合,以获得residual带来的好处。
Inception-V4在Inception-V3的基础上进一步改进了Inception模块,提升了模型性能和计算效率。
Inception-V4没有使用残差模块,Inception-ResNet将Inception模块和深度残差网络ResNet结合,提出了三种包含残差连接的Inception模块,残差连接显著加快了训练收敛速度。
Inception-ResNet-V2和Inception-V4的早期stem网络结构相同。
Inception-ResNet-V1和Inception-V3准确率相近,Inception-ResNet-V2和Inception-V4准确率相近。
经过模型集成和图像多尺度裁剪处理后,模型Top-5错误率降低至3.1%。
针对卷积核个数大于1000时残差模块早期训练不稳定的问题,提出了对残差分支幅度缩小的解决方案。
总得来说,就是提出改进的模块,堆叠成V4,然后改进模块,将原来的多路卷积后的feature map堆叠改进成残差连接,形成Inception-ResNet-V1,将改进后的模块中的卷积核增加,形成新的Inception-ResNet-V2模型。相对前面的v1~v3来说,这篇论文的工程性更强一点。
2. Inception V4
如上图所示为InceptionV4的主要结构,右边是主干网络Stem,可以看到也是若干卷积网络的堆叠,然后是4个InceptionA模块,接一个下采样模块ReductionA,再接7个InceptionB模块,然后又是一个下采样模块ReductionB,然后是3个InceptionC模块,最后是全局平均池化,全连接(训练时加dropout),最后softmax输出结果。
这是三个Inception模块的结构,在V3上做了一些改进。
然后是两个下采样模块:
左边是ReductionA,右边是ReductionB,其中k,l,m,n是超参数,在三个新的网络中都不一样,如下表所示。
3. Inception-ResNet-V1/V2
将Inception模块进行改进,将原来的多通道叠加,改为残差连接,就产生了新的模块,下面是Inception-ResNet-V1的三个新模块:
简单粗暴增加新模块中卷积核的数量,就变成了Inception-ResNet-V2中的三个主要模块:
下面是Inception-ResNet-V1/V2的网络结构,区别在于模块中的卷积核数量等超参,计算量也不一样。
这里有个小细节,对于Inception-Residual的模块,在做相加的那一层不做batch normalization,这是作者出于计算方面的考量(内存,减少层数)
4. 原生VS残差
这两个网络,其中Inception-ResNet-V1与InceptionV3的计算量相当,Inception-ResNet-V2与InceptionV4的计算量相当,于是作者就针对对这两组进行了实验。
在模型训练收敛速度上,Inception-ResNet-V1 VS InceptionV3:
Inception-ResNet-V2 Vs InceptionV4:
可以看到引入残差模块之后,的确收敛更快了,但是与原生的精度都是差不多的。
其他还有几个其他的top5,top1的评估图表,大同小异,都是带残差的网络收敛速度快,但是最后网络的性能与原生的差不多,在ILSVRC 2012验证集上的测试结果如下:
5. 缩小残差
作者发现如果filter的个数超过1000个,残差网络会变得不稳定,网络会在训练的早期就‘死掉’,也就意味着在几万次迭代之后,avg_pool之前的最后几层网络参数全是0。解决方案是要么减小learning rate,要么对这些层增加额外的batch normalization.
作者又发现如果将残差部分缩放后再跟需要相加的层相加,会使网络在训练过程中更稳定。因此作者选择了一些缩放因子在0.1到0.3之间,用这个缩放因子去缩放残差网络,然后再做加法,如下图所示:
6. 参考
[1] 【精读AI论文】Inception V4、Inception-ResNet图像分类算法
[2] Inception-V4和Inception-Resnet论文阅读和代码解析
(完)