CNN的经典文章要点总结

AlexNet(2012)

ImageNet Classification with Deep Convolutional Neural Networks

  • 数据:

输入要求:256*256

处理:按最小边为256的比例缩放,按中心块裁剪256256,减去均值(加快收敛)https://blog.csdn.net/hai008007/article/details/79718251

https://blog.csdn.net/w113691/article/details/71742734

结构包含8层带权重的层:5层卷积层+3层全连接层

参数:batchsize= 128,momentum=0.9,weight decay=0.0005img

具体贡献点:

1.ReLU Nonlinearity

之前:f(x) = tanh(x) or f(x) = (1 + e-x)-1,称之为 saturating nonlinearities

改为:f(x) = max(0; x) ,称之为 non-saturating nonlinearity ,called RectifiedLinear Units (ReLUs)

后者比前者在训练时的收敛速度明显加快 使用梯度下降训练,这些饱和(saturating)的非线性激活函数会造成梯度消失现象,降低训练速度。使用非饱和的非线性激活函数ReLu可以避免这个问题。img

虽然表现最明显的是加快训练速度,但原先的本意是为了阻止过拟合

2.Training on Multiple GPUs

GPU并行训练将GPU通信限制在某些特定的层上。

这意味着,比如,第三层的内核从所有的第二层内核映射(kernel map)中获得输入,但是,第四层的内核只从和自己在同一个GPU上的第三层内核中获得输入。

用双GPU还能提高效果?

与用一个GPU训练每个卷积层只有一半的内核的网络相比,这种结构将我们的TOP-1错误和TOP-5错误分别降低了1.7%和1.2%。

3 Local Response Normalization

img

局部响应归一化,模仿神经元的侧抑制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,***增强了模型的泛化能力。***

https://blog.csdn.net/hduxiejun/article/details/70570086

此举降低了top1和top5的错误率1.4%和1.2% ,但后来VGG说这个没用

4 overlapping pooling

重叠池化池化层的输出之间会有重叠和覆盖,提升了特征的丰富性。文章使用了s = 2(步长),z = 3(池化大小)top-1error和top-5error分别减少了0.4%,0.3%. 发现也能抑制过拟合现象

5.减少过拟合

5.1 data augmentation

  • 1)训练:从256的图像中依次裁剪出224的图像,再对裁剪后的图像水平翻转,共扩大((256-224)*(256-224)*2=2048)倍测试:对一张256的图像裁剪5次224的图像(四个角加中心),再水平翻转,softmax层对10张图的平均预测取均值做结果

  • 2)改变训练图像的RGB通道的强度,对每张图片的RGB值进行PCA得到3*3的协方差矩阵,p为第i个特征向量,landa为特征值,a是均值为0标准差为0.1的高斯函数产生的随机变量。img

    这个方案改变自然图像光照的颜色和强度,而目标的特性不变。降低top1错误率1%。

5.2 dropout(1-x)

模型融合:对多个模型预测可以降低测试错误率,但代价太昂贵“休学”而非“辍学”,某些节点为了避免过拟合而在本轮训练中暂时停止更新。每次选择x的节点进行连接,只有被选中参与连接的节点进行正向和反向传播,其他的值不变

img

因此,对于一个有N个节点的神经网络,有了dropout后就可以看作是 2的N次方 个模型的集合,但此时要训练的参数数目是不变的,就解决了费时的问题。

https://blog.csdn.net/dod_jdi/article/details/78379781

6.训练设置

img学习率初始设为0.01,当验证集的错误率不再降低的时候,将学习率除以10,在训练停止前,学习率减小了3次。

7.结果

img

*是对预训练的模型加一个第六层卷积层再微调,可以提高效果

对多个模型结果取均值(5+1* x 2=7)


VGG16/19(2014)

分类第二,定位第一

Very Deep Convolutional Networks for Large-Scale Image Recognition

img

1.小尺寸3*3卷积核,加深深度

数据处理:224,224,去均值化

  • 用3个3x3的卷积层和1个7x7的卷积层作用效果相同。(假如输入图像是7x7,那么用3x3之后变成5x5,再来两个就是1x1,这与1个7x7的卷积层效果相同。)
  • 但计算量大大减小,3(3x3C2)=27C2个权重参数化,VS 1(7x7C2)=49C2(C表示输入和输出都是C个通道)

