CVDL - 经典网络解析
六、经典网络解析
经典卷积神经网络的解析。
ImageNet大规模视觉识别挑战赛
ImageNet Large Scale Visual Recognition Challenge (ILSVRC)
- 计算机视觉领域最具权威的学术竞赛之一
- ImageNet数据集——由斯坦福大学李飞飞教授主导制作,其包含了超过1400万张全尺寸的有标记图片
- ILSVRC从ImageNet数据集中抽出子集作为竞赛数据
- 2012年ILSVRC——1281167张训练集,50000张验证集,100000张测试集。
- 经典网络
- AlexNet
- ZFNet
- VGG
- GoogleNet
- ResNet
6.1 AlexNet
验证了深度卷积神经网络的高效性。
主体贡献
- 提出了一种卷积层加全连接层的卷积神经网络结构
- 首次使用ReLU函数做为神经网络的激活函数
- 首次提出Dropout正则化来控制过拟合
- 使用加入动量的小批量梯度下降算法加速了训练过程的收敛;
- 使用数据增强策略极大地抑制了训练过程的过拟合;
- 利用了GPU的并行计算能力,加速了网络的训练与推断。
层次
-
AlexNet共8层
-
5个卷积层(CONV1——CONV5)
-
3个全连接层(FC6-FC8)
-
-
第一层 (CONV1): 96 个11x11 卷积核,步长为 4,没有零填充
-
问题:输入:227x227x3 大小的图像,输出特征图个数及尺寸为多少?
尺寸:(227-11)/4+1 = 55
个数:96
-
问题:这层有多少个参数?
参数: (11113+1)*96 = 35K
-
第一个卷积层提取了96种结构的响应信息,得到了96个特征相应图;
-
特征图每个元素经过ReLU函数操作后输出。
-
-
Max POOL1: 窗口大小3x3,步长为 2
作用:降低特征图尺寸,对抗轻微的目标偏移带来的影响
重叠有助于对抗过拟合
输出尺寸: (55-3)/2+1 = 27
特征图个数:96
参数个数:0
-
局部相应归一化层(NORM1)作用:
- 对局部神经元的活动创建竞争机制;
- 响应比较大的值变得相对更大;
- 抑制其他反馈较小的神经元;
- 增强模型的泛化能力
后来的研究表明:
更深的网络中该层对分类性能的提升效果并不明显,且会增加计算量与存储空间。
-
第二层 (CONV2): 256 个5x5 卷积核,步长为 1,使用零填充p=2
-
问题:输入: 27x27x256 大小的特征图组,输出特征图个数及尺寸为多少?
尺寸:(27 - 5 + 2*2)/1+1 = 27
个数:256
-
-
MAX POOL2
-
第三、四层 (CONV3、CONV4): 384 个3x3 卷积核,步长为 1,使用零填充p=1
-
问题:CONV3输入: 13x13x256 大小的特征图组,输出特征图个数及尺寸为多少?
尺寸:(13 - 3 + 2*1)/1+1 = 13
个数:384
- 没有进行最大池化与局部归一化
-
-
第五层 (CONV5): 256 个3x3 卷积核,步长为 1,使用零填充p=1
-
MAX POOL3: 最大池化层来进一步缩小特征图尺寸
-
第六——八层 (FC6、FC7 、FC8):全连接神经网络分类器
MAX POOL3的输出:特征响应图组
FC6输入:9216维向量(6 * 6 * 256)
输出:图像类别概率
重要说明:
- 用于提取图像特征的卷积层以及用于分类的全连接层是同时学习的;
- 卷积层与全连接层在学习过程中会相互影响、相互促进
重要技巧:
Dropout策略防止过拟合;
使用加入动量的随机梯度下降算法,加速收敛;
验证集损失不下降时,手动降低10倍的学习率;
采用样本增强策略增加训练样本数量,防止过拟合;
集成多个模型,进一步提高精度。
思考
-
问题:AlexNet卷积层在做什么?
6.2 ZFNet
与AlexNet网络结构基本一致!
主要改进:
- 将第一个卷积层的卷积核大小改为了7×7;
- 将第二、第三个卷积层的卷积步长都设置为2;
- 增加了第三、第四个卷积层的卷积核个数。
层次
6.3 VGG
VGG网络贡献:
- 使用尺寸更小的3x3卷积核串联来获得更大的感受野;
- 放弃使用11x11和5x5这样的大尺寸卷积核;
- 深度更深、非线性更强,网络的参数也更少;
- 去掉了AlexNet中的局部响应归一化层(LRN)层。
层次
思考
-
问题1:小卷积核有哪些优势?
回答:
-
多个小尺寸卷积核串联可以得到与大尺寸卷积核相同的感受野;
-
使用小卷积核串联构建的网络深度更深、非线性更强、参数也更少。
-
-
问题2:为什么VGG网络前四段里,每经过一次池化操作,卷积核个数就增加一倍?
回答:
- 池化操作可以减小特征图尺寸,降低显存占用
- 增加卷积核个数有助于学习更多的结构特征,但会增加网络参数数量以及内存消耗
- 一减一增的设计平衡了识别精度与存储、计算开销
最终提升了网络性能!
-
问题3:为什么卷积核个数增加到512后就不再增加了?
回答:
- 第一个全连接层含102M参数,占总参数个数的74%;
- 这一层的参数个数是特征图的尺寸与个数的乘积;
- 参数过多容易过拟合,且不易被训练
如将最后一层卷积核个数增加至1024,
这一层参数个数为:
7*7*1024*4096
=205,520,896
=200M
6.4 GoogLeNet
GoogleNet的创新点:
提出了一种Inception结构,它能保留输入信号中的更多特征信息;
去掉了AlexNet的前两个全连接层,并采用了平均池化,这一设计使得GoogLeNet只有500万参数,比AlexNet少了12倍;
在网络的中部引入了辅助分类器,克服了训练过程中的梯度消失问题。
层次
Inception 模块
-
提出问题
-
**串联结构(如VGG)存在的问题——**后面的卷积层只能处理前层输出的特征图;前层丢失重要信息,后层无法找回。
-
**解决方案——**每一层尽量多的保留输入信号中的信息。
-
-
Inception 模块
改进为 Inception V1:
层数更深、参数更少、计算效率更高、非线性表达能力也更强。
输入输出说明
说明:
**输入:**减去均值后224x224彩色图像
结尾
- Average Pool 平均池化:输出1024维向量
- FC 全连接分类
- Softmax 激活
辅助分类损失
-
原因
虽然ReLU单元能够一定程度解决梯度消失问题,但是并不能完全解决深层网络难以训练的问题。离输出远的层就不如靠近输出的层训练得好。
-
结果
让低层的卷积层学习到的特征也有很好的区分能力,从而让网络更好地被训练,而且低层的卷积层学到了好的特征也能加速整个网络的收敛。
-
网络推断
仅利用网络最后的输出作为预测结果,忽略辅助分类器的输出。
思考
-
问题1:平均池化向量化与直接展开向量化有什么区别?
- 特征响应图上每个位置的值反应了图像对应位置的结构与卷积核记录的语义结构的相似程度
- 平均池化丢失了语义结构的空间位置信息
- 忽略语义结构的位置信息,有助于提升卷积层提取到的特征的平移不变性
-
问题2:利用1x1卷积进行压缩会损失信息吗?
利用1x1卷积进行非线性压缩通常不会损失信息。
6.5 ResNet
ResNet具有以下贡献:
- 提出了一种残差模块,通过堆叠残差模块可以构建任意深度的神经网络,而不会出现“退化”现象。
- 提出了批归一化方法来对抗梯度消失,该方法降低了网络训练过程对于权重初始化的依赖;
- 提出了一种针对ReLU激活函数的初始化方法;
背景:
实验:持续向一个“基础”的卷积神经网络上面叠加更深的层数会发生什么?
这并不是过拟合!过拟合至少应该在训练集上是越来越好的,为什么连在训练集上都不够好了?这是为什么?
研究者考虑了这样一个问题:
浅层网络学习到了有效的分类模式后,如何向上堆积新层来建立更深的网络,使其满足即使不能提升浅层网络的性能,深层网络也不应降低性能。
残差结构
关于残差结构:
-
残差结构能够避免普通的卷积层堆叠存在信息丢失问题,保证前向信息流的顺畅。
-
残差结构能够应对梯度反传过程中的梯度消失问题,保证反向梯度流的通顺。
层次
其他关键点:
提出了批归一化策略,降低了网络训练过程对于权重初始化的依赖
提出了针对ReLU非线性单元的初始化方法(He初始化)
思考
-
问题:为什么残差网络性能这么好?
一种典型的解释:残差网络可以看作是一种集成模型!
结论:残差网络是一种集成模型,这是重要特点也是它高效的一个原因!
6.6 小结
-
介绍了5种经典的卷积神经网络 AlexNet、ZFNet、VGG、GoogLeNet和ResNet
-
残差网络 和 Inception V4 是公认的推广性能最好的两个分类模型
-
特殊应用环境下的模型:面向有限存储资源的SqueezeNet以及面向有限计算资源的MobileNet和ShuffleNet