卷积神经网络回顾之AlexNet、VGGNet、Inception系列、ResNet系列

网络整理

  • AlexNet (2012)
  • VGGNet (2014)
  • Inception系列
    • GoogLeNet ——Inception v1 (2014)
    • BN-Inception——Inception v2 (2015)
    • Inception v3 (2016)
    • Inception v4 (2016)
    • Inception-ResNet (2016)
    • Xception (2017)
  • ResNet系列
    • ResNet v1 (2015)
    • ResNet v2 (2016)
    • ResNeXt (2017)
  • 总结

AlexNet (2012)

  AlexNet 是 Alex Krizhevsky 等人在 2012 年发表的《ImageNet Classification with Deep Convolutional Neural Networks》论文中提出的,并夺得了 2012 年 ImageNet LSVRC 的冠军,引起了很大的轰动。AlexNet 可以说是具有历史意义的一个网络结构,在此之前,深度学习已经沉寂了很长时间,自 2012 年 AlexNet 诞生之后,后面的 ImageNet 冠军都是用卷积神经网络(CNN)来做的,并且层次越来越深,使得CNN成为在图像识别分类的核心算法模型,带来了深度学习的大爆发。
卷积神经网络回顾之AlexNet、VGGNet、Inception系列、ResNet系列_第1张图片
  论文中的 AlexNet 如上图所示,有5个卷积层+3个全连接层,包含 60 millions个参数和 65 万个神经元,使用 2块GPU 故分上下两部分,模型的两部分仅在3/6/7/8层会使用对方的数据。ILSVRC-2012的Top-5错误率能达到18.2%,6个卷积层+3个全连接层能达到16.6%,多个CNN平均能达到15.3%。
  该模型要解决的问题主要分为两点:(1)减少网络的训练时间;(2)防止过拟合。
  模型的特点:AlexNet首次在CNN中成功应用了ReLU、Dropout、LRN等tricks。同时,使用了GPU进行运算加速。

  • 基于ReLU的深度卷积网络比基于Sigmoid和Tanh的网络训练快数倍,线性函数运算简单,成功解决了Sigmoid在网络较深时的梯度弥散问题。
  • 提出了LRN(Local Response Normalization,局部响应归一化)层,对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。尤其当使用ReLU时这种“侧抑制”很管用,因为ReLU的响应结果没有上界,所以需要归一化。
  • 利用GPU的并行计算能力,处理神经网络训练时大量的矩阵运算。AlexNet使用了两块GTX 580 GPU进行训练,单个GTX 580只有3GB显存,这限制了可训练的网络的最大规模。因此作者将AlexNet分布在两个GPU上,在每个GPU的显存中储存一半的神经元的参数。因为GPU之间通信方便,可以互相访问显存,而不需要通过主机内存,所以同时使用多块GPU也是非常高效的。同时,AlexNet的设计让GPU之间的通信只在网络的某些层进行,控制了通信的性能损耗。
  • 使用重叠的最大池化。此前CNN中普遍使用平均池化,AlexNet全部使用最大池化,避免平均池化的模糊化效果。并且AlexNet中提出让步长比池化核的尺寸小,这样池化层的输出之间会有重叠和覆盖,提升了特征的丰富性。
  • 数据增强(过拟合的解决):随机地从256*256的原始图像中截取224×224大小的区域(以及水平翻转的镜像),相当于增加了2×(256-224)^2=2048倍的数据量。如果没有数据增强,仅靠原始的数据量,参数众多的CNN会陷入过拟合中,使用了数据增强后可以大大减轻过拟合,提升泛化能力。同时,AlexNet论文中提到了会对图像的RGB数据进行PCA处理,并对主成分做一个标准差为0.1的高斯扰动,增加一些噪声,这个trick可以让错误率再下降1%。
  • 训练时使用Dropout随机忽略一部分神经元(过拟合的解决)。在AlexNet中主要是前两个全连接层使用了Dropout。
  • 预测:对每张图像crop出5张图像(四个角以及中间)及其水平镜像,总共10张。取10个预测结果(softmax输出类别概率)的平均作为最终预测。

总结:AlexNet中涉及了卷积层、激活层、池化层、正则化、全连接层等一系列操作,非常适合初学卷积神经网路的人入手,可以参考 卷积神经网络 AlexNet,获得网络每一层输出特征图计算的细节。

