CV中深度神经网络发展历程(VGG、ResNet、Inception、Xception等)

一、AlexNet与VGG

在课程中,我们学习了CNN最简单的结构:卷积层、池化层、激活层、还有最后的全连接分类层。AlexNet(2012)和VGG(Visual Geometry Group,2015)等都是遵循了传统CNN的层层堆砌的结构,其中VGG的改进是使用连续的几个3x3的卷积核代替AlexNet中的较大卷积核(11x11,7x7,5x5等),这样可以带来更深的非线性网络结构,便于学习更加复杂的模式,同时参数之和较之大卷积核的参数更少,比如2个33的卷积核可以代替1个55的卷积核:
2层3*3卷积核替换1个5*5的卷积核
可以总结出,VGG的表现能力优于Alexnet,但是,VGG的参数更多,这些参数并不是小卷积核串联带来的(与前面的描述并不冲突),而是第一层全连接的参数过多,因此训练一个VGG网络更慢。
这里是一个VGG-16的网络结构演示,十分的直观:
https://dgschwend.github.io/netscope/#/preset/vgg-16
在VGG之后,网络的结构已经大有不同,随之而来的是三种革命性的网络结构:ResNet、Inception 和 Xception 架构。

二、残差网络(ResNet)

ResNet(残差网络)是第一个革命性的变化。它的提出是对一种现象的思考为何在已经很深的神经网络中,再增加网络层会带来性能变差?可以想象一下,在一个n层的网络中,增加一层,那么第n层和第n+1层之间做恒等变换至少可以保证网络的性能不会下降。事实并非如此简单,恒等变换的学习几乎是不可能的,恒等只有一种,不等却可以有无数中,在参数连续变化时,“=”几乎不可能成立。ResNet网络不再学习直接映射(xH(x))的关系,而是对残差F(x)进行学习:

F(x) = H(x) – x    (式3-1)

也可以说是对F(x)+x进行学习:
残差网络基本模块
上图展示了残差的基本模块(也就是上面提到的n与n+1)之间的关系,这种恒等变换只需要调整参数使得F(x)为0即可。链接输入和输出的Identity是一个捷径(shortcut)结构,这个结构会有很大的作用,在输入输出不一致的时候可以使用投射或者填充来完成。
可能的疑问是,这是不是一个无用功,后面的残差模块看起来毫无用处呀?其实我们看到的是在正向传播的过程,确实没有明显的作用,但是在反向传播时,能够很好的通过shortcut解决梯度消失的问题,使得训练和学习的性能得到极大的提升。

三、Inception

ResNet解决了更深的问题,而Inception是为了解决网络更宽的问题,也就是说,如何在不增加计算成本的前提下扩展神经网络?
Inception专注于一种深度网络的新的构建模块,它被称为Inception module。这一module的本质是围绕层的操作的两种思想的见解。
在传统的卷积网络中,每一层都会从之前的层提取信息,以便将输入数据转换成更有用的表征。但是,不同类型的层会提取不同种类的信息。5×5 卷积核的输出中的信息就和 3×3 卷积核的输出不同,又不同于最大池化核的输出……在任意给定层,我们怎么知道什么样的变换能提供最“有用”的信息呢
第一种观点:“成年人不做选择,都给我,我怎么挑选是我自己的事情”。
多种变换操作结果并行汇聚到下一层
然而,这种计算的代价显而易见,参数空间爆炸性增长
不加1*1卷积层(左)&加1*1卷积层过滤(右)
第二中观点:使用了 1×1 卷积来过滤输出的深度。一个 1×1 卷积一次仅查看一个值,看起来并没有什么作用。但在多个通道上,它可以提取空间信息并将其压缩到更低的维度。比如,使用20个1×1过滤器,一个大小为64×64×100(具有 100个特征映射)的输入可以被压缩到64×64×20。通过减少输入映射的数量,Inception 可以将不同的层变换并行地堆叠到一起,从而得到既深又宽(很多并行操作)的网络。
GoogleNet是第一个采用Inception的完整框架,在一系列CV任务中取得了很好的效果,在ResNet出现之后又与之融合提出了Inception-ResNet 混合结构。Inception首次实现了“network in network”的理想。这里有一个趣事,为啥这个模型架构叫做“Inception”呢?因为《盗梦空间》的英文名字就是“Inception”。

四、Xception

Xception(Extreme Inception)是对Inception的继承和发展,它将Inception的原理推向了极致(Extreme)。
它的核心思想是“跨通道的相关性和空间相关性是完全可分离的,最好不要联合映射它们”。
传统CNN的通道和空间同时扫描
在学习CNN的简单架构时,我也有类似的困惑,为什么可以同时考虑直接加权求和呢?
实验证明,空间(宽度、长度)和深度之间是解耦的,不相关的,独立考虑时可能更好。这就是Xception在Inception上做的改进。
Xception的机制
首先求跨一个2D空间的相关性,然后再求跨一个1D空间的相关性。可以看出,这种2D+1D映射学起来比全3D映射更加简单。Xception比Inception的参数规模并没有提高,但是模型性能有较大提升。
以上介绍完了CV主流的深度学习模型发展历程,Xception实际上是集百家之所长,是一个优秀的CV领域模型。

欢迎交流补充!

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值