卷积神经网络CNN 常用模型

一、CNN 简介

CNN的精华是:三概念两核心,这里做个简要的概要性介绍。

1、CNN 两核心——卷积和池化

(1)卷积

主要起到作用是抽取特征,使网络具有一定转移不变性,也有一定降维的作用。概述:设定一个n行m列的卷积窗口,采用的relu(elu,leakyrelu)做为激活函数函数,对输入X进行卷积操作。
注意:卷积可能单通道或者多通道卷积;积操作时分为 padding 和非 padding 两种方式,padding 也分为很多方式,比如zero-padding,mean-padding等;对同一个输入可以设置不同大小卷积和,或从不同的位置,或不同的卷积步长多次进行卷积,目的就是为了尽可能多的抽取特征。

(2)池化

主要起降维的作用。概述:设置一个n行m列的池化窗口,对输入X进行池化操作,采用relu(elu,leakyrelu)做为激活函数。也可采用sigmoid或tans型激活函数,但注意函数的饱和死区特性导致的反向传播时的梯度消失问题,可以配合Batch Normalization使用。池化也有很多方式,比如最大值池化、平均值池化。

2、CNN 三概念——局部感受野、权值共享和下采样/降采样

(1)局部感受野:卷积操作时卷积窗口与输入X重合的部分。

(2)权值共享:卷积操作或池化操作时,卷积窗口或池化窗口的权值不发生变化。

(3)下采样/降采样:就是池化操作。

可见,卷积和池化的随机组合赋予了CNN很大的灵活性,因此也诞生了很多耳熟能详的经典网络:AlexNet,VGGNet,Google Inception Net,ResNet,四种网络在深度和复杂度方面一次递增。AlexNet获得了ILSVRC(ImageNet Large Scale Visual Recognition Challenge)比赛2012年冠军(8层神经网络,top-5错误率16%,使用更多额外数据可达到15.3%),VGGNet获得2014年ILSVRC的亚军(19层神经网络,top-5错误率7.3%),Google Inception Net获得2014年ILSVRC冠军(22层神经网络,top-5错误率6.7%),ResNet获得2015年冠军(top-5错误率3.57%,152层神经网络)。

3、1x1 卷积核的作用

(1)灵活的控制特征图的深度

1x1的卷积核由于大小只有1x1,所以并不需要考虑像素跟周边像素的关系,它主要用于调节通道数,对不同的通道上的像素点进行线性组合,然后进行非线性化操作,可以完成升维和降维的功能,如下图所示,选择2个1x1大小的卷积核,那么特征图的深度将会从3变成2,如果使用4个1x1的卷积核,特征图的深度将会由3变成4。
卷积神经网络CNN 常用模型_第1张图片
使用1x1卷积核,实现降维和升维的操作其实就是 channel 间信息的线性组合变化,3x3,64channels的卷积核后面添加一个1x1,28channels的卷积核,就变成了3x3,28channels的卷积核,原来的64个channels就可以理解为跨通道线性组合变成了28channels,这就是通道间的信息交互。
注意:只是在channel维度上做线性组合,W和H上是共享权值的sliding window
维度并没有减少或者增加,改变的只是 height × width × channels 中的 channels 这一个维度的大小而已,而且保持特征图的高和宽不变

(2)减少参数

前面所说的降维,其实也是减少了参数,因为特征图少了,参数也自然跟着就减少,相当于在特征图的通道数上进行卷积,压缩特征图,二次提取特征,使得新特征图的特征表达更佳
在GoogleNet的3a模块中,假设输入特征图的大小是2828192,1x1卷积通道为64,3x3卷积通道为128,5x5卷积通道为32,如下图所示:
卷积神经网络CNN 常用模型_第2张图片
左边的卷积核参数计算如下:
192 × (1×1×64) +192 × (3×3×128) + 192 × (5×5×32) = 387072
而右图的3x3卷积层前加入通道数为96的1x1的卷积,5x5的特征图后面加入通道数为16的1x1的卷积,参数的计算如下:
192 × (1×1×64) +(192×1×1×96+ 96 × 3×3×128)+(192×1×1×16+16×5×5×32)= 157184

(3)加非线性
1*1卷积核,可以在保持feature map尺度不变的(即不损失分辨率)的前提下大幅增加非线性特性(利用后接的非线性激活函数),把网络做的很deep。