2.数据尺寸抖动

  • 训练输入:采用随机裁剪的方式,获取固定大小224x224的输入图像。
    • Training image size: 令S为图像的最小边,如果最小边S=224,则直接在图像上进行224x224区域随机裁剪,这时相当于裁剪后的图像能够几乎覆盖全部的图像信息;如果最小边S>>224,那么做完224x224区域随机裁剪后,每张裁剪图,只能覆盖原图的一小部分内容。
  • 数据生成方式:首先对图像进行放缩变换,将图像的最小边缩放到S大小,然后
    • 方法1: 在S=224和S=384的尺度下,对图像进行224x224区域随机裁剪
    • 方法2: 令S随机的在[Smin,Smax]区间采样取值,再进行随机裁剪(其中Smin=256,Smax=512)
  • 预测方式:作者考虑了两种预测方式:
    • 方法1: multi-crop,即对图像进行多样本的随机裁剪,然后通过网络预测每一个样本的结构,最终对所有结果平均
    • 方法2: densely, 利用FCN的思想,将原图直接送到网络进行预测,将最后的全连接层改为1x1的卷积,这样最后可以得出一个预测的score map,再对结果求平均

https://blog.csdn.net/whz1861/article/details/78111606

3.实验结论

img1.LRN没有提高效果,反而增加了内存消耗和计算时间。

2.D>C>B,1x1卷积层有用但不如3x3效果好

3.B与5x5相比,效果更好,小滤波器效果好

4.深度增加,效果提高

5.尺寸抖动训练效果更好,尺度抖动说的是在范围内随机采样S


NIN

Network in Network

论文提到的Mlpconv = conv + 1x1
这里写图片描述
这里写图片描述

1.小卷积核1x1,提高网络表现力

实现跨通道的交互和信息整合。“这种级联的跨信道参数池结构允许交叉信道信息的复杂且可学习的交互。”

一般来说卷积层要提升表达能力,主要依靠增加输出通道数,但副作用是计算量增大和过拟合。每一个输出通道对应一个滤波器,同一个滤波器共享参数,只能提取一类特征,因此一个输出通道只能做一种特征处理。1*1可以把这些相关性很高的、在同一个空间位置但是不同通道的特征连接在一起。进行卷积核通道数的降维和升维,减少参数量。

2.全局平均池化

对每个特征图一整张图片进行全局均值池化,每张特征图都可以得到一个输出。优点是1在feature map 和类别之间强制映射,卷积结构more native,2减少大量的参数,有效避免过拟合 ,3对空间信息求和,more robust

Mlpconv layers model the local patches better, and global average pooling acts as a structural regularizer that prevents overfitting globally.

GoogleNet (v1 2014)

Going Deeper With Convolutions

分类第一,贡献点:

1.全局平均池化代替全连接层

2.多尺寸滤波器组合

Inception Module中包含了3种不同尺寸的卷积和1个最大池化,增加了网络对不同尺度的适应性,这一部分和Multi-Scale的思想类似。最后Inception Module通过4个分支中不同尺寸的1x1、3x3、5x5等小型卷积将相关性很高的节点连接在一起,就完成了其设计初衷,构建出了很高效的稀疏结构。

3.借鉴1x1,还用于降维

借鉴了NIN,提出Inception Module,提高了参数的利用效率,(参数量只有alexnet的1/12)

(借鉴NIN)增加了分支网络,NIN的MLPconv层拥有更强的提升表达能力,允许在输出通道之间组合信息,因此效果明显。可以说,MLPConv基本等效于普通卷积层后再连接1x1的卷积和ReLU激活函数。1x1卷积可以跨通道组织信息,提高网络的表达能力,一个1x1的卷积就可以很自然地把这些相关性很高的、在同一个空间位置但是不同通道的特征连接在一起,同时可以对输出通道降维

由于较高层会获取较高的抽象特征,其空间集中度会减少,所以3x3和5x5的大尺寸卷积比例应该有所提升,但大尺寸滤波会带来大量参数量,所以本文采用1x1卷积来降维。
这里写图片描述