VGGNet (2014)

  VGGNet 由牛津大学的视觉几何组(Visual Geometry Group)在 2015 年发表的《Very Deep Convolutional Networks for Large-Scale Image Recognition》论文中提出的,先是夺得了 2014 年 ImageNet LSVRC 定位任务第一名和分类任务第二名,随后发布了一些列以VGG开头的卷积网络模型。VGG全连接层有3层,根据卷积层+全连接层总数目的不同可以从VGG11~VGG19,最少的VGG11有8个卷积层,最多的VGG19有16个卷积层,隐藏层全部使用ReLU激活函数,参数量在133~144 millions。此外,VGG网络并不是在每个卷积层后面跟上一个池化层,还是总数5个池化层,分布在不同的卷积层之下,但是LRN似乎效果不明显,还消耗内存和时间。下图是VGG11 ~VGG19的结构图:
卷积神经网络回顾之AlexNet、VGGNet、Inception系列、ResNet系列_第2张图片
  该模型要解决的问题是:探索在大规模图像识别中卷积网络深度对准确率的影响。

网络的深度,即卷积层的个数,深度网络集成了低、中、高层特征,多层特征可以通过网络的堆叠的数量(深度)来丰富其表达。网络的深度很重要,但是否能够简单的通过增加更多的网络层学习更好的网络?这个问题的障碍就是臭名昭著的梯度消失(爆炸)问题,这从根本上阻碍了深度模型的收敛。
网络的宽度,即卷积核的种类个数,一般神经网络都会有多个卷积核。宽度的增加在一开始对网络的性能提升是有效的。但是,随着广度的增加,对网络整体的性能其实是开始趋于饱和,并且有下降趋势,因为过多的特征(一个卷积核对应发现一种特征)可能会带来噪声的影响。
两者关系:增加更多的卷积核可以发现更多的特征,但是特征是需要进行组合的,只有知道了特征之间的关系才能够更好的表达图片内容,而增加深度就是组合特征的过程。

  模型的特点:(1)小卷积核和小池化核,将卷积核全部替换为3×3 (极少用了1×1),相比AlexNet的3×3的池化核,VGG全部为2×2的池化核;(2)网络层数更深、特征图更宽 (基于上述第一点);(3)网络测试阶段将训练阶段的三个全连接替换为三个卷积,可以接收任意宽或高的输入。

  • 小卷积核叠加代替大卷积核的感受野:虽然AlexNet有使用11×11和5×5的大卷积,但大多数还是3×3卷积,目的是想让最为原始的纹理细节的特征变化用大卷积核尽早捕捉到,而后面的更深的层害怕会丢失掉较大局部范围内的特征相关性,转而使用3x3的小卷积核去捕捉细节变化。而AlexNet使用连续的几个3×3的卷积核代替AlexNet中的较大卷积核,这样做的优点有两个:(1)减少了参数(3×3的3个卷积层需要3×(3×3×kernel_channel×output_channel)=27×Ck×Co,而使用7×7的1个卷积层需要7×7×kernel_channel×output_channel=49×Ck×Co);(2)增加了非线性(多个卷积层带来ReLU次数增多)。
  • 1×1卷积核:1×1的卷积就是不同特征通道的线性叠加,它与一般的滤波器不同的是不再感受一个局部区域,并且不考虑像素与像素之间的关系。优点:可以实现通道的升维和降维,并且对通道是低成本的线性变换,也可以增加非线性。
  • 特征图的变化:随着层数加深,池化操作使得图像宽高逐渐缩小一半(如今也有不少做法用带stride的卷积去替代池化),但是特征图的通道数在增加,特征信息从一开始输入的224×224×3被变换到7×7×512。特征图从原本较为local的信息逐渐分摊到不同channel上。经过全连接层,原本有局部信息的特征图全部映射到4096维度,信息压缩到约为原来的五分之一。
  • 测试阶段卷积代替全连接:全连接需要给定输入输出的维度,换为卷积层后网络对任意大小的输入都可以处理。
  • 多尺度(multi-scale)训练和测试:训练数据除了有AlexNet的操作外,还进行了尺度抖动(scale jittering),S在[Smin, Smax]范围之内进行随机采样,重新调整训练图像大小为S,裁剪大小仍固定为224×224,S可以取任意大于等于224的数值。测试时,由于使用了全卷积网络,不需要像AlexNet一样crop出多个图像,但是可以缩放到多个尺寸Q,也可以加入镜像。另外,多模型结果取平均进行融合也可以提高预测结果。