备注:一个filter对应卷积后得到一个feature map,不同的filter(不同的weight和bias),卷积以后得到不同的feature map,提取不同的特征,得到对应的specialized neuron[7]。

二、CNN 经典模型

1、LeNet5

LeNet-5:是Yann LeCun在1998年设计的用于手写数字识别的卷积神经网络,当年美国大多数银行就是用它来识别支票上面的手写数字的,它是早期卷积神经网络中最有代表性的实验系统之一。

LenNet-5 共有 7 层(不包括输入层),每层都包含不同数量的训练参数,如下图所示。
卷积神经网络CNN 常用模型_第3张图片
LeNet-5 中主要有 2 个卷积层、2 个下抽样层(池化层)、3 个全连接层3种连接方式。

(1)LeNet5 特征

1)卷积神经网络使用三个层作为一个系列: 卷积,池化,非线性
2) 使用卷积提取空间特征
3)使用映射到空间均值下采样(subsample)
4)双曲线(tanh)或 S 型(sigmoid)形式的非线性
5)多层神经网络(MLP)作为最后的分类器
6)层与层之间的稀疏连接矩阵避免大的计算成本

(2)LeNet-5 的训练算法

训练算法与传统的BP算法差不多。主要包括4步,这4步被分为两个阶段:
第一阶段,向前传播阶段:

a)从样本集中取一个样本(X,Yp),将X输入网络;
b)计算相应的实际输出Op。
在此阶段,信息从输入层经过逐级的变换,传送到输出层。这个过程也是网络在完成训练后正常运行时执行的过程。在此过程中,网络执行的是计算(实际上就是输入与每层的权值矩阵相点乘,得到最后的输出结果):
Op=Fn(…(F2(F1(XpW(1))W(2))…)W(n))

第二阶段,反向传播阶段
a)算实际输出Op与相应的理想输出Yp的差;
b)按极小化误差的方法反向传播调整权矩阵。

(3)LaNet-5的局限性

CNN能够得出原始图像的有效表征,这使得CNN能够直接从原始像素中,经过极少的预处理,识别视觉上面的规律。然而,由于当时缺乏大规模训练数据,计算机的计算能力也跟不上,LeNet-5 对于复杂问题的处理结果并不理想。

2、AlexNet

AlexNet是由 Hinton 的学生 Alex Krizhevsky 在 2012 年提出的深度卷积网络,可以看做是 Lenet 加深加宽版本。AlexNet 中采用了一系列的新的技术点:成功应用了 Relu、Dropout 和 LRN 等 trick,首次采用 GPU 进行加速。

整个AlexNet有8个需要训练参数的层(不包括池化层和LRN层),前5层为卷积层,后3层为全连接层,如图4所示。AlexNet最后一层是有1000类输出的Softmax层用作分类。 LRN层出现在第1个及第2个卷积层后,而最大池化层出现在两个LRN层及最后一个卷积层后。ReLU激活函数则应用在这8层每一层的后面。
卷积神经网络CNN 常用模型_第4张图片
整个网络呈一个金字塔结构,具体来说:
(1)输入图片是224 * 224像素的三通道图片;
(2)第一层使用11 * 11的卷积核,滑动步长为4个像素,输出为96个特征图并进行最大值池化;
(3)第二层使用5 * 5卷积核,卷积产生256个特征图,并进行最大池化;
(4)第三层,第四层均使用3 * 3卷积核,输出384个特征图;
(5)第五层使用3 * 3卷积层,输出256个特征图,并进行池化;
(6)第六层,第七层为全连接层,分别包含 4096 个隐层,也就是说,到全连接层时只剩4096个特征值;
(7)最终,第八层为 softmax 层,得到最终的分类结果。
卷积神经网络CNN 常用模型_第5张图片

卷积神经网络CNN 常用模型_第6张图片

(1)AlexNet 主要使用到的新技术点如下:

(1)成功使用 ReLU 作为CNN的激活函数,并验证其效果在较深的网络超过了Sigmoid,成功解决了Sigmoid在网络较深时的梯度弥散问题。虽然 ReLU 激活函数在很久之前就被提出了,但是直到 AlexNet 的出现才将其发扬光大。
(2)训练时使用 Dropout 随机忽略一部分神经元,以避免模型过拟合。Dropout 虽有单独的论文论述,但是 AlexNet 将其实用化,通过实践证实了它的效果。在 AlexNet 中主要是最后几个全连接层使用了 Dropout。
卷积神经网络CNN 常用模型_第7张图片
(3)在 CNN 中使用重叠的最大池化。此前 CNN 中普遍使用平均池化,AlexNet 全部使用最大池化,避免平均池化的模糊化效果。并且 AlexNet 中提出让步长比池化核的尺寸小,这样池化层的输出之间会有重叠和覆盖,提升了特征的丰富性。
(4)提出了 LRN 层,对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。
(5)使用 CUDA 加速深度卷积网络的训练,利用GPU强大的并行计算能力,处理神经网络训练时大量的矩阵运算。AlexNet使用了两块GTX 580 GPU进行训练,单个GTX 580只有3GB显存,这限制了可训练的网络的最大规模。因此作者将AlexNet分布在两个GPU上,在每个GPU的显存中储存一半的神经元的参数。因为GPU之间通信方便,可以互相访问显存,而不需要通过主机内存,所以同时使用多块GPU也是非常高效的。同时,AlexNet的设计让GPU之间的通信只在网络的某些层进行,控制了通信的性能损耗。 
(6)使用数据增强技术包括图像转换,水平反射和补丁提取。,随机地从256´256的原始图像中截取224´224大小的区域(以及水平翻转的镜像),相当于增加了(256-224)2´2=2048倍的数据量。如果没有数据增强,仅靠原始的数据量,参数众多的CNN会陷入过拟合中,使用了数据增强后可以大大减轻过拟合,提升泛化能力。进行预测时,则是取图片的四个角加中间共5个位置,并进行左右翻转,一共获得10张图片,对他们进行预测并对10次结果求均值。同时,AlexNet论文中提到了会对图像的RGB数据进行PCA处理,并对主成分做一个标准差为0.1的高斯扰动,增加一些噪声,这个Trick可以让错误率再下降1%。
(7) 使用 mini-batch SGD 训练模型,具有动量和重量衰减的特定值。
(8)每一层权重均初始化为0均值0.01标准差的高斯分布,在第二层、第四层和第五层卷积的偏置被设置为1.0,而其他层的则为0,目的是为了加速早期学习的速率(因为激活函数是ReLU,1.0的偏置可以让大部分输出为正)。
(9)学习速率初始值为0.01,在训练结束前共减小3次,每次减小都出现在错误率停止减少的时候,每次减小都是把学习速率除以10 。
(10)局部响应归一化。在使用饱和型的激活函数时,通常需要对输入进行归一化处理,以利用激活函数在0附近的线性特性与非线性特性,并避免饱和,但对于ReLU函数,不需要输入归一化。然而,Alex等人发现通过LRN这种归一化方式可以帮助提高网络的泛化性能。LRN的作用就是,对位置(x, y)处的像素计算其与几个相邻的kernel maps的像素值的和,并除以这个和来归一化。

3、VGGNet(Visual Geometry Group)

VGGNet 是牛津大学计算机视觉研究组(Visual Geometry Group)和Google DeepMind公司的研究员们一起研发的深度卷积神经网络。主要特点是 “简洁,深度”。 深, 是因为VGG有19层,远远超过了它的前辈; 而简洁,则是在于它的结构上,一律采用 stride 为1的 3×3 的 filter,以及 stride 为 2 的 2×2 的MaxPooling。
卷积神经网络CNN 常用模型_第8张图片

VGGNet探索了卷积神经网络的深度与其性能之间的关系,通过反复的堆叠3×3的小型卷积核和2×2的最大池化层,构建了16~19层深度的卷积神经网络。整个网络结构简洁,都使用同样大小的卷积核尺寸(3×3)和最大池化尺寸(2×2)。VGGNet的扩展性很强,迁移到其他图片数据上的泛化性很好,因此,截止到目前为止,也常被用来抽取图像的特征。
VggNet 一共有六种不同的网络结构,但是每种结构都有5组卷积,每组内有 2~3 个卷积层,卷积都使用3x3的卷积核,同时每组尾部会连接一个2x2的最大池化层用来缩小图片尺寸。每组内的卷积核数量一样,越靠后的段的卷积核数量越多:64 – 128 – 256 – 512 – 512。卷积后面是三个全连接层。在训练高级别的网络时,可以先训练低级别的网络,用前者获得的权重初始化高级别的网络,可以加速网络的收敛。

(1)要点

卷积神经网络CNN 常用模型_第9张图片
● 仅使用 3x3 尺寸的 filter 与 AlexNet 的第一层 11x11 filter 和 ZF Net 的 7x7 filter 完全不同。

