赞
踩
该模型出自于**《Network in Network》**,这篇文章是2014年发表,虽然时间比较早,但是所提出的创新点还是比较有意义,它对传统的CNN卷积和FC结构的分类网络进行两方面的改进:
提出 MLP convolution layers
用 Global Average Pooling(全局平均池化层)结构代替全连接
以上两点,其在较大程度上减少了参数个数,确能够得到一个较好的结果。而参数规模的减少,不仅有利用网络层数的加深(由于参数过多,网络规模过大,GPU显存等不够用而限制网络层数的增加,从而限制模型的泛化能力),而且在训练时间上也得到改进。
使用Global Average Pooling(全局平均池化层)的好处:1、对数据在整个feature上作正则化,防止了过拟合;2、不再需要全连接层,减少了整个结构参数的数目(一般全连接层是整个结构中参数最多的层),过拟合的可能性降低;3、不用再关注输入图像的尺寸,因为不管是怎样的输入都是一样的平均方法,传统的全连接层要根据尺寸来选择参数数目,不具有通用性。
传统的卷积层使用线性滤波器(常规卷积核)来扫描输入,后面接一个非线性激活函数,得到特征图(feature map)。**作者认为常规的卷积核是一种底层数据块的广义线性模型(generalized linear model )(GLM),提取到的特征抽象程度较低,**而本文则构建了一些结构稍复杂的微型神经网络来抽象感受野内的数据。 使用多层感知器实例化微型神经网络,这是一种有效的函数逼近器。特征图可以通过微型神经网络在输入上滑动得到,类似于CNN;接下来特征图被传入下一层。这种多层感知器层在文本被称作mlpconv,用它来替代GLM在输入上做卷积深度NIN可以通过堆叠上述结构实现。通过微型网络增强局部模型,就可以在分类层中利用所有特征图的全局平均池化层(GAP),这样更容易解释且比传统的全连接层更不容易过拟合。
如下图整体NIN网络结构有三个MLP卷积层组成,其实每个MLP卷积层 = 常规卷积层 + 两个 1×1卷积
NIN总体结构:
该模型出自于**《Going deeper with convolutions》**,这篇文章发表于2014年,最先提出了Inception模块的概念。当年,ImageNet挑战赛(ILSVRC14)的第一名GoogLeNet(向LeNet网络致敬起的名字)便出自这篇文章,整个GoogLeNet结构其实是由多个Inception模块组成。
左图是论文中提出的最原始的版本,所有的卷积核都在上一层的所有输出上来做,那5×5的卷积核所需的计算量就太大了,造成了特征图通道很大。为了避免这一现象提出的Inception具有如下结构,在3x3前,5x5前,max pooling后分别加上了1x1的卷积核起到了降维的作用,也就是右图的Inception v1的网络结构。
该模型出自于**《Xception:Deep Learning with Depthwise Separable Convolutions》**,这篇文章以为Inception模块为基础,提出了深度可分离的概念。作者首先简化了Inception模块,仅保留包含3*3的卷积的分支:
我们可以将上面网络看作,把整个输入做1 x 1卷积,然后切成三段,分别3*3卷积后相连,如下图,两种形式是等价的:
现在我们想,如果不是分成三段,而是分成 5 段或者更多,那模型的表达能力是不是更强呢?于是我们就切更多段,切到不能再切了,正好是 Output channels 的数量(极限版本):
深度可分类卷积在深度学习框架中(如TensorFlow和Keras)中通常被称为“可分离卷积”。它包含深度卷积和逐点卷积深度卷积:在输入的每个通道上独立执行空间卷积。逐点卷积:也即1 x 1卷积,将深度卷积输出的通道投影到新的通道空间上(其实这里就是使用1x1卷积进行升维和降维)。作者指出,不要把空间可分离卷积与深度可分离卷积混淆,因为在空间可分离卷积在图像处理社区也被称为“可分离卷积”。
这里我去查了一下关于空间可分离相关的资料。空间可分离卷积:简单来说是将一个卷积核分为两个较小的卷积核。最常见的情况是将3x3的卷积核划分为3x1和1x3的卷积 核,如下所示:
现在,我们不是用9次乘法进行一次卷积,而是进行两次卷积,每次3次乘法(总共6次),以达到相同的效果。 乘法较少,计算复杂性下降,网络运行速度更快。
极限版本Inception和深度可分离卷积的区别:
操作顺序不同;深度可分类卷积首先执行的是独立的空间卷积,然后执行的是1x1逐点卷积,而极限Inception模块首先执行的是1x1逐点卷积。
非线性激活函数;极限Inception模块的两次操作后都添加了Relu非线性激活函数,而深度可分离操作后不加非线性激活函数。
作者认为第一个差别不是很重要,原因在与整个结构模型是Inception模块不断叠加的,从而改变一下结构中的模块划分顺序,两者基本上就等价了。而对于第二点就比较重要了。
Xception网络基础结构:其实就是简单来说,Xception架构就是带残差连接的深度可分卷积层的线性堆叠。
通过分析实验结果,值得一提的是depthwise 和 pointwise 卷积之间的非线性激活是不好的。取消非线性激活,可以让收敛速度更快,效果更好。可能的原因是:Inception是将几百个通道分成3-4份,每一份都很多。因此非线性对于这种深度学习是有帮助的。但是,Xception的空域卷积只对单通道操作,深度不足,非线性反而会让信息丢失。
Xception的不足:虽然Depthwise Convolution可以带来准确率的提升或是理论计算量的大幅下降,但由于其计算过程较为零散,现有的卷积神经网络实现中它的效率都不够高,例如本文中Xception的理论计算量是远小于Inception V3的,但其训练时的迭代速度反而更慢一些
https://blog.csdn.net/mounty_fsc/article/details/51746111
https://www.jianshu.com/p/8a3f9f06bbe3(Network in Network文献翻译)
https://www.cnblogs.com/makefile/p/nin.html
https://www.jianshu.com/p/c422dc4fc295
https://www.bilibili.com/video/BV1NE411r7kL?from=search&seid=15506411213730804217 (NIN讲解的视频)
https://www.cnblogs.com/leebxo/p/10315490.html
https://zhuanlan.zhihu.com/p/76446136
https://blog.csdn.net/u010402786/article/details/52433324?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
https://mooc.study.163.com/learn/2001281004?tid=2001392030#/learn/content?type=detail&id=2001729332(吴恩达讲解Incption模块的视频)
https://arxiv.org/pdf/1610.02357.pdf(论文地址)
https://zhuanlan.zhihu.com/p/38567468
https://blog.csdn.net/u010579901/article/details/79261340
https://www.davex.pw/2018/02/05/breadcrumbs-about-inception-xception/#Bottleneck
https://baijiahao.baidu.com/s?id=1634399239921135758&wfr=spider&for=pc(空间可分离卷积)
https://www.jianshu.com/p/948c3ac189c3
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。