总结:VGGNet 的结构非常简洁,验证了可以通过网络加深来提高性能。但是由于全连接层的存在,训练产生过多的参数量,造成了内存占用,也耗费了计算资源。

参考链接:卷积神经网络VGG 论文细读 + Tensorflow实现

Inception系列

  GoogLeNet 是谷歌(Google)研究出来的深度网络结构,获得了 2014 年 ImageNet LSVRC分类任务第一名,在论文《Going Deeper with Convolutions》中首次提出了Inception结构。该网络也是使深度加深了,但是VGG继承了AlexNet的一些框架结构,而GoogLeNet则做了更加大胆的网络结构尝试,虽然深度有22层而它的参数大约为5 millions,是ALexNet的1/12。Inception是通过一个精心设计实现的,允许增加网络的深度和宽度的同时保持计算预算不变,提高了网络内部计算资源的利用率。Inception历经了v1、v2、v3、v4等多个版本的发展,不断趋于完善,下面一一进行介绍。

GoogLeNet ——Inception v1 (2014)

  GoogLeNet要解决的问题是:仅增加网络容量(深度和宽度)来提高网络性能会带来两个缺点(1)在标注数据有限的情况下,网络容量大意味着大量的超参数,也就更容易过拟合;(2)提高网络的容量需要大量的计算资源
  Inception v1模型的特点:既能保持网络结构的稀疏性,又能利用密集矩阵的高性能计算。
卷积神经网络回顾之AlexNet、VGGNet、Inception系列、ResNet系列_第3张图片
  如上图所示,Inception在网络结构中主要改进了两个部分:

  • 多个尺寸的滤波器上同时进行卷积再聚合。利用稀疏矩阵分解成密集矩阵计算的原理来加快收敛速度,对应的就是原来仅靠3×3卷积得到的256个特征图,现在由1×1卷积、3×3卷积、5×5卷积、pooling 四个分支在特征维度上进行分解,每一个分支只能提取到最终特征的一部分,最后将聚合特征的多个通道进行concat起来。同时,增加了特征的多样性,而且不同大小的卷积有不同的感受野,能够提高网络的鲁棒性。
  • 使用1x1的卷积来构建瓶颈层,降低计算成本。假设,上一层输出特征图尺寸为100×100×128,经过具有256个通道的5x5卷积层之后(stride=1,pad=2),输出特征图为100×100×256,卷积层的参数为128×5×5×256= 819200;而如果先经过瓶颈层进行降维,即32个通道的1×1卷积层,再经过具有256个输出的5×5卷积层,那么输出特征图大小不变,但卷积参数量已经减少为128×1×1×32 + 32×5×5×256= 204800,大约减少为1/4。事实证明,只要合理构建瓶颈层,则既可以显著缩小卷积层规模,又不会降低网络性能,从而节省了计算。

对上述前两部分的详细解释可以参看链接https://baike.sogou.com/v175189344.htm?fromTitle=GoogLeNet

  • 全局平均池化(global average pooling)来代替全连接层。最后还是加入一个全连接层,为了方便针对其它类型的标签,自适应或者微调网络时较为简单,并且使用了dropout。所有层都使用了修正线性(ReLU)激活函数。
  • 辅助分类器。由于网络比较深,反向传播会存在梯度消失问题,而辅助分类器是将较低层良好的判别结果用作分类。在训练过程中,按一个较小的权重(0.3)将辅助损失添加到总损失中,保证了梯度回传的有效性以及提供了额外的正则化。在实际测试的过程中,不使用辅助分类网络结构。

BN-Inception——Inception v2 (2015)

  BN-Inception要解决的问题是:内部协变量转移(internal covariate shift)现象。论文链接:《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》

