计算机视觉中的深度学习8: 卷积神经网络的结构
Slides:百度云 提取码: gs3n
今天这一讲,我们以ImageNet Classification Challenge中使用的CNN的发展来进行介绍。
AlexNet
在2012年以前,ImageNet Classification Challenge的获胜者都是人工进行特征提取的线性分类模型。在2012年,AlexNet成功登顶。
AlexNet的结构
蓝色部分是神经网络的结构,从这我们能够看得出来,这个神经网络的各项长宽大小都是没有明显规律的。这花费了研究人员很长时间进行调整。
黄色的部分是计算的资源
- 内存占有
- 训练参数的个数
- 浮点计算的次数
仔细地观察一下变化的趋势
- 内存都集中在前几个卷积层,因为卷积层是输入和输出都非常大,而且filter的个数越多,输出也越大
- 因为全连接层的连接方式是类似笛卡尔乘积的,所以W的个数非常大,从而产生了更多的可训练参数
- filter个数对计算次数影响很大,这因为是卷积,每一次卷积都会产生大量的计算。
ZFNet
这本质上的设计思路和AlexNet一模一样,但是这儿使用了更大的神经网络
- Conv1:使用了 (7x7 步长 2)的filter,而AlexNet使用的是(11x11 步长 4)的filter
- Conv3, 4, 5:使用了512, 1024, 512个filter,而AlexNet使用了384,384,256个filter。
一般来说,更大的网络会有更好的效果。因为你能处理更大的更多的数据了,也能从数据中提取和保留更多的信息。
缺点是,收敛慢,downsample慢。
VGG
VGG已经不需要再用人工进行一点一点调试了,他通过有规律的组合,达成了非同一般的效果,能够更快地扩展神经网络,让它变得更深更大。
VGG设计规则
- 所有卷积层都是3x3 步长1 pad 1的结构
- 所有最大池均为2x2 步长 2
- 在池层之后,将通道的数据通过复制扩展为2倍
在VGG中,卷积层有5个阶段
- Stage 1: conv-conv-pool
- Stage 2: conv-conv-pool
- Stage 3: conv-conv-pool
- Stage 4: conv-conv-conv-[conv]-pool
- Stage 5: conv-conv-conv-[conv]-pool (VGG-19 has 4 conv in stages 4 and 5)
卷积层设计
我们有两种选择
Option 1:
- Conv(5x5, C -> C)
- Params: 25C2
- FLOPs: 25C2HW
Option 2:
- Conv(3x3, C -> C), Conv(3x3, C -> C)
- Params: 18C2
- FLOPs: 18C2HW
两个3x3转换与单个5x5转换具有相同的接收域,也就说,一个相同大小的input,经过选择1和选择2,他们的输出大小是一样的。
但是选择2的优点在于
- 参数较少且计算量较小,需要更少的计算资源
- 两个卷积层的结合,使得非线性计算更多,也让特征之间的组合更多
池层设计
为什么要将通道复制一遍?
因为我们希望每个卷积层都需要有相同的计算量!
第一层的输入是Cx2Hx2W,输出则是Cx2Hx2W.
经过2x2 步长为2的max pooling之后,输出则变成了CxHxW
为了达成每个卷积层都需要有相同的计算量的目标,我们只需要将C×2。
第二层的输入就变成了2CxHxW。
如上图所示,则两个卷积层的浮点计算量是相同的。
AlexNet vs VGG-16
VGG是一个比AlexNet大得多的网络,这得益于GPU技术的快速发展。
在AlexNet时代,一个GPU的显存才3G,需要将AlexNet拆解成两部分放到两个GPU里面进行。
TBD