将计算机视觉中的几个知名Baseline网络放在一起讲解其主要内容,如果需要了解详细细节建议阅读原论文
1.AlexNet(ImageNet Classification with Deep Convolutional Neural Networks 2012)
网络结构:
作者训练了一个在当时来讲算是大型的网络并在ILSVRC-2010中获得了top1错误率:37.5% top5错误率:17.0%的SOTA成绩。
作者提升网络效果的三个方面:
1.大型数据集
使用了当时最新的也是最大的Imagenet数据集训练模型
数据集 | Caltech与CIFAR | LabelMe | ImageNet |
---|
量级 | 几万 | 十万 | 千万 |
2.大型网络
网络中包含5层卷积与3层全连接,后跟1000类softmax分类。网络在当时由于太大所以不得不拆分到两个GTX580GPU(3GB)上进行训练
3.防止过拟合的技巧
3.1.使用了非饱和非线性函数ReLU替换先前的饱和非线性函数(相比使用tanh训练提速6倍)
3.2.数据增强(两种方法)
1.训练时对数据随机重采样2048次,测试时crop原始图片四角加中心并镜像共计10张图片推理10次取均值作为输出 2.改变图像RGB通道强度,对RGB像素做PCA主成分分析
3.3.Drouput,50%概率随机设置隐藏神经元输出为0
一些细节:
使用了重叠的池化层,窗口为3、步长为2,提升了效果 图像前处理包含rescale和减均值 第一个卷积使用了11*11*3、group2、stride4的大卷积核 使用了局部响应归一化LRN(后续论文证实该方法无用)
2.NIN(Network In Network 1312.4400v3)
网络结构
本文作者意在于使用多层感知机穿插卷积神经网络来构建网络中的小型网络(Network In Network)以对特征进行二次提取从而提升效果(该方法并不是十分有效,多层感知机本身由三层以上全连接层组成,全连接计算等于输入tensor大小的稠密卷积,在CNN多个层中加入多个输入tensor大小的稠密卷积效果可想而知)
传统卷积层与多层感知机卷积层结构对比:
全连接层缺点:
1.黑盒,难以理解其中运行方式 2.容易过拟合 3.依赖Dropout 所以作者使用GAP(Global Average Pooling)替代全连接,这也是本文最大亮点。当时分类模型普遍使用全连接层作为分类head,再加上“为了提升效果就要训练更深的模型”这一共识,使得当时模型深受过拟合问题困扰。所以GAP在稀疏网络后缓解了过拟合问题反而能够提升效果,同时使用GAP替换FC也大大减少了模型参数量,提升速度。这也是工程落地的算法模型常使用的分类头
论文中也证明了使用GAP不一定会导致效果下降
3.VGG(Very Deep Convolutional Networks for Large-scale Image Recognition 1409.1556v6)
本文中作者探究了网络深度对模型效果的影响并使用多个模型进行对比实验
对比试验网络结构
网络结构细节:
1.由于叠加多个小卷积核可以获得单个大卷积核同样的感受野同时减少参数量,故网络中卷积层全部使用3*3大小的卷积核。 2.下采样使用窗口为2,stride2的maxpool 3.网络后部三层全连接隐藏层全部使用ReLU
网络训练细节:
1.先使用随机初始化训练最小的网络A,之后网络A的权重与随机初始化训练更深层网络(作者提交论文时才发现也可以直接对深层网络使用随机初始化训练) 2.batch size 256、优化器:mini batch SGD 、momentum0.9、learning rate 10e-2、学习率阶梯下降 3.训练图片尺寸有两种方式,第一种是选取256与384作为网络输入的固定尺寸。另一种是进行一定范围内的随机取值(scale jittering)。
单尺度评估:
结合网络结构图与评估结果图对比不同模型:
1.对比网络A与A-LRN可知LRN(局部响应归一化)没有提升模型效果 2.对比网络B与C可知11卷积所带来的额外非线性有助于提升效果 3.对比网络C与D可知同样深度下33卷积效果优于1*1卷积 4.最深的网络E获得了最优的效果 5.使用scale jittering数据增强进行多尺度训练有助于提升效果
多尺度评估:
在多个rescale的图片上运行并取多次结果的均值作为最终结果,可以提升效果
多crop评估:
1张图片上3个scale,每个scale进行552(flips)crop采样,共计150,多次运行取均值。可以看到结合多crop与dense(多尺度)可以获得最佳效果
4.GoogLeNet(Going deeper with convolutions 1409.4842v1)
作者团队提出了大型神经网络框架Inception并刷新了ILSVRC2014分类与检测的SOTA,增加模型深度的同时减少参数量,相比两年前ILSVRC的SOTA模型AlexNet参数量减少了12倍。分类:top-5错误率6.67% 检测:mAP 43.9%
模型结构
直接增大网络(宽度与深度)来提升效果会出现两个问题: 1.大量的参数导致网络容易过拟合 2.计算资源消耗增加(级联的卷积中任一卷积的增加都会导致计算量指数集增加) 作者想要搭建Inception modules,之后通过堆叠模块来组成网络。为了获取多尺度信息,作者使用了三种大小的卷积核(naive version)之后为了降低计算消耗使用点积对tensor进行降维(dimension reduction)可以说正是点积降维保证了GoogLeNet参数量小于AlexNet12倍。
一些细节:
1.使用稀疏矩阵,寻址和缓存命中耗时会占据主导,导致该方法并不实用(稀疏矩阵计算低效现在可以通过一些方法弥补,在当时google团队能提出这一点可见里面都是理论结合实际的大佬) 2.前处理:减均值 3.所有卷积都使用了ReLU 4.受到NIN启发分类head使用GAP,提升了速度还提升了准确率 5.中间层添加额外的辅助分类器来增强梯度传播,提供额外的正则化(这个方法还是非常有亮点的) 6.SGD,动量0.9,学习率阶梯下降 7.提到的前人数据增强方法:对原图进行8%~100%范围的采样,采样长宽比在区间[3/4,4/3]内随机取值 8.使用的数据增强方法:基于4种尺度、3个水平方向或垂直方向crop、6个四角加中心加全图crop、2个镜像,共计4*3*6*2=144次采样 9.ILSVRC检测任务判断标准:1.类别匹配 2.Bbox重合大于50% 10.使用的检测方案近似于R-CNN,结合了selective search,同时为了降低FP增大了一倍分辨率。
5.GoogLeNet v2(Batch Normalization:Accelerating Deep Network Training by Reducing Internal Covariate Shift 1502.03167v3)
神经网络中一个小的变化会随着网络加深而放大,所以在网络训练过程中越深的网络越容易出现协变量偏移问题。协变量偏移会导致模型进入非线性饱和从而发生梯度消失或者梯度爆炸的问题,传统处理方式例如降低学习率或者更加小心地初始化网络权重这些方法效果往往不佳。于是作者针对协变量偏移问题提出Batch Normalization
先前的一些启发性工作
mimi-batch的优点:它是针对全部数据的估计,会随着batch size的增加而提升准确性,以batch的方式训练模型收敛速度更快 Sigmoid激活缺点:相比Relu能够为网络带来更多的非线性变换,但同时也会出现激活函数偏导趋近于0导致梯度消失 网络输入数据是白化的(均值为0,有同样方差的去相关数据)可以加速训练收敛
于是乎作者考虑在训练时使用白化,但目前白化实现计算复杂且不可微,为了简化计算并处处可微,作者作了下面两点处理: 1.对输入与输出的两次白化合为一次 2.配合训练基于mini-batch生成每个激活的均值与方差
Batch Normalization:固定输入数据均值与方差的归一化步骤
经过训练的网络中,对经过BN层前后的tensor数据做频数直方统计,对比两个统计图可以看出经过BN归一化的数据其分布更加接近正态分布
使用BN的优点
1.训练时可以使用相对大的学习率 2.一定程度上降低了网络对于Dropout的依赖 3.降低了L2权重正则 4.使用饱和非线性激活函数不容易发生梯度消失与梯度爆炸 5.训练网络时达到相同效果所需的迭代次数更少
6.GoogLeNet v3(Rethinking the Inception Architecture for Computer Vision)
卷积神经网络在计算机视觉中取得了巨大的成就,但也伴随着高昂的计算消耗。作者针对这一问题对先前的Inception modules进行了一系列改进与实验。同时提出了标签平滑正则化LSR(Label Smooth Regularization)方法缓解过拟合问题。
网络参数量对比
AlexNet | VGG | GoogLeNet v1 |
---|
60 millinon | 180 million | 5 million |
作者团队总结的通用设计规则
1.在网络前部避免表达瓶颈。特征表达从输入到输出应当逐步被压缩,需要避免极度压缩数据所带来的表达瓶颈(举个栗子,mobilenet v1中作者提出深度可分离卷积,但demo网络并没有全部使用深度可分离卷积,而是在网络前几层使用普通卷积) 2.高维特征更容易在网络中局部处理(我是没明白意思,一般来讲高维特征提取语意信息,低维特征提取位置信息) 3.空间聚合可以在相对低维度上进行嵌入,比如在33卷积之前可以先用11点积进行降维(作者认为临近的激活数据之间是高度相关的,所以可以在aggregation之前进行降维,我觉得能降维是因为网络自身相对于数据集映射复杂度太高了,降维之后降低映射复杂度反而更加匹配数据集) 4.平衡网络的深度与宽度,对网络的深度与宽度同时增加相比于针对某一方面的增加提升能够获得更多的效果提升
分解大卷积核卷积
1.分解为小卷积
大卷积核(5*5,7*7)计算消耗较大,可以使用多个叠加的3*3小卷积核替代,他们有着同样的感受野。使用两个33卷积替换一个55卷积可以带来28%的计算复杂度降低
使用小卷积分解前后对比
2.分解为非对称卷积
可以使用一个1*3卷积和一个3*1卷积替换3*3卷积,能够节省33%计算复杂度。使用两个2*2卷积仅能够降低11%计算复杂度(作者没有使用两个2*2卷积的方法)需要注意的是非对称卷积不适合使用在浅层网络中。
使用非对称卷积分解
为了获取到更高维信息,减少特征瓶颈,作者将block加宽所得到的结构
辅助分类器的几点新看法:
1.测试中使用辅助分类器并不能加速网络收敛,只是最终结果更好 2.浅层的辅助分类器移除不会有负面影响 3.辅助分类器有助于提取低级特征的看法是错误的,辅助分类器更像是一个正则器 (个人认为辅助分类器只是将梯度直接传播在特定层,能够缓解梯度消失问题,由此带来的其他影响例如是否加速收敛、浅层辅助是否有用、是否提取低级特征、是否产生了正则器的功能都很难讲,影响因素太多,而论述又太片面,比如作者的阐述第3点的依据是网络在使用bn或者dropout正则后效果更好,所以能够提升效果的辅助分类器的功能更接近正则器)
LSR 标签平滑正则化
作者认为先前分类损失计算时太过于强调label之间的差异(只有一个真值1,其他全为0),这会导致网络过拟合,故设计标签平滑方法。设定参数epslion=0.1,真实标签目标值变为0.9,其余类均分0.1.该方法大概提升0.2%
Inception-v3
网络结构:
7.ResNet(Deep Residual Learniing for Image Recognition 1512.03385v1)
网络表现会随着网络深度增加而提升,继续加深网络,效果的提升会逐渐变少最终导致效果下降。为了解决这一问题,作者提出了deep residual learning
当网络加深效果反而降低的极端情况下,可以假设网络中新增的部分对于原始网络冗余,新增部分进行恒等映射为最优。但由于新增的多层非线性层计算结构导致难以学习恒等映射,故在新增block添加残差连接,将block的输入与输出加在一起作为最终输出。
残差连接的优点:
1.残差连接不会增加参数或计算复杂度 2.残差网络易于优化,极端情况下直接进行恒等变换 3.残差网络能够更简单的从大量增加网络深度中获得增益
实验对比网络
图片左边的是VGG-19(19.6 Billion FLOPs)中间的是有着34层的普通网络(3.6 Billion FLOPs)右边则是增加了直连的残差网络。 在每个卷积之后激活函数之前使用BN,不使用dropout
模型训练细节
输入图片依照短边进行[256,480]区间内的随机resize,之后随机镜像、随机crop224大小图像。SGD,batchsize 256,学习率0.1阶梯下降。权重衰减0.0001,动量0.9
实验
对比实验使用的模型:
表2中展示了普通的深层网络效果劣化的现象:
对于更深层的网络(50、101、152层)作者提出了一种使用点积降维以缩减网络的残差模块
7.Inception-ResNet(Inception-v4,Inception-ResNet and the Impact of Resdiual Connections on Learning 1602.07261v2)
由于inception网络本身是大型网络,作者尝试结合residual连接到网络中并进行了一系列实验(看看大佬是如何水论文的)
直接看测试结果,第一行网络是inception-v2,结合了BN的inception网络。Inception-v3分解卷积,加深加宽网络相比v2获得了更好的效果。Inception-ResNet-v1是v3网络直接添加残差连接得来,两者计算消耗基本相同,添加残差连接后效果基本不变但网络收敛速度明显加快(见下图22)Inception-v4相比v3基本结构相同但是参数量更多,Inception-ResNet-v2则是在Inception-v4的基础上添加了残差连接。
下面的图13为Inception-ResNet-v1中的模块,图19为Inception-ResNet-v2中的模块,结构相同,卷积核数量增加。
一些细节
1.作者本次工作中发现当卷积核数量超过1000(应该是每个block内)网络训练输出0且残差变得不稳定,需要在将他们加到一起之前缩减残差。 2.作者使用了点积对数据进行升维,个人认为这会产生冗余的特征与复杂的后续计算,建议仅将点积用于数据压缩降维。
8.DenseNet(Densely Connected Convolutional Networks 1608.06993v5)
(待更新)
|