Internal Covariate Shift:在神经网络的训练过程中,由于参数的更新改变,而引起的神经网络各层输入数据分布发生变化,这样使得训练DNN(Deep Neural Networks)变得复杂。因此,就要求使用更小的学习率和仔细地设置初始化参数,并且训练具有非线性饱和(如sigmoid激活函数的非线性饱和问题)的模型变得非常困难,导致训练很慢。迁移学习中经常遇到训练集和测试集的分布发生了改变,从而引起模型泛化性能不良的问题。

  BN-Inception模型的特点:将归一化(Batch Normalization)层输入作为神经网络的结构,可以增大学习率加快收敛。

  • 白化处理(whitening):对每一层的输入进行白化,可以保持输入的分布,加速模型的收敛。如果在每一步的训练中白化激活值(即归一化在激活函数之后),那么在更新参数的时候,必须先计算归一化后的激活值的误差,这降低了梯度下降法的效果。论文中还提出,如果归一化参数不在梯度下降中计算的话,会使模型参数膨胀。

白化处理:对于每个像素值,white(value) = (value - 均值)/标准差,使图像均值为0,方差为1。白化处理主要是消除环境光线、摄影器材等因素给图像带来的动态影响。比如,同样的场景、不同时间得到的图像的亮度会有差别,通过白化处理便消除了这种影响。

  • 批量归一化(BN):该归一化方法在计算梯度时就需要考虑,然而简单的归一化神经网络层的输入,可能会改变该层的表征能力。例如,对sigmoid函数的输入进行归一化,会使归一化后的输入趋向 s 型函数的线性端。为了避免这样的情况,对每一个激活值 x 都引入一对参数 γ 和 β,这两个参数能够缩放和平移归一化后的输入,可以恢复出原始的某一层所学习的特征的分布。归一化过程如下图所示:
    卷积神经网络回顾之AlexNet、VGGNet、Inception系列、ResNet系列_第4张图片
    论文阅读参考链接:https://blog.csdn.net/u014314005/article/details/80583770
    更多对BN层的深度理解、使用和反向传播推导的文章,可以参考知乎链接:https://zhuanlan.zhihu.com/p/92495231

Inception v3 (2016)

  《Rethinking the Inception Architecture for Computer Vision》这篇文章是Inception系列的第三篇,在文章中提出了Inception v2和v3(在CVPR2016上发表时主要以提出了Inception v3)。要解决的问题是:Inception架构的复杂性使得对网络进行更改变得更加困难,如果简单地将模型结构进行扩展,计算效率会下降。
  模型的特点:通过适当的分解卷积和积极的正则化,尽可能有效地利用增加的计算量。

  • 分解卷积(Factorizing Convolutions):类似于VGGNet的思想,使用是两个3×3的卷积来代替5×5的卷积,且使用了非线性激活,参数量对比:3×3×2/5×5= 18/25,在保持感受野的同时减小了计算量。
  • 空间分解为非对称卷积:上述分解可以将大于3×3的卷积核分解为3×3的多个卷积核,但是论文又继续将3×3的卷积分解为更小的,而事实证明,使用非对称卷积(例如n×1)甚至可以做得比2×2更好。如下图右所示,使用3×1卷积再加上1×3卷积的两层网络等效于滑动具有与3×3卷积相同的感受野。
    卷积神经网络回顾之AlexNet、VGGNet、Inception系列、ResNet系列_第5张图片
      理论上,用1×n卷积和n×1卷积来代替任何n×n卷积,并且随着n的增长,计算成本节省显著增加。在实践中,论文提出采用这种分解在早期层上不能很好地工作,但是它对中等网格大小(m×m特征图,其中m在12~20之间的范围)给出了非常好的结果。在这个大小的特征图上,通过使用1×7卷积和7×1卷积,可以实现非常好的结果。
    卷积神经网络回顾之AlexNet、VGGNet、Inception系列、ResNet系列_第6张图片
  • 降低特征图大小:下面左图中的第一种方法会带来表征瓶颈(损失一部分特征),第二种方法会在卷积时带来巨大的参数量。因此,为了保证特征和降低参数量,使用两个并行化的模块(卷积、池化并行执行,再进行合并),右图所示。