在Inception Net中,还使用到了辅助分类节点(auxiliary classifiers),即将中间某一层的输出用作分类,并按一个较小的权重(0.3)加到最终分类结果中。这样相当于做了模型融合,同时给网络增加了反向传播的梯度信号,也提供了额外的正则化,对于整个Inception Net的训练很有裨益。

4.训练方法-多尺度输入

这里写图片描述

这里写图片描述


inception v2 (2015,Batch Normalization)

Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

问题:深层网络训练时,由于模型参数在不断修改,所以各层的输入的概率分布在不断变化,这使得我们必须使用较小的学习率及较好的权重初值,导致训练很慢,同时也导致使用saturating nonlinearities 激活函数(如sigmoid,正负两边都会饱和)时训练很困难。

当各层输入分布的变动导致模型需要不停地去拟合新的分布。当一个学习系统的输入分布是变化的时,即训练集的样本分布和测试集的样本分布不一致,训练的模型就很难有较好的泛化能力(这也算过拟合吧?),这叫做 covariate shift (Shimodaira, 2000),解决办法是:对每层的输入进行归一化。

提出,Batch Normalization,减少协变量转移,

  • 修正层输入的均值和方差,把输入规范化,减少梯度对参数或初始值的依赖,可以使用更高的学习率而没有发散的风险;
  • 起到了正则项的作用,有效防止过拟合
  • 有效防止网络出现饱和,加速深度神经网络训练。

对每一个mini-batch数据的内部进行标准化(normalization)处理,使输出规范化到N(0,1)的正态分布https://morvanzhou.github.io/tutorials/machine-learning/torch/5-04-A-batch-normalization/

img

但不是直接在每层规范化,因为如果模型的优化求梯度时不考虑到归一化的话,会影响模型,就是你优化半天学到了某种分布,一规范化,就把这它破坏了。

具体操作:

设标准化值为x1,x2…它们的线性变换为y1…m。e是为了数值稳定加到小批量数据方差上的常量

但这样生成的x绝对值太小,降低了模型表达能力,引入可学习的γ和β去拟合出与原先等价的变换
这里写图片描述

  • 最好将BN加在卷积层之后,激活之前。

Inception-v3

Rethinking the Inception Architecture for Computer Vision

1.nxn卷积核 -->1xn+nx1

将一个较大的二维卷积拆成两个较小的一维卷积,比如将7x7卷积拆成1x7卷积和7x1卷积,或者将3x3卷积拆成1x3卷积和3x1卷积。

img

  • 一方面节约了大量参数,加速运算并减轻了过拟合(比将7x7卷积拆成1x7卷积和7x1卷积,比拆成3个3x3卷积更节约参数)
  • 同时增加了一层非线性扩展模型表达能力。
  • 本文发现这种分解在前面的层上不能很好地工作,但是对于中等网格尺寸(在mxm特征图上,m∈(12,20)),这种分解有非常好的结果

2.利用辅助分类器

引入了辅助分类器的概念,以改善非常深的网络的收敛。最初的动机是将有用的梯度推向较低层,使其立即有用,并通过抵抗非常深的网络中的消失梯度问题来提高训练过程中的收敛。Lee等人[11]也认为辅助分类器促进了更稳定的学习和更好的收敛。有趣的是,我们发现辅助分类器在训练早期并没有导致改善收敛:在两个模型达到高精度之前,有无侧边网络的训练进度看起来几乎相同。接近训练结束,辅助分支网络开始超越没有任何分支的网络的准确性,达到了更高的稳定水平。

本文认为辅助分类器起着正则化项的作用

3.卷积和池化平行使用

这里写图片描述

4.网络结构
这里写图片描述


ResNet

Deep Residual Learning for Image Recognition

Resnet在不断加神经网络的深度时,会出现一个Degradation的问题,即准确率会先上升然后达到饱和,再持续增加深度则会导致准确率下降。这并不是过拟合的问题,因为不光在测试集上误差增大,训练集本身误差也会增大。假设有一个比较浅的网络达到了饱和的准确率,那么后面再加上几个的全等映射层,起码误差不会增加,即更深的网络不应该带来训练集上误差上升。而这里提到的使用全等映射直接将前一层输出传到后面的思想,就是ResNet的灵感来源。传统的卷积层或全连接层在信息传递时,或多或少会存在信息丢失、损耗等问题。ResNet在某种程度上解决了这个问题,通过直接将输入信息绕道传到输出,保护信息的完整性,整个网络则只需要学习输入、输出差别的那一部分,简化学习目标和难度。

