深度学习中的大型卷积网络汇总

2018-11-15  本文已影响37人  yanghedada

Inception v1

Inception v1也叫GoogLeNet 。

这是Google的一篇论文,在当时无法网络深度上提升网络性能时,论文另辟蹊径,改用加大网络的宽度方法。使用多通道卷积进行构建更宽的网络,不仅提高模型在分类的效果,也提高了模型在目标检测的效果。主要构建一种 Inception module。如下所示:

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

在直观感觉上在多个尺度上同时进行卷积,能提取到不同尺度的特征。特征更为丰富也意味着最后分类判断时更加准确。

四个分支同步进行会导致计算爆炸,所在会在进行计算之前使用1x1卷积进行通道的尺度缩放。

下面就是Inception v1的全整个网络图。

上图中,在网络的中间层还有两个中间的loss,在中间进行权重的调整调整。

各层的卷积尺度。作者提到输入尺寸是224x224.所以这里的7x7 / 2卷积输入是224x224x3的图片,输出就是112x112x3.

VGG

VGG和GoogLeNet 是同一时期的论文,VGG沿用了Alex框架,使用了dropout等手段加深了网络深度,并使用堆叠3x3卷积核代替7x7的网络。论文探讨了很多的调参技巧是再进行实验的时候比较有用的。

vgg一共进行了6次实验,其中D和E表现最佳。D就是VGG16网络,E是VGG19网络,所有的网络都是使用3x3卷积核。

Inception v2 + v3

这两个模型出现在同一篇论文中,主要探讨三个原则:

其中v2/v3模型结构上的差别只有一点即在inception v3中使用的Aug loss里面使用了BN进行regularization。

ResNet

残差神经网络是一个卷积神经网络模型的大突破,直接解决了无法训练更深层的网络问题。
运用如下公式:

这里x使上层的网络,相当于已经拟合90%的模型,二F(x)就是残差块,这就是真实网络和x的一个残差(误差)。F(x) + x就像可以更加精确的拟合网络了。公式1中的x和F(x)的尺度不变。

若x和F(x)的尺度不一样,就需要使用公式2:


完整模型如下:


inception v4和 Inception-ResNet-v1,Inception-ResNet-v2

这三个个模型同时出现在一篇论文里面。论文中有大量的图和表,这是一篇实验性很强的论文,大部分在讨论模型的基础结构的功能,对比模型在分类和检测任务的性能。

Inception v4 引入了专用的「缩减块」(reduction block),它被用于改变网格的宽度和高度。早期的版本并没有明确使用缩减块,但也实现了其功能。
如下:

Inception-ResNet-v2和Inception-ResNet-v1结构类似如下:

受 ResNet 的优越性能启发,研究者提出了一种混合 inception 模块。Inception ResNet 有两个子版本:v1 和 v2。在分析其显著特征之前,先看看这两个子版本之间的微小差异。

参考:一文概览Inception家族的

ResNeXt

ResNeXt 结构可以在不增加参数复杂度的前提下提高准确率,同时还减少了超参数的数量。

文中提出网络 ResNeXt,同时采用 VGG 堆叠的思想和 Inception 的 split-transform-merge 思想,但是可扩展性比较强,可以认为是在增加准确率的同时基本不改变或降低模型的复杂度。这里提到一个名词cardinality,右边的 ResNeXt 中每个分支一模一样,分支的个数就是 cardinality。通过在大卷积核层两侧加入 1x1 的网络层,控制核个数,减少参数个数的方式。

图中中括号内就是 split-transform-merge,通过 cardinality(C) 的值控制 repeat layer。
output 在上下相邻的格子不断减半,中括号内的逗号后面卷积核的个数不断翻倍。
参考:ResNeXt算法详解

Xception

Xception网络结构,不仅借鉴了depthwise separable convolution的思想,也结合了ResNet的思想,最后作者也比较了ResNet在其中的作用

模型使用的残差块:

Xception模型结构:

  1. 整个网络结构具有14个模块,36个卷积
  2. 残差连接
    3.最后采用logistic regression

参考基础模型

DenseNet

DenseNet使RseNet上演变出来的又一个超级网络,网络设计了一种Dense Block模块。如下:

这里的Dense Block模块层数为5,即具有5个BN+Relu+Conv(3*3)这样的layer,网络增长率为k=4,简单的说就是每一个layer输出的feature map的维度为4。这里的网络增长率就是每层网络的的特征层输出数量。因为DenseNet的每层网络的输入是前面所有层的输出。所以这里要统一每层网络的输入层数k。
若k=32,第L 层网络的网络输入未 k0 + k(L-1).第L层的网络的输出为32.

网络结构:

这里有bottleneck layer和Translation layer。

参考1, 2, 3

SENet

Momenta 的胡杰一篇大作。

SE 模块的示意图。给定一个输入 x,其特征通道数为 c_1,通过一系列卷积等一般变换后得到一个特征通道数为 c_2 的特征。与传统的 CNN 不一样的是,接下来通过三个操作来重标定前面得到的特征。

在resnet和inception上的改动如下:

上左图是将 SE 模块嵌入到 Inception 结构的一个示例。方框旁边的维度信息代表该层的输出。

这里我们使用 global average pooling 作为 Squeeze 操作。紧接着两个 Fully Connected 层组成一个 Bottleneck 结构去建模通道间的相关性,并输出和输入特征同样数目的权重。我们首先将特征维度降低到输入的 1/16,然后经过 ReLu 激活后再通过一个 Fully Connected 层升回到原来的维度。这样做比直接用一个 Fully Connected 层的好处在于:1)具有更多的非线性,可以更好地拟合通道间复杂的相关性;2)极大地减少了参数量和计算量。然后通过一个 Sigmoid 的门获得 0~1 之间归一化的权重,最后通过一个 Scale 的操作来将归一化后的权重加权到每个通道的特征上。

除此之外,SE 模块还可以嵌入到含有 skip-connections 的模块中。上右图是将 SE 嵌入到 ResNet 模块中的一个例子,操作过程基本和 SE-Inception 一样,只不过是在 Addition 前对分支上 Residual 的特征进行了特征重标定。如果对 Addition 后主支上的特征进行重标定,由于在主干上存在 0~1 的 scale 操作,在网络较深 BP 优化时就会在靠近输入层容易出现梯度消散的情况,导致模型难以优化。

目前大多数的主流网络都是基于这两种类似的单元通过 repeat 方式叠加来构造的。由此可见,SE 模块可以嵌入到现在几乎所有的网络结构中。通过在原始网络结构的 building block 单元中嵌入 SE 模块,我们可以获得不同种类的 SENet。如 SE-BN-Inception、SE-ResNet、SE-ReNeXt、SE-Inception-ResNet-v2 等等。

参考1, 2

MobileNets

论文中的主要的思想是将一个标准卷积(standard convolution)分解成两个卷积,一个是深度卷积(depthwise convolution),这个卷积应用在每一个输入通道上;另一个是1×1的逐点卷积(pointwise convolution),这个卷积合并每一个深度卷积的输出

上图a就是标准的卷积核,它的大小就是DK×DK×M×N。它可以被分解为b和c这两个部分。
b的大小为M×(1×Dk×Dk)就是(depthwise convolution),c的大小为N×(M×1×1)就是(pointwise convolution).
既然卷积核分解了,那feature map也是要被分解的。
对一个DF×DF×M的特征图。需要分解为(M×DK×DK)×(DF×DF)这两个矩阵。
那怎么计算??

如下:

左边标准卷积,右边是深度分离卷积。

总的结构:

除了最后的全连接层,所有层后面跟了batchnorm和ReLU,最终输入到softmax进行分类。

参考:1, 2

上一篇 下一篇

猜你喜欢

热点阅读