卷积神经网络回顾之AlexNet、VGGNet、Inception系列、ResNet系列_第7张图片
下面右图是结合上述特点的Inception结构,此网络的深度达到了42,但是计算花费只是GoogLeNet的2.5倍,并且比VGGNet更高效。
卷积神经网络回顾之AlexNet、VGGNet、Inception系列、ResNet系列_第8张图片
  由于《Rethinking the Inception Architecture for Computer Vision》这篇文章在CVPR2016上发表时主要提出了Inception v3(应该是默认BN-Inception为Inception v2),论文中将我上面描述的Inception结构与BN-auxiliary结合的网络称为Inception v3。其中,BN-auxiliary是指辅助分类器的全连接层也是批归一化的,而不仅仅是卷积层。因此,通过适当的分解卷积和积极的正则化,尽可能有效地利用增加的计算量。

Inception v4 (2016)

  Inception v4在Inception中加入了残差网络的结构(在后面部分讨论),论文《Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning》中介绍了inception-v4、Inception-ResNet-v1和Inception-ResNet-v2结构,模型要解决的问题是:探索将Inception架构与残差连接(Residual Connections)相结合是否有任何好处。实验证明,残差连接能够加速Inception网络的训练,并且精度上有少量的提升。
  在进行集成这两个思想之前,作者也研究了能否将Inception变得更深更宽使其更高效,因为这个原因作者设计了新版本的Inception-v4,如下图所示。标记V(valid)的表示经过卷积后,特征图大小会减小,没有标记的表示带padding的same卷积方式。
卷积神经网络回顾之AlexNet、VGGNet、Inception系列、ResNet系列_第9张图片
  之前,Inception在改变体系结构选择方面相对保守,实验仅限于改变孤立的网络组件,同时保持网络的其他部分稳定。Inception-v3不简化网络模块的话会导致网络看起来比原来GoogLeNet更复杂。因此,对于Inception-v4,为每个网格大小的Inception模块做出统一的结构选择。作者认为,不需要再像以前一样根据经验小心的调整每一层,现在可以更加标准化的设置每一层的参数。从上图可以很明显地看到,网络清晰地划分为一个一个的block,而且Inception的block都会重复使用。

Inception-ResNet (2016)

  这里只有两种模型,其中Inception-Resnet-v1,它的计算量和Inception-v3相当;另一种是Inception-Resnet-v2,它的计算量和新提出来的Inception-v4相当。另一个技术区别是,BN 只加在了传统的结构中,没有加入到 Residual Connection 结构中,主要是受到GPU memory的限制,理论上都用效果会更好。Inception-ResNet-v1和Inception-ResNet-v2 的框架如下图所示:
卷积神经网络回顾之AlexNet、VGGNet、Inception系列、ResNet系列_第10张图片
Inception-ResNet-v1、Inception-ResNet-v2 的区别在于:

  • Stem不同:前者Stem如图右边,后者Stem同 Inception-v4。
  • Inception A、Inception B、Inception C 形同神不同(分别为上图左边的上和下)。
  • Reduction-A同 Inception-v4,但是k/l/m/n各有不同,Reduction-B根据结构有所不同。
    卷积神经网络回顾之AlexNet、VGGNet、Inception系列、ResNet系列_第11张图片

  作者发现,当滤波器个数增加到1000时,残差变体变得极度不稳定,网络在训练早期就停止更新。average pooling后的几层在几万次迭代后产生零,就算给这些层降低学习率或者增加额外的BN也没有作用。论文给出的解决方案是,在将这些残差模块加到前一层的激活函数的后面之前,引入一个尺度变换。

Xception (2017)

  Inception-v4 网络结构是精心设计的,不容易迁移到其他任务中,而Xception的目标是设计出易迁移、计算量小、能适应不同任务,且精度较高的模型。论文《Xception: Deep Learning with Depthwise Separable Convolutions》中作者提出Xception体系结构的参数数量与Inception v3相同,而实验结果表明,Xception虽然在精度上略低于Inception-v3,但在计算量和迁移性上都好于Inception-v3。作者的改进出发点来源于,Inception中将通道上的相关性和空间上的相关性分别通过1×1和3×3的卷积核进行分解,但是,由于3×3的卷积是多通道的,因此通道间的相关性和空间相关性仍旧没有完全分离。要解决的问题是:将学习空间相关性和学习通道间相关性的任务实现完全分离。
  模型特点:用可分离卷积(depthwise separable convolutions)来代替Inception模块。
