- VGG
- Resnet
- Inception V1-v3
- Densnet
- ResnXt
- SENet
- NAS
- 下面四个都是轻量化模型
- MobileNet V1-V2
- mobileNet V3(novel):https://arxiv.org/pdf/1905.02244.pdf
- Xception
- shufflenet V1-V2
- squeezenet
- group convolution
- SEResNet,SEResNeXt
- NAS
- EfficientNet
知识点包括:BN的作用,1X1卷积作用,深度分离卷积理解
VGG
该网络表明堆叠多个层是提升计算机视觉性能的关键因素。包含16或19个层,主要由小型的3x3卷积(可以使得网络更深,限制参数的数量)操作和2x2池化操作组成。通过堆叠3x3卷积而不是使用单个7x7卷积,
-
这样组合了三个非线性函数,使得决策函数更有表征能力
-
参数数量减少了81%,而感受野保持不变
-
使得网络可以变得更深
ResNet
增加网络深度会导致更高的训练误差,这表明梯度问题(梯度爆炸/消失)可能会导致训练收敛性等潜在问题。作者想到构建恒等映射解决这个问题,问题解决的标志是:增加网络层数但训练误差不增加。(什么是恒等映射,比如20层的网络是56层的一个子集,若将56层网络最后36层全部短接,这些层进来什么出去也是什么,这就是恒等映射,这不就等效于20层网络了,至少不会比20层差,不引入恒等映射的56层为什么不行?因为梯度消失现象使得网络难以训练,虽然网络深度增加,但实际上无法有效训练网络,训练不充分的网络不但无法提升性能,甚至降低了性能)。使用残差网络构建恒等映射,原先网络输入x,希望输出H(x),。我们令H(x)=F(x)+x,那么我们网络只需要学习输出一个残差F(x)=H(x)-x。
-
跳远连接skipconnection不会增加参数数量,可以获得稳定的训练和显著性能提升
-
1x1用于减少输出通道个数
-
在每次卷积 完成后,**进行前都有个BN操作
-
删除了全连接,并使用平均池化层减少参数数量,由于网络深,卷积层抽象能力强,从而减少了对全连接的需求
BN的作用:BN可以保证每一层的输入分布稳定,这可以使训练加速
-
加快训练速度增大学习率
-
减小梯度消失和梯度爆炸
-
控制过拟合,可以少用或者不用dropout和正则
-
降低网络对初始权重不敏感
GoogleNet
inception模块使用了3种不同卷积核,提取不同尺度特征,既有宏观特征又有微观特征,增加了特征多样性。池化层目的是保留较为原始的输入信息。在模块的输出端将提取到的各种特征在channel维度上进行拼接,得到多尺度的特征featuremap
这种naive的版本在进行5×5卷积的时候依然会造成大量的计算成本。为了解决这个问题,引入1×1卷积,它可以跨通道组织信息,提高网络的表达能力,同时可以对输出通道降维以减少计算成本。
能更高效利用计算资源,在相同计算量下能提取到更多特征,从而提升训练结果。Inception结构主要贡献:
-
使用1x1卷积来进行升降维并进行非线性化,注意1x1卷积作用
-
降维/升维
-
减少卷积核参数,降低计算复杂度
-
加入非线性,提升网络表达能力(每个1X1后有个**)
-
跨通道的信息角交互和信息整合
-
-
在多个尺寸上同时进行卷积再聚合(增加了特征多样性)。直观上感觉在多个尺度上同时进行卷积,能提取到不同尺度的特征,特征更丰富以为最后分类判断时更准确
Inception V1
-
网络中有3个softmax,为了减轻深层网络反向传播时梯度消失的影响。就是说整个网络由3个softmax共同组成损失,这样在反向传播时,即使最后一个softmax传播回来的梯度消失,还有前两个softmax传播回来的梯度辅助,测试时额外softmax会拿下。这样不仅减轻了梯度消失的影响,而且加速了网络的收敛
-
采用了average pooling来代替全连接层,减少参数
-
使用Inception模块提高参数的利用效率,使用1X1卷积减小计算成本
Inception V2
堆叠网络虽然可以提高准确率,但会导致计算效率明显下降,如何在比增加过多计算量同时提高网络表达能力。
-
用2个连续的3X3卷积组成的小网络来代替单个的5X5卷积,即在保证感受野范围同时减少了参数量
-
任意nxn卷积都可通过1xn卷积后接nx1卷积来代替。这种分解方法在网络前期使用效果不好,在中度大小的特征图上效果会更好(12~20之间最好)
-
使用两个并行化的卷积降低计算量( 卷积、池化并行执行,再进行合并)
Inception V3:
Inception-v3 = Inception-v2 + Factorization + Batch Normalization
-
Inception V3最重要的改机你是分解(Factorization),将7x7卷积分解成两个一维卷积(1x7,7x1),3x3(1x3,3x1)。这样好处既可以加速计算,又可以将1个卷积拆成2个卷积,使得网深度进一步增加,增加了网络非线性(每层都要Relu)
-
网络输入从224x224变为299x299
-
辅助分类器加入BN
-
使**函数能够更有效的利用输入信息
-
随着模型训练,能够学习每层输入分布
-
使内部协方差变小,加速训练过程
-
有效减缓梯度消失
-
-
RMSProp优化器
-
标签平滑(添加到损失公式的一种正则化项,旨在阻止网络对某一类别过分自信)
inception V4:
Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning
加入rssidual connections,网络训练速度加快
DensNet
密集连接:缓解梯度消失,加强特征传播,鼓励特征复用,极大减少了参数量
-
网络中,任何两层之间都有直接连接,即网络每层输入都是前面所有层输出的并集,该层学习的特征图也会被直接传给其后面所有层作为输入
-
Densnet比其他网络效率更高,关键就在于网络每层计算量的减少及其特征的重复利用,每层都包含之前所有层输出,只需要很少特征图就够,这就是参数量少的原因
下图是 DenseNet 的一个dense block示意图,一个block里面的结构如下,与ResNet中的BottleNeck基本一致:BN-ReLU-Conv(1×1)-BN-ReLU-Conv(3×3) ,而一个DenseNet则由多个这种block组成。
dense connectivity 仅仅是在一个dense block里的,不同dense block 之间是没有dense connectivity的,比如下图所示。每个DenseBlock的之间层称为transition layers,由BN−>Conv(1×1)−>averagePooling(2×2)组成
Xception
-
Inception出发点,用多尺寸卷积观察输入数据,还有就是用多个小卷积核替代大卷积核。
-
Pointwise Conv,用1x1卷积做数据降维减少参数量(也可以升维,丰富数据特征。同时加个**函数,增加非线性特征)
-
卷积核替换,5x5替换成2个3x3,7x7替换成1x7和7x1
-
Bottleneck,利用多个小卷积替代一个大卷积
-
Depthwise Separable Conv:深度可分卷积,再减少参数量
Depthwise Separable Convolution 深度可分离卷积(Xception和MobileNet)
MobileNet是基于深度可分离卷积的,通俗来说,深度可分离卷积就是:把标准卷积分解成深度卷积(depthwise convolution)和逐点卷积(pointwise convolution)。这么做的好处就是可以再损失精度不多的情况下大幅度降低参数量和计算量。分解过程如下:
深度分离卷积示例:
输入图片大小(6,6,3),原卷积操作用(4,4,3,5)的卷积(卷积核大小为4x4,卷积核通道为3,卷积核数量为5),stride=1,padding=0。输出的特征尺寸为(6-4)/1+1=3,即输出的特征映射为(3,3,5)
将标准卷积中选取序号为n的卷积核,大小为(4,4,3),标准卷积过程示意图如下(省略bias):
黑色的输入为(6,6,3) 与第n个卷积核对应,每个通道对应每个卷积核通道卷积得到输出,最终输出为2+0+1=3(这是常见的卷积操作,注意这里卷积核要和输入的通道数相同,即图中表示的3个通道~)
对于深度分离卷积,把标准卷积(4,4,3,5)分解为:
-
深度卷积部分:大小为(4,4,1,3) ,作用在输入的每个通道上,输出特征映射为(3,3,3)
-
逐点卷积部分:大小为(1,1,3,5),作用在深度卷积的输出特征映射上,得到最终输出为(3,3,5)
例中深度卷积卷积过程示意图如下:
输入有3个通道,对应着有3个大小为(4,4,1) 的深度卷积核,卷积结果共有3个大小为(3,3,1) ,我们按顺序将这卷积按通道排列得到输出卷积结果(3,3,3) 。