作者的推理是两个3x3 conv 层的组合具有 5x5 的有效感受野,三个3x3 conv 层的组合具有 7x7 的有效感受野,这又可以模拟更大的 filter,同时保持较小 filter 尺寸的优势,其中一个好处是减少了参数的数量。此外,使用两个转换层,我们可以使用两个 ReLU 层而不是一个。
卷积神经网络CNN 常用模型_第10张图片
● 随着每层输入卷的空间大小减小(转换层和池层的结果),当您沿着网络向下时,由于 filter 数量的增加,卷的深度会增加。
● 有趣的是注意到每个 maxpool 层之后过滤器的数量翻倍,这加强了缩小空间尺寸的想法,但增加了深度
● 在图像分类和本地化任务方面都做得很好。作者使用一种本地化形式作为回归。
● 使用Caffe工具箱构建模型。
● 在训练期间使用 scale jittering 比例抖动作为一种数据增强技术。
● 在每个转换层之后使用 ReLU 层并使用批量梯度下降进行训练。
● 在4个Nvidia Titan Black GPU上训练了两到三周。
LRN 层作用不大(VGGNet不使用局部响应标准化(LRN),这种标准化并不能在 ILSVRC 数据集上提升性能,却导致更多的内存消耗和计算时间

(1)VGGNet 训练技巧

先训练级别A的简单网络,再复用A网络的权重来初始化后面的几个复杂模型,这样训练收敛的速度更快。在预测时,VGG采用Multi-Scale的方法,将图像scale到一个尺寸Q,并将图片输入卷积网络计算。然后在最后一个卷积层使用滑窗的方式进行分类预测,将不同窗口的分类结果平均,再将不同尺寸Q的结果平均得到最后结果,这样可提高图片数据的利用率并提升预测准确率。在训练中,VGGNet 还使用 Multi-Scale的方法做数据增强,将原始图像缩放到不同尺寸S,然后再随机裁切224´224的图片,这样能增加很多数据量,对于防止模型过拟合有很不错的效果

(2)在训练的过程中,比AlexNet收敛的要快一些,原因为:

使用小卷积核和更深的网络进行的正则化;
在特定的层使用了预训练得到的数据进行参数的初始化。

4、GoogleNet

inception(也称GoogLeNet)是 2014 年 Christian Szegedy 提出的一种全新的深度学习结构,在这之前的 AlexNet、VGG 等结构都是通过增大网络的深度(层数)来获得更好的训练效果,但层数的增加会带来很多负作用,比如 overfit、梯度消失、梯度爆炸等。inception 的提出则从另一种角度来提升训练结果:能更高效的利用计算资源,在相同的计算量下能提取到更多的特征,从而提升训练结果。

inception 跳出直线加深网络层数的思路,通过增加“宽度”的方式增加网络复杂度,避免陷入卷积核选择的陷阱,让程序自己学习如何选择卷积核。具体来说中,是在每一个卷积层,并行使用1 * 1卷积核,3 * 3 卷积核,5 * 5卷积核和池化,同时提取不同尺度的特征,然后通过1*1的卷积核对每一个分支进行降维后,最后将结果合并拼接在一起。直观地看起来,好像结构复杂了很多,本来只要一两个卷积就可以完成地计算,现在却要使用四五种不同地操作。但是仔细分析可以发现,这样地设计不仅减少了参数地数量,而且由于增加了网络地“宽度”,网络对多种尺度地适应性就更好了。
inception 结构:卷积神经网络CNN 常用模型_第11张图片
GoogleNet 结构:

结构参数:
卷积神经网络CNN 常用模型_第12张图片
在这里插入图片描述
#3X3 reduce 、 #5X5 reduce 以及 pool proj 是降维处理
其中 inception 的输出通道数 = (#1X1)+ (#3X3)+(#5X5)+ pool proj

要点

卷积神经网络CNN 常用模型_第13张图片
1、在整个架构中使用了 9 个 Inception 模块,总共超过 100 层!
2、没有使用全连接层!使用全局平均 pooling,从 7x7x1024 volume 到 1x1x1024 volume。这节省了大量参数
3、训练过程使用辅助分类器结构进行训练;但是验证和测试过程不需要辅助分类器,需要将其关闭。
卷积神经网络CNN 常用模型_第14张图片
3、使用的参数比 AlexNet 少12倍。
4、在测试过程中,创建了相同图像的多个作物,并将其输入网络,并对 softmax 概率进行平均,以便为我们提供最终解决方案。
5、利用 R-CNN 的概念来检测它们的检测模型。
6、Inception 模块有更新版本(版本6和7)。
7、接受“一周内几个高端GPU”的训练。

(1)1x1 卷积的作用

可以看到图中有多个黄色的1x1卷积模块,这样的卷积有什么用处呢?

作用1:在相同尺寸的感受野中叠加更多的卷积,能提取到更丰富的特征。这个观点来自于Network in Network(NIN, https://arxiv.org/pdf/1312.4400.pdf),图1里三个1x1卷积都起到了该作用。

卷积神经网络CNN 常用模型_第15张图片
左侧是是传统的卷积层结构(线性卷积),在一个尺度上只有一次卷积;右图是Network in Network结构(NIN结构),先进行一次普通的卷积(比如3x3),紧跟再进行一次1x1的卷积,对于某个像素点来说1x1卷积等效于该像素点在所有特征上进行一次全连接的计算,所以右侧图的1x1卷积画成了全连接层的形式,需要注意的是NIN结构中无论是第一个3x3卷积还是新增的1x1卷积,后面都紧跟着激活函数(比如relu)。将两个卷积串联,就能组合出更多的非线性特征。

作用2:使用 1x1 卷积进行降维,降低了计算复杂度

图 2 中间 3x3 卷积和 5x5 卷积前的1x1卷积都起到了这个作用。当某个卷积层输入的特征数较多,对这个输入进行卷积运算将产生巨大的计算量;如果对输入先进行降维,减少特征数后再做卷积计算量就会显著减少。
卷积神经网络CNN 常用模型_第16张图片
卷积神经网络CNN 常用模型_第17张图片

(2)多个尺寸上进行卷积再聚合

图中可以看到对输入做了4个分支,分别用不同尺寸的filter进行卷积或池化,最后再在特征维度上拼接到一起。这种全新的结构有什么好处呢?Szegedy从多个角度进行了解释:

解释1:在直观感觉上在多个尺度上同时进行卷积,能提取到不同尺度的特征。特征更为丰富也意味着最后分类判断时更加准确。
解释2:利用稀疏矩阵分解成密集矩阵计算的原理来加快收敛速度

5、ResNets

对于深度神经网络来说,VGGNets 证明了加深网络层次是提高精度的有效手段,但是由于梯度弥散的问题导致网络深度无法持续加深。梯度弥散问题是由于在反向传播过程中误差不断累积,导致在最初的几层梯度值几乎为 0,从而无法收敛。经过测试,20层以上的深层网络,会随着层数的增加,收敛效果越来越差,50层的网络是20层的网络所得错误率的一倍。这一现象称为深度网络的退化问题。

ResNet 就是为了解决这个问题而提出的,因而帮助我们训练更深的网络。 它引入了一个 residual block(残差块)。

ResNet声名鹊起的一个很重要的原因是,它提出了残差学习的思想。图6.8为ResNet的一个残差学习模块,该模块包含多个卷积层,多个卷积层对这个残差学习模块的输入数据 进行 的变化,同时原始输入信息跳过多个卷积层直接传导到后面的层中,最终将 的整体作为输入,并用激活函数激活,从而得到这个残差学习模块的输出结果。所以本质上 是输出结果和输入结果之间的差值,即残差。ResNet学习的就是 ,因此ResNet又叫作残差网络。
卷积神经网络CNN 常用模型_第18张图片
残差学习模块的优势

传统的卷积神经网络或者全连接网络,在信息传递时,或多或少会存在信息丢失、损耗等问题,同时还会导致梯度消失或梯度爆炸,使得很深的网络无法训练。ResNet通过提出残差学习的思想,在一定程度上解决了这个问题。通过将输入信息X“绕道”传导到输出,极大保护了信息的完整性,整个网络只需要学习输入、输出和残差部分,即 就能简化学习的目标和难度。

在2012年的ILSVRC挑战赛中,AlexNet取得了冠军,并且大幅度领先于第二名。由此引发了对AlexNet广泛研究,并让大家树立了一个信念——“越深网络准确率越高”。这个信念随着VGGNet、Inception v1、Inception v2、Inception v3不断验证、不断强化,得到越来越多的认可,但是,始终有一个问题无法回避,这个信念正确吗?
它是正确的,至少在理论上是正确的。
假设一个层数较少的神经网络已经达到了较高准确率,我们可以在这个神经网络之后,拼接一段恒等变换的网络层,这些恒等变换的网络层对输入数据不做任何转换,直接返回(y=x),就能得到一个深度较大的神经网络,并且,这个深度较大的神经网络的准确率等于拼接之前的神经网络准确率,准确率没有理由降低。
卷积神经网络CNN 常用模型_第19张图片
通过实验,ResNet随着网络层不断的加深,模型的准确率先是不断的提高,达到最大值(准确率饱和),然后随着网络深度的继续增加,模型准确率毫无征兆的出现大幅度的降低。
这个现象与“越深的网络准确率越高”的信念显然是矛盾的、冲突的。ResNet团队把这一现象称为“退化(Degradation)”。
ResNet团队把退化现象归因为深层神经网络难以实现“恒等变换(y=x)”。乍一看,让人难以置信,原来能够模拟任何函数的深层神经网络,竟然无法实现恒等变换这么简单的映射了?
让我们来回想深度学习的起源,与传统的机器学习相比,深度学习的关键特征在于网络层数更深、非线性转换(激活)、自动的特征提取和特征转换,其中,非线性转换是关键目标,它将数据映射到高纬空间以便于更好的完成“数据分类”。随着网络深度的不断增大,所引入的激活函数也越来越多,数据被映射到更加离散的空间,此时已经难以让数据回到原点(恒等变换)。或者说,神经网络将这些数据映射回原点所需要的计算量,已经远远超过我们所能承受的。
退化现象让我们对非线性转换进行反思,非线性转换极大的提高了数据分类能力,但是,随着网络的深度不断的加大,我们在非线性转换方面已经走的太远,竟然无法实现线性转换。显然,在神经网络中增加线性转换分支成为很好的选择,于是,ResNet团队在ResNet模块中增加了快捷连接分支,在线性转换和非线性转换之间寻求一个平衡

(1)深层次卷积神经网络的存在问题
卷积神经网络CNN 常用模型_第20张图片

(2)ResNet网络架构

层数较多的神经网络,可由较浅的神经网络和恒等变换网络拼接而成,如图所示。

卷积神经网络CNN 常用模型_第21张图片

与普通的CNN相比,ResNet 最大的不同在于 ResNet 有很多的旁路直线将输入直接连到网络后面的层中,使得网络后面的层也可以直接学习残差,这种网络结构成为 shortcut 或 skip connection。这样做解决了传统CNN在信息传递时,或多或少会丢失原始信息的问题,保护数据的完整性,整个网络只需要学习输入、输出差别的一部分,简化了学习的难度和目标。
ResNet 提出了两种 mapping:一种是 identity mapping,指的就是下图中”弯弯的曲线”,另一种residual mapping,指的就是除了”弯弯的曲线“那部分,所以最后的输出是 y=F(x)+x。identity mapping顾名思义,就是指本身,也就是公式中的x,而residual mapping指的是“差”,也就是y−x,所以残差指的就是F(x)部分。
左边的残差结构是针对层数较少网络,例如 ResNet18 层和 ResNet34 层网络。右边是针对网络层数较多的网络,例如 ResNet101,ResNet152 等。为什么深层网络要使用右侧的残差结构呢。因为,右侧的残差结构能够减少网络参数与运算量。同样输入一个channel为256的特征矩阵,如果使用左侧的残差结构需要大约1170648个参数,但如果使用右侧的残差结构只需要69632个参数。明显搭建深层网络时,使用右侧的残差结构更合适。

浅层次残差结构(针对ResNet18/34)

卷积神经网络CNN 常用模型_第22张图片
如上图所示,该残差结构的主分支是由两层 3x3 的卷积层组成,而残差结构右侧的连接线是 shortcut 分支也称捷径分支(注意为了让主分支上的输出矩阵能够与我们捷径分支上的输出矩阵进行相加,必须保证这两个输出特征矩阵有相同的shape)。
如果刚刚仔细观察了ResNet34网络结构图的同学,应该能够发现图中会有一些虚线的残差结构。在原论文中作者只是简单说了这些虚线残差结构有调整特征图大小的作用,从而使得上一层残差结构的输出符合该层残差结构的输入并在捷径分支上通过1x1的卷积核进行降维处理。而在实线的残差结构中,输入和输出矩阵的高宽都是相同的。上图右侧给出了详细的虚线残差结构,注意下每个卷积层的步距 stride,以及捷径分支上的卷积核的个数(与主分支上的卷积核个数相同)。

深层次残差结构(针对ResNet50/101/152)

卷积神经网络CNN 常用模型_第23张图片
如上图所示。在该残差结构当中,主分支使用了三个卷积层,第一个是1x1的卷积层用来压缩 channel 维度,第二个是 3x3 的卷积层,第三个是 1x1 的卷积层用来还原 channel 维度(注意主分支上第一层卷积层和第二次卷积层所使用的卷积核个数是相同的,第三次是第一层的 4 倍)。该残差结构所对应的虚线残差结构如上图右侧所示,同样在捷径分支上有一层1x1的卷积层,它的卷积核个数与主分支上的第三层卷积层卷积核个数相同,注意每个卷积层的步距。

(3)两种 Shortcut Connection 方式

卷积神经网络CNN 常用模型_第24张图片
如上图所示,如果 F(x) 和 x 的 channel 个数不同怎么办,因为 F(x) 和 x 是按照 channel
维度相加的,channel 不同怎么相加呢? 针对channel个数是否相同,要分成两种情况考虑,如下图:
卷积神经网络CNN 常用模型_第25张图片
如上图所示,我们可以清楚的”实线“和”虚线“两种连接方式:
● 实线的的 Connection 部分(”第一个粉色矩形和第三个粉色矩形“)都是执行 3x3x64 的卷积,他们的 channel 个数一致,所以采用计算方式: y=F(x)+x。
卷积神经网络CNN 常用模型_第26张图片
● 虚线的的Connection部分(”第一个绿色矩形和第三个绿色矩形“)分别是3x3x64和3x3x128的卷积操作,他们的channel个数不同(64和128),所以采用计算方式:y=F(x)+W·x 。其中W是卷积操作,用来调整x的channel维度的
卷积神经网络CNN 常用模型_第27张图片
虚线残差结构有调整特征图大小的作用,从而使得上一层残差结构的输出符合该层残差结构的输入并在捷径分支上通过1x1的卷积核进行降维处理。而在实线的残差结构中,输入和输出矩阵的高宽都是相同的。上图右侧给出了详细的虚线残差结构,注意下每个卷积层的步距 stride,以及捷径分支上的卷积核的个数(与主分支上的卷积核个数相同)。

从实际实验的结果来看,残差网络的效果是非常明显的。如论文里所说,类似VGGNet的结构在超过20个参数层以后,收敛效果会大打折扣,准确率比较差,但是简单地加入一些“捷径”(shortcut)连接边后,使其转变为残差结构,收敛效果都急剧提高,精度也随着训练次数地增加持续提高,并且不断加深网络深度还可以持续提高准确率,残差网络与VGG结构地对比如图所示:

(3)不同深度的ResNet网络结构配置
卷积神经网络CNN 常用模型_第28张图片

(4)ResNet 网络结构详解

以 34 层 ResNet 模型架构图为例:
卷积神经网络CNN 常用模型_第29张图片
卷积神经网络CNN 常用模型_第30张图片

(1)conv1层,该层使用64个7×7的卷积核,步长为2,将224×224大小的彩色图像降维到112×112。
(2)conv2_x层,首先进行3×3的最大值池化,步长为2,将维度进一步降低为56×56,然后是3个残差学习模块,每一个模块都由两个卷积层组成,卷积核大小为3×3,64个通道。
(3)conv3_x层,由4个残差学习模块组成,由于conv2_3的输出结果是56×56,因此在conv3_1的某一卷积层,需要将步长调整为2,从而将conv3_4的输出维度降低到28×28。
(4)conv4_x层,由6个残差学习模块组成,同理,在conv4_1中的某一卷积层需要将步长调整为2,从而将conv4_6的输出维度降低到14×14。
(5)conv5_x层,由3个残差学习模块组成,同理,在conv5_1将步长调整为2,最后输出7×7维的图像。
(6)最后是一个全连接层,输出到1 000分类。

6、MobileNet

(1)深度可分离卷积与逐点卷积

MobileNet 的基本单元是深度级可分离卷积(depthwise separable convolution——DSC),其实这种结构之前已经被使用在Inception模型中。
可分离卷积主要有两种类型:空间可分离卷积和深度可分离卷积。
卷积神经网络CNN 常用模型_第31张图片
卷积神经网络CNN 常用模型_第32张图片
卷积神经网络CNN 常用模型_第33张图片
卷积神经网络CNN 常用模型_第34张图片
为什么要深度可分离卷积?
卷积神经网络CNN 常用模型_第35张图片
卷积神经网络CNN 常用模型_第36张图片
(2)MobileNet V1

MobileNet V1是一种基于流水线结构,使用深度可分离卷积构建的轻量级神经网络,并通过两个超参数的引入使得开发人员可以基于自己的应用和资源限制选择合适的模型。
从概念上来说,MobileNetV1正试图实现两个基本目标,以构建移动第一计算视觉模型:1,较小的模型,参数数量更少;2,较小的复杂度,运算中乘法和加法更少。遵循这些原则,MobileNet V1 是一个小型,低延迟,低功耗的参数化模型,可以满足各种用例的资源约束。它们可以用于实现:分类,检测,嵌入和分割等功能。

MobileNet V1的创新点

卷积神经网络CNN 常用模型_第37张图片
卷积神经网络CNN 常用模型_第38张图片
卷积神经网络CNN 常用模型_第39张图片

MobileNet V1 的网络架构

MobileNet V1 的核心架构则基于一个流线型架构,该架构使用深度可分离卷积网络来构建了轻量化深度神经网络。就神经网络结构而言,深度可分类卷积将卷积核分为两个单独的卷积核,这两个卷积核依次进行两个卷积,即先是深度卷积,然后进行逐点卷积,如下图所示:
卷积神经网络CNN 常用模型_第40张图片
在MobileNetV1中,深度卷积网络的每个输入信道都应用了单个滤波器。然后,逐点卷积应用 1*1 卷积网络来合并深度卷积的输出。这种标准卷积方法既能滤波,又能一步将输入合并成一组新的输出。在这之中,深度可分离卷积将其分为两次,一层用于滤波,另一层则用于合并。

MobileNet的网络结构如下,一共由 28层构成(不包括AvgPool 和 FC 层,且把深度卷积和逐点卷积分开算),其除了第一层采用的是标准卷积核之外,剩下的卷积层都是用Depth Wise Separable Convolution。

模型参数 卷积神经网络CNN 常用模型_第41张图片

(3)MobileNet V2

MobileNet V2基于MobileNet V1的一些思想,并结合新的思想来优化。从架构上来看,MobileNet V2为架构增添了两个新模块:1,引入了层与层之间的线性瓶颈;2,瓶颈之间的快捷连接。
MobileNetV2之中的核心思想是,瓶颈对模型的中间输入和输出进行编码,而内层则用于封装模型从较低级别概念(如:像素等)转换到较高级别描述符(如:图像类别等)的能力。最后,与传统的剩余连接一样,快捷方式能够实现更快地训练速度和更高的准确率。
卷积神经网络CNN 常用模型_第42张图片
卷积神经网络CNN 常用模型_第43张图片
MobileNet V2 的创新点

卷积神经网络CNN 常用模型_第44张图片
卷积神经网络CNN 常用模型_第45张图片
卷积神经网络CNN 常用模型_第46张图片

MobileNet V2 网络架构

卷积神经网络CNN 常用模型_第47张图片
卷积神经网络CNN 常用模型_第48张图片
卷积神经网络CNN 常用模型_第49张图片

(4)MobileNet V3

MobileNet V3 的创新点

卷积神经网络CNN 常用模型_第50张图片
卷积神经网络CNN 常用模型_第51张图片
在这里插入图片描述

MobileNet V3 网络结构

卷积神经网络CNN 常用模型_第52张图片
卷积神经网络CNN 常用模型_第53张图片
卷积神经网络CNN 常用模型_第54张图片
卷积神经网络CNN 常用模型_第55张图片
卷积神经网络CNN 常用模型_第56张图片
(1)起始部分
卷积神经网络CNN 常用模型_第57张图片
(2)中间部分
卷积神经网络CNN 常用模型_第58张图片
卷积神经网络CNN 常用模型_第59张图片
卷积神经网络CNN 常用模型_第60张图片
卷积神经网络CNN 常用模型_第61张图片
中间每个层的结构
卷积神经网络CNN 常用模型_第62张图片
(3)结尾部分
卷积神经网络CNN 常用模型_第63张图片

你可能感兴趣的:(深度学习与自然语言处理,卷积神经网络)