具体的模型演变如下,最后将每一个通道单独去做卷积:
卷积神经网络回顾之AlexNet、VGGNet、Inception系列、ResNet系列_第12张图片

网络结构如下:
卷积神经网络回顾之AlexNet、VGGNet、Inception系列、ResNet系列_第13张图片

ResNet系列

  ResNet 是微软亚洲研究院(MSRA)的大佬们研究出来的深度网络结构,他们在ImageNet数据集上评估了深度高达152层的ResNet(比VGG深8倍但仍具有较低的复杂度),分类结果在ILSVRC 2015赢得了第一名。在论文《Deep Residual Learning for Image Recognition》(CVPR2016 best paper)中,作者提出了深度CNN网络达到一定深度后,再一味地增加层数并不能带来进一步地分类性能提高,反而会导致网络收敛变得更慢,训练集和测试集上的分类准确率都变得更差。因此ResNet的提出要解决的问题是:(1)随着网络的深入而导致的梯度消失,浅层的参数无法更新;(2)准确度变得饱和,然后开始下降的网络退化问题

ResNet v1 (2015)

  上述第一个问题,很大程度上可以通过归一化的初始化参数和中间层的归一化解决,这些方法确保几十层的网络能够在使用随机梯度下降(SGD)的反向传播过程中收敛。但是,当更深的网络能够开始收敛时,退化问题就暴露出来了。作者分析其原因是,后面的多层非线性网络无法通过训练去逼近恒等映射网络(即拟合y=x这个函数)。因此,ResNet通过引入一个深度残差学习框架,来解决退化问题。该模型的特点是:使用快捷连接(shortcut connections)执行简单的恒等映射identity mapping),从而让堆叠的非线性层从拟合原来的最优解映射变成去拟合输出和输入的残差映射

  • 残差学习:如下图所示,假设 H(x) 作为几个堆叠层(不必是整个网络)要拟合的基础映射,让网络层去学习拟合残差 F(x) = H(x) - x,这样的话原始的映射 H(x) 变成了 F(x) + x。残差映射跟原始映射相比更容易被优化,参考解释:比如把5映射到5.1,那么引入残差前是F’(5) = 5.1,引入残差后是H(5) = 5.1, H(5) = F(5) + 5, F(5) = 0.1。这里的F’和F都表示网络参数映射,引入残差后的映射对输出的变化更敏感。比如输出从5.1变到5.2,映射F’的输出增加了1/51=2%,而对于残差结构输出从5.1到5.2,映射F是从0.1到0.2,增加了100%。后者输出变化明显对权重的调整作用更大,所以效果更好(第一次接触很容易联想到差分放大器)。
    卷积神经网络回顾之AlexNet、VGGNet、Inception系列、ResNet系列_第14张图片
  • 快捷连接:如上右图所示,快捷连接在实现恒等映射时,既没有引入额外参数又没有增加计算复杂度。由于相加是在对应通道上逐像素进行的原因,F(x) 和 x 的维度必须是相等的,有时需要进行 H(x) = F(x) + Wx,其中W只实现维度的变换,通过zero-padding或1×1卷积。何恺明发表在ECCV 2016上的论文《Identity Mappings in Deep Residual Networks》,通过一系列消融实验证明了恒等映射的重要性,也进一步分析了残差块的反向传播公式,表明当使用恒等映射作为快捷连接,并且使用after-addition 激活函数,前向和反向信号可以从一个块直接传播到任何其他块。

不同深度的ResNet信息如下:
卷积神经网络回顾之AlexNet、VGGNet、Inception系列、ResNet系列_第15张图片
  设计网络的规则:对于输出特征图大小相同的层,有相同数量的filters,即channel数相同;当特征图大小减半时,filters数量翻倍。其中,下采样通过步长为2的conv3_1, conv4_1和conv5_1三层卷积执行。在每个卷积之后和激活之前,采用批量归一化(BN),即 Conv -> BN -> ReLU -> Conv 的顺序进行搭建。此外,未使用Dropout。
  从上面的表格可以看出,ResNet有两种形式的block,如下图所示:
卷积神经网络回顾之AlexNet、VGGNet、Inception系列、ResNet系列_第16张图片
  右图的主要目的就是为了减少参数量,从而减少计算量。 对于常规的ResNet,左图可以用于34层或者更少的网络中;对于更深的网络(如101层),则使用右图经过两个1x1的卷积降维和恢复。

参考链接:https://www.cnblogs.com/aiblbns/p/11143978.html#3493846935

ResNet v2 (2016)

  上面有提到在《Identity Mappings in Deep Residual Networks》中,通过一系列消融实验证明了恒等映射的重要性,也进一步分析了残差块的反向传播公式。该论文也进一步探索了ResNet的改进,即改变残差单元的BN、ReLU、Conv的位置,从而得到更好的网络结构,如下图所示的最后一个结构:

卷积神经网络回顾之AlexNet、VGGNet、Inception系列、ResNet系列_第17张图片

  几经折腾,他们终于发现将 BN + ReLu 放到 Conv 之前,模型训练的速度加块了、精度提高了,还容易回避过拟合的问题。最后一种残差结构有两个优点:(1)原始的残差单元中,主干单元和快捷连接相加后需要经过ReLU激活函数,输入中的某些负的元素就会受到影响,而当残差单元越多时,这种影响就越明显。现在的结构,因为主干单元和跳跃连接相加后为恒等映射,因此梯度传播更快。(2)在原始的残差单元中,尽管BN对特征进行了归一化,但是结果需要再加上快捷连接,因此融合后的特征就不再具有归一化的特性。而新提出的新残差单元把BN放在卷积之前,这样的话卷积后的结果加上快捷连接就是归一化的,并且在激活前使用BN使模型更具有正则化的能力。

ResNeXt (2017)

  简单来说就是,Inception团队把ResNet拿来搞了个Inception-ResNet,这头ResNet团队也把Inception拿来搞一个ResNeXt,真是一群魔鬼。《Aggregated Residual Transformations for Deep Neural Networks》论文的作者认为,尽管增大网络的深度和宽度可能提高模型的准确率,但与此同时带来的是网络的复杂度不断增大。因此,作者想解决的问题是设计一种网络结构,在不增加网络复杂度的基础上还能提高网络的性能。
  模型特点:利用 split-transform-merge 结构,把ResNet的单个卷积改成了多支路的卷积。如下图所示:

卷积神经网络回顾之AlexNet、VGGNet、Inception系列、ResNet系列_第18张图片

  图中左边部分是一个ResNet的block,右边是ResNeXt的block。其中,框内的参数分别代表输入通道数、卷积核尺寸、输出通道数。作者将网络进一步等价,如下所示:
卷积神经网络回顾之AlexNet、VGGNet、Inception系列、ResNet系列_第19张图片
(a):Aggregated residual transformations;
(b):把输出的1×1卷积合并到一起,得到等价网络拥有和 Inception-ResNet 相似的结构,不过ResNeXt的设计要比Inception简单得多;
(c):进一步把输入的1×1也合并到一起,得到等价网络和通道分组卷积的网络有相似的结构(分组卷积在AlexNet中曾用来并行分布在两个GPU上,Xception中的深度分离卷积也是分组卷积的一种特殊形式)。
  上图中转换集的大小group=32,是一个具体的、可测量的维度,除了宽度和深度的维度外,它也是至关重要的,并且跟瓶颈宽度(上图中是4)有一定的关系。实验表明,增加基数(转换集)比获得更深或更宽的宽度更有效地获得准确性,尤其是当深度和宽度开始使现有模型的收益递减时。

总结

  通过上述回顾,我们可以发现,从2014年开始网络主要向更深更宽的方向发展,逐步解决了过拟合、梯度消失和梯度爆炸,加速了网络训练。从2017年以后,很多模型也开始使用分组卷积Group Convolution)和 深度可分离卷积depthwise separable convolution)进行网络压缩,如用在 Xception、MobileNet、ShuffleNet、CondenseNet等轻量型网络结构中属于必用结构。在我的下一篇博客介绍了其他耳熟能详的网络:卷积神经网络回顾之DenseNet、SENet、MobileNet系列、ShuffleNet系列。更多关于网络模型评估和网络性能的比较,可以参考我的另一篇博客:常用的基于ImageNet分类任务开发的backbone模型。

你可能感兴趣的:(backbone模型学习,卷积神经网络,深度学习)