目标检测 — Inception-ResNet-v2
这篇文章介绍的网络有Inception V1、Inception V2、Inception V3、Inception V4与Inception-ResNet-V2。
1、Inception V1
主要贡献:
(1)提出inception architecture并对其优化
(2)取消全连层(因为FC网络输入要固定、参数过多、容易过拟合)
(3)运用auxiliary classifiers加速网络converge,简称AC
其中1×1的卷积层可以控制kernels的数量,还增加了网络的非线性程度。多个卷层后将卷积直接concate一下。
网络中间层加入了两个AC,这两个AC在训练的时候也跟着学习,同时把自己学习到的梯度反馈给网络,算上网络最后一层的梯度反馈,GoogLeNet一共有3个“梯度提供商”,先不说这么做有没有问题,它确实提高了网络收敛的速度,因为梯度大了嘛。另外,GoogLeNet在做inference的时候AC是要被摘掉的。
该团队又提出了inception v2的结构,基于上面提到的一些原则,在V1的基础之上主要做了以下改进:
(1)使用BN层,将每一层的输出都规范化到一个N(0,1)的正态分布,这将有助于训练,因为下一层不必学习输入数据中的偏移,并且可以专注与如何更好地组合特征(也因为在v2里有较好的效果,BN层几乎是成了深度网络的必备)。这也是最大贡献Batch Normalization(BN)。BN层放在每个隐藏层激活函数前,即 wx+b 之后,之后再加激活函数。总的来讲,加入BN层的反向传播没有发生根本的改变,只是多了一个反向计算过程(batchnorm_backward函数)而已。
(2)使用两个小的3*3卷积核代替一个5*5的大卷积核,好处是:相同的感受野、更少的参数、更深的网络提取特征。
(3)尝试更小的卷积:1*3 + 3*1 替换3*3 卷积。
3、Inception V3
- 1、分解大filters,使其小型化、多层化,其中有个“非对称卷积”很新颖
- 2、优化inception v1的auxiliary classifiers
- 3、提出一种缩小特征图大小的方法,说白了就是一种新的、更复杂的pooling层
- 4、Label smooth,“标签平滑”,很难用中文说清楚的一种方法
4、Inception V4
各种改网络结构,各种复杂,也是醉了。
将原来卷积、池化的顺次连接(网络的前几层)替换为stem模块,来获得更深的网络结构。
5、Inception-ResNet-v2
- 1、在Inception v3的基础上发明了Inception v4,v4比v3更加复杂,复杂到不可思议
- 2、结合ResNet与GoogLeNet,发明了Inception-ResNet-v1、Inception-ResNet-v2,其中Inception-ResNet-v2效果非常好,但相比ResNet,Inception-ResNet-v2的复杂度非常惊人,跟Inception v4差不多
- 3、加入了Residual Connections以后,网络的训练速度加快了
- 4、在网络复杂度相近的情况下,Inception-ResNet-v2略优于Inception-v4
- 5、Residual Connections貌似只能加速网络收敛,真正提高网络精度的是“更大的网络规模”
6、总结
inception 网络系列是从GoogLeNet开始的,一步步将网络设计的更复杂,最后直接结合残差网络,复杂度进一步上升,残差网络负责加快收敛,重要的还是模型的规模。Inception-ResNet v2、ResNet152和Inception v4模型规模差不多,v4略小,Inception v3和ResNet50模型规模相当。
依我个人理解,网络的负责是为了充分挖掘训练数据图像的特征,减少卷积过程中特征的损失,从而提高分类准确度。但在现实应用中,还需要在模型复杂度,计算量和任务需求上进行权衡选择。如果相对简单的网络能满足要求,就不必须选择复杂的网络。
参考:https://zhuanlan.zhihu.com/p/30756181