1.残差块-shortcuts

这里写图片描述

左边:34层;右边:50/101/152层,使用1x1降低参数量

原本的优化目标是H(x)=F(x)+x
这里写图片描述

  • 当输出通道数一样时,ws=1,直接相加;
  • 当输出通道数不一样时,通过1x1xN的卷积操作变成一样的通道然后相加。

2.网络结构

这里写图片描述


Densenet

Densely Connected Convolutional Networks

2017CVPR best paper
这里写图片描述

所有在前图层作为输入,自身作为后续图层的输入,共有1+2+3+…+L 共L(L+1)/2个直接连接

缓解梯度消失问题,加强特征传播,鼓励特征重用,并大幅减少参数数量。

1.密集连接

受随机深度网络启发,

1.当第i层被扔掉之后,第i+1层就直接连到了i-1层,当第2到i层都被扔掉之后,第i+1层就直接用到了第1层的特征,因此随机深度网络其实可以看出是一个具有随机密集连接的Densenet;

2.既然随机扔掉很多层也不会破坏算法的收敛性,说明resnet具有比较 明显的冗余性,网络的每一层只提取了很少的特征,既然每层学习的特征很少,那能不能降低每层的计算量来减少冗余;

–> 所以densenet设计:1.网络中的每一层都直接与前面层相连,实现特征的重复利用;2.把网络的每一层设计的特别窄,即每层学习的特征图很少,降低冗余性同时降低计算参数量。

dense block & transition layers

由于密集的串联连接需要相同的feature map大小,但pooling操作后大小会变,但pooling又必不可少,所以提出dense block,在blocl之间是transition layer,包括BN+1x1 conv+2x2 AveP
这里写图片描述

另外,dense block也会减少参数量,只在block内进行密集连接,层数少了。否则到最后就会连接很多的前面的层数。

Growth rate - k

控制每层的输出feature map个数,第l层有k(l-1)+k’,k‘是输入的通道数。

虽然每层只增加k个输出,但后面层的输入依然会很多,因此引入bottlneck layer,其实是引入1*1的卷积层金少输入数量。本文将带有bottleneck layer的网络成为DenseNet-B。

除了在Denseblock内减少特征图的数量,还可以在transition layers中来进一步compression。如果一个Dense block产生m个特征图输出,则transition 产生 [θm]个输出,θ∈(0,1],这种操作成为DenseNet-C

以上两种合起来成为DenseNet-BC

网络结构:
这里写图片描述

本文说densenet的结构可以大大减少过拟合现象,在不做数据增强的情况下,cifar10的误差从7.33%降到5.19%,cifar100从28.2%降到19.64%,实验还发现现在的过拟合,当把k从12增加到24时,增长的4倍参数导致误差从5.77%增加到5.83%.DenseNet-BC bottleneck and compression layers 可以有效抑制。


SENet

Squeeze-and-Excitation Networks

ImageNet2017冠军,top5 2.251%,之前是2016 2.991%(中国公安部三所 Trimps-Soushen队)

1.通道特征校验

这里写图片描述

不是一个完整的网络结构,是一个block,可以插入到现有的网络中,作者的动机是希望显式地建模特征通道之间的相互依赖关系,通过学习的方式来自动获取到每个特征通道的重要程度,然后依照这个重要程度去提升有用的特征并抑制对当前任务用处不大的特征。

具体操作:

  • 对卷积层作global average pooling,这是考虑到每个卷积核都是以一个局部感受野的方式进行卷积,所以不能利用局部感受野以外的纹理信息,所以作者提出了Squeeze(GAP)
  • 对得到的1x1xC方块做卷积(因为是1x1所以fc和conv只是叫法问题),通过卷积核的权重自学习(这些权重评判通道特征重要性),C/r是为了降低参数量
  • 最后对原始的X(HxWxC)与SE block 对应相乘。就是最后的Scale操作
    这里写图片描述

博文参考

猜你喜欢

转载自blog.csdn.net/qq_23590921/article/details/81097402