轻型网络知识点

1 文章综述

一个文章综述,侵删

常用的模型压缩技术有:

(1)奇异值分解(singular value decomposition (SVD))
(2)网络剪枝(Network Pruning):使用网络剪枝和稀疏矩阵
(3)深度压缩(Deep compression):使用网络剪枝,数字化和huffman编码
(4)硬件加速器(hardware accelerator)

2 一维卷积(Full卷积、Same卷积、Valid卷积、带深度的一维卷积)

转载自该链接,侵删,可直接转,有图片,较清楚

一维Full卷积

  • Full卷积的计算过程是:K沿着I顺序移动,每移动到一个固定位置,对应位置的值相乘再求和
  • 将得到的值依次存入一维张量Cfull,该张量就是I和卷积核K的full卷积结果,其中K卷积核或者滤波器或者卷积掩码,卷积符号用符号★表示,记Cfull=I★K

一维Same卷积

  • 卷积核K都有一个锚点,然后将锚点顺序移动到张量I的每一个位置处,对应位置相乘再求和
  • 假设卷积核的长度为FL,如果FL为奇数,锚点位置在(FL-1)/2处;如果FL为偶数,锚点位置在(FL-2)/2处。

一维Valid卷积

  • 从full卷积的计算过程可知,如果K靠近I,就会有部分延伸到I之外,valid卷积只考虑I能完全覆盖K的情况,即K在I的内部移动的情况

在这里插入图片描述

具备深度的一维卷积

比如x是一个长度为3,深度为3的张量,其same卷积过程如下,卷积核K的锚点在张量x范围内依次移动,输入张量的深度和卷积核的深度是相等的。

具备深度的张量与多个卷积核的卷积

上面介绍了一个张量和一个卷积核进行卷积。他们的深度相等才能进行卷积,下面介绍一个张量与多个卷积核的卷积。同一个张量与多个卷积核的卷积本质上是该张量分别与每一个卷积核卷积,然后将每一个卷积结果在深度方向上连接起来。

3 二维卷积:full, same, valid

转自该链接,侵删

  1. full mode

橙色部分为image, 蓝色部分为filter。full模式的意思是,从filter和image刚相交开始做卷积,白色部分为填0。filter的运动范围如图所示。
在这里插入图片描述

  1. same mode
    当filter的中心(K)与image的边角重合时,开始做卷积运算,可见filter的运动范围比full模式小了一圈。注意:这里的same还有一个意思,卷积之后输出的feature map尺寸保持不变(相对于输入图片)。当然,same模式不代表完全输入输出尺寸一样,也跟卷积核的步长有关系。same模式也是最常见的模式,因为这种模式可以在前向传播的过程中让特征图的大小保持不变,调参师不需要精准计算其尺寸变化(因为尺寸根本就没变化)。
    在这里插入图片描述
  2. valid
    当filter全部在image里面的时候,进行卷积运算,可见filter的移动范围较same更小了
    在这里插入图片描述

4 MobileNet V1

该模块部分参考于此,侵删

  • google提出,专注于移动端或者嵌入式设备中的轻量级CNN网络
  • 在准确率小幅降低的前提下,大大减少了模型的参数与运算量

网络亮点

  • Depthwise Convention,大大减少了运算量和参数量
  • 增加超参数 α \alpha α控制卷积层卷积核个数,可对Architecture中所有卷积层kernel数量统一乘以 α \alpha α缩小因子(0,1],以压缩网络。
  • 增加超参数 β \beta β控制输入图像大小

DW卷积

在这里插入图片描述

  • 卷积核channel = 1
  • 输入矩阵channel = 卷积核个数 = 输出矩阵channel

PW卷积(Pointwise conv)

在这里插入图片描述

  • 普通的卷积核,但卷积核大小为1

Depthwise Separable Conv

  • DW + PW,理论上普通卷积是该卷积参数的8~9倍
  • Depthwise只提取通道内部的特征,但是通道与通道间信息是相互隔离的;而Pointwise通过提取每个点的特征,对每个通道间的信息进行交换。Depthwise+Pointwise相当于把普通卷积分为了2个步骤而已
  • 其部分卷积核在训练的时候会废掉,即卷积核参数大部分变为0,V2会改善

深度可分卷积和普通卷积

在这里插入图片描述

网络结构

MobileNetV1给出了网络结构

5 MobileNet V2

主要解决V1在训练过程中非常容易特征退化的问题。比V1更准确,更小。

卷积方式

在这里插入图片描述

网络亮点

遇到的问题:

  • ReLU造成的低维度数据坍塌(collapses),channel少的feature map不应后接ReLU,否则会破坏feature map。
  • 没有复用特征,神经云坏死。而通过ResNet结构的特征复用,可以很大程度上缓解这种特征退化问题。

Inverted residual block

该结构使用Point wise convolution先对feature map进行升维,再在升维后的特征接ReLU,减少ReLU对特征的破坏。
在这里插入图片描述

Linear Bottlenecks

倒残差结构最后一个1*1卷积层使用线性激活函数,而不是Relu。

基本结构

当stride = 1 且输入特征矩阵与输出特征矩阵shape相同时才有shortcut连接

网络结构

t:扩展因子,c:channel,n:bottleneck重复次数,s:stride每个block对应第一层的bottleneck的步距,其余均为1

6 SENet–Squeeze-and-Excitation

Attention机制

Attention机制其实就是一系列注意力分配系数,也就是一系列权重参数罢了。
在神经网络中,注意力机制通常是一个额外的神经网络,能够硬性的选择输入的某些部分,或者给输出的不同部分分配不同的权重,其能从大量信息中筛选出重要信息。
神经网络可以在通道维度或者空间维度加Attention机制,也可同时加,但会增加巨大的计算量消耗。

Attention机制和全连接层的区别

区别在于:

  • 注意力机制可以利用输入的特征信息来确定哪些部分更重要。
  • 注意力机制的意义在于引入权重函数f,使得权重与输入相关,从而避免了全连接层中的权重固定问题。
  • 全连接层的权重是一个实体上的每个特征的重要性,而注意力机制的输出结果是各个实体的重要性。

SENet

CVPR2017的文章SENet,它赢得了最后一届ImageNet 2017竞赛分类任务的冠军。重要的一点是SENet思路很简单,很容易扩展在已有网络结构中。
SENet网络的创新点在于关注channel之间的关系,希望模型可以自动学习到不同channel特征的重要程度。
SENet的核心思想在于通过网络根据loss去学习特征权重,使得有效的feature map权重大,无效或效果小的feature map权重小的方式训练模型达到更好的结果。
具体的结构如下:
在这里插入图片描述

  1. 给定一个输入 x,其特征通道数为 c_1,通过一系列卷积等一般变换后得到一个特征通道数为 c_2 的特征。
  2. Squeeze 操作。将每个二维的特征通道变成一个实数,这个实数某种程度上具有全局的感受野,并且输出的维度和输入的特征通道数相匹配。
  3. 通过参数 w 来为每个特征通道生成权重,其中参数 w 被学习用来显式地建模特征通道间的相关性。
  4. Reweight 的操作,我们将 Excitation 的输出的权重看做是进过特征选择后的每个特征通道的重要性,然后通过乘法逐通道加权到先前的特征上,完成在通道维度上的对原始特征的重标定。

注意:

  • 作者的动机是显示的建模特征通道之间的相互依赖关系。
  • Sequeeze-and-Excitation(SE) block并不是一个完整的网络结构,而是一个子结构,可以嵌到其他分类或检测模型中。
  • 这说明无论网络的深度如何,SE 模块都能够给网络带来性能上的增益。
  • 在现有网络架构中嵌入 SE 模块而导致额外的参数和计算量的增长微乎其微。

嵌入到主流的网络中

在这里插入图片描述

  • 这里我们使用 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 等等。

7 Xceptiom

该模块参考该链接,请大家直接移步

  • Xception 是 Google 继 Inception 后提出的对 Inception-v3 的另一种改进。
  • 采用 Separable Convolution(极致的 Inception 模块)来替换原来 Inception-v3中的卷积操作。
  • Xception(极致的 Inception):先进行普通卷积操作,再对 1×1 卷积后的每个channel分别进行 3×3 卷积操作,最后将结果 concat:
    在这里插入图片描述
  • 在“极致的 Inception”模块中,用于学习空间相关性的 3×3 的卷积,和用于学习通道间相关性的 1×1 卷积之间,不使用非线性激活函数时,收敛过程更快、准确率更高:
  • 事实上,调节每个3*3的卷积作用的特征图的通道数,即调节3*3的卷积的分支的数量与1*1的卷积的输出通道数的比例,可以实现一系列处于传统Inception模块和“极致的Inception”模块之间的状态。

Depthwise Separable Convolution 与 极致的 Inception 区别:

极致的 Inception:

  • 第一步:普通 1×1 卷积。
  • 第二步:对 1×1 卷积结果的每个 channel,分别进行 3×3 卷积操作,并将结果 concat。

Depthwise Separable Convolution:

  • 第一步:Depthwise 卷积,对输入的每个channel,分别进行 3×3卷积操作,并将结果 concat。
  • 第二步:Pointwise 卷积,对 Depthwise 卷积中的 concat 结果,进行 1×1 卷积操作。

两种操作的循序不一致:Inception 先进行 1×11×11×1 卷积,再进行 3×33×33×3 卷积;Depthwise Separable Convolution 先进行 3×33×33×3 卷积,再进行 1×11×11×1 卷积。(作者认为这个差异并没有大的影响)

Xception 网络架构

Xception 的结构基于 ResNet,但是将其中的卷积层换成了Separable Convolution(极致的 Inception模块)。
在这里插入图片描述

  • Xception 在 ImageNet 上,比 Inception-v3 的准确率稍高, 同时参数量有所下降,

  • 在 Xception 中加入的类似 ResNet 的残差连接机制也显著加快了Xception的收敛过程并获得了显著更高的准确率。(每个小块之间用的是残差连接)

  • 潜在的问题是,虽然 Depthwise Separable Convolution 可以带来准确率的提升或是理论计算量的大幅下降,但由于其计算过程较为零散,现有的卷积神经网络实现中它的效率都不够高。

8 shuffle Net V1

该模块参考该链接,侵删

  • ShuffleNet是Face++提出的一种轻量化网络结构,
  • 主要思路是使用Group convolution和Channel shuffle改进ResNet,可以看作是ResNet的压缩版本。

ShuffleNet的结构
在这里插入图片描述

  • (a)就是加入Depthwise的ResNet bottleneck结构,
  • 而(b)和©是加入Group convolution和Channel Shuffle的ShuffleNet的结构。
  • 相比原始加入Depthwise的ResNet缩小了很多的计算量。所以ShuffleNet相当于保留ResNet结构,同时又压低计算量的改进版。

为何要做Channel Shuffle操作:
ShuffleNet的本质是将卷积运算限制在每个Group内,这样模型的计算量取得了显著的下降。然而导致模型的信息流限制在各个Group内,组与组之间没有信息交换,这会影响模型的表示能力。因此,需要引入组间信息交换的机制,即Channel Shuffle操作。同时Channel Shuffle是可导的,可以实现end-to-end一次性训练网络。
具体过程见下图:
在这里插入图片描述
ShuffleNet有2个重要缺点:

  • Shuffle channel在实现的时候需要大量的指针跳转和Memory set,这本身就是极其耗时的;同时又特别依赖实现细节,导致实际运行速度不会那么理想。
  • Shuffle channel规则是人工设计出来的,不是网络自己学出来的。这不符合网络通过负反馈自动学习特征的基本原则,又陷入人工设计特征的老路(如sift/HOG等)

9 ShuffleNetV2

本模块参考此链接,侵删
部分参考此处

在同等复杂度下,ShuffleNetv2比ShuffleNet和MobileNetv2更准确。
MAC(memory access cost):内存访问消耗时间

作者在特定的平台下研究ShuffleNetv1和MobileNetv2的运行时间,并结合理论与实验得到了4条实用的指导原则:

  1. 同等通道大小最小化内存访问量。
    卷积层的输入和输出特征通道数相等时MAC较小,此时模型最快
  2. 过量使用组卷积会增加MAC
    分组过多会增加MAC。
  3. 网络碎片化会降低并行度
    结论是模型中的分支数量越少,模型速度越快
  4. 不能忽略元素级操作
    结论是element-wise操作所带来的时间消耗远比在FLOPs上的体现的数值要多,因此要尽可能减少element-wise操作。

上面4条指导准则总结如下:

  1. 1x1卷积进行平衡输入和输出的通道大小;
  2. .组卷积要谨慎使用,注意分组数;
  3. 避免网络的碎片化;
  4. 减少元素级运算。

网络结构

(a)和(b)是ShuffleNet v1的两种不同block结构,两者的差别在于后者对特征图尺寸做了缩小,这和ResNet中某个stage的两种block功能类似,同理(c)和(d)是ShuffleNet v2的两种不同block结构。

  • (a)和(c)的对比可以看出首先(c)在开始处增加了一个channel split操作,这个操作将输入特征的通道分成c-c’和c’,c’在文章中采用c/2,这主要是和前面第1点发现对应。
  • 然后(c)中取消了1*1卷积层中的group操作,这和前面第2点发现对应,同时前面的channel split其实已经算是变相的group操作了。
  • 其次,channel shuffle的操作移到了concat后面,和前面第3点发现对应,同时也是因为第一个1*1卷积层没有group操作,所以在其后面跟channel shuffle也没有太大必要。
  • 最后是将element-wise add操作替换成concat,这个和前面第4点发现对应
  • 多个(c)结构连接在一起的话,channel split、concat和channel shuffle是可以合并在一起的。
  • (b)和(d)的对比也是同理,只不过因为(d)的开始处没有channel split操作,所以最后concat后特征图通道数翻倍,可以结合后面Table5的具体网络结构来看。

结构参数图:
在这里插入图片描述

  • 值得注意的一点是,v2在全局pooling之前增加了个conv5卷积,这是与v1的一个区别
  • 从一定程度上说,ShuffleNetv2借鉴了DenseNet网络,把shortcut结构从Add换成了Concat,这实现了特征重用。
  • 但是不同于DenseNet,v2并不是密集地concat,而且concat之后有channel shuffle以混合特征,这或许是v2即快又好的一个重要原因。

10 SqueezeNet

参考自该链接,侵删

压缩策略

  1. 将 3*3 卷积替换成 1*1卷积:通过这一步,一个卷积操作的参数数量减少了9倍;
  2. 减少 3*3 卷积的通道数:一个 3*3 卷积的计算量是 3*3*M*N (其中 M, N 分别是输入Feature Map和输出Feature Map的通道数),作者任务这样一个计算量过于庞大,因此希望将 M, N减小以减少参数数量;
  3. 将降采样后置:作者认为较大的Feature Map含有更多的信息,因此将降采样往分类层移动。注意这样的操作虽然会提升网络的精度,但是它有一个非常严重的缺点:即会增加网络的计算量。

Fire模块

  • SqueezeNet是由若干个Fire模块结合卷积网络中卷积层,降采样层,全连接等层组成的。
  • 一个Fire模块由Squeeze部分和Expand部分组成(注意区分和Momenta的SENet[4]的区别)。
  • Squeeze部分是一组连续的 1*1 卷积组成,Expand部分则是由一组连续的 1*1 卷积和一组连续的 3*3 卷积cancatnate组成
  • 在Fire模块中,Squeeze部分 1*1卷积的通道数记做 s1x1,Expand部分 1*1 卷积和 3*3卷积的通道数分别记做e1x1 和 e3x3
  • 在Fire模块中,作者建议s1x1<e1x1 + e3x3,这么做相当于在两个3*3 卷积的中间加入了瓶颈层
  • 作者的实验中的一个策略是 s1x1=e1x1/4 = e3x3/4
    在这里插入图片描述
    在这里插入图片描述

SqueezeNet的网络架构

左侧是不加short-cut的SqueezeNet,中间是加了short-cut的,右侧是short-cut跨有不同Feature Map个数的卷积的。

还有以下几点:

  • 激活函数默认都使用ReLU;
  • fire9之后接了一个rate为0.5的dropout;
  • 使用same卷积。

在这里插入图片描述
详细参数
在这里插入图片描述

总结

SqueezeNet的压缩策略是依靠将3*3 卷积替换成1*1 卷积来达到的。

这里我们着重说一下SqueezeNet的缺点:

  • SqueezeNet的侧重的应用方向是嵌入式环境,目前嵌入式环境主要问题是实时性。SqueezeNet的通过更深的深度置换更少的参数数量虽然能减少网络的参数,但是其丧失了网络的并行能力,测试时间反而会更长,这与目前的主要挑战是背道而驰的;
  • 论文的题目非常标题党,虽然纸面上是减少了50倍的参数,但是问题的主要症结在于AlexNet本身全连接节点过于庞大,50倍参数的减少和SqueezeNet的设计并没有关系,考虑去掉全连接之后3倍参数的减少更为合适。
  • SqueezeNet得到的模型是5MB左右,0.5MB的模型还要得益于Deep Compression。虽然Deep Compression也是这个团队的文章,但是将0.5这个数列在文章的题目中显然不是很合适。

11 GhostNet

直接转,侵删
这个描述更详细,可以转,侵删

本篇论文是发表于CVPR2020的一篇轻量级网络的论文,作者是华为诺亚方舟实验室,文章的总体思路比较清晰,为了减少网络计算量,作者将传统的卷积分成两步进行,首先利用较少的计算量通过传统的卷积生成channel较小的特征图,然后在此特征图的基础上,通过cheap operation(depthwise conv)再进一步利用较少的计算量,生成新的特征图,最后将两组特征图拼接到一起,得到最终的output,最终实验效果还不错,相同计算量的情况下比MobileNet- V3的效果还要更好一些。

  • 虽然说mobileNet或者是shuffleNet提出了使用depthwise或者是shuffle等操作,但是引入的1x1卷积依然会产生一定的计算量。
  • 但是作者在分析输出的特征图的时候发现,其实有些特征图是比较相似的
  • 是不是每张图都需要用这么大的计算量去得到?是否可以通过cheap transformation得到这些相似的特征图?
  • Ghost就是说相似的特征图,犹如另一个的幽灵,可以通过简单的线性变换得到
  • 相比于传统的卷积,GhostNet分两步走,首先GhostNet采用正常的卷积计算,得到channel较少的特征图,然后利用cheap operation得到更多的特征图,然后将不同的特征图concat到一起,组合成新的output.
  • Difference from existing methods
    • 在MobileNet等网络中,基本都会使用1x1的卷积,而在GhostNet中,可以使用任何尺寸的卷积。
    • 在MobileNet中,使用了pointwise+depthwise,但是在GhostNet中,可以使用正常的卷积。
    • Ghost使用了更多的线性变换。
  • Ghost bottleneck结构图,很类似resnet结构,不同的是channel是先升维再降维。
    在这里插入图片描述
    下面是GhostNet的网络结构图,可以看到channel控制的比较小,并且引入了SE结构。
    在这里插入图片描述
  • Ghost模块具有两个超参数,也就是,s用于生成 m=n/s个内在特征图,以及用于计算幻影特征图的线性运算的d*d(即深度卷积核的大小)。作者首先采用控制变量法,测试不同的s以及d的效果。经过测试发现在s=2,d=3的情况下模型表现较好

12 ESPNet

参考该链接,侵删
侵删

  • 2018年,这四个人和Anat Caspi一同发布了ESPNet,发表在了ECCV2018上。该网络的主要优点是在参数比目前的主流轻量级网络(如MobileNet, ShuffleNet)小很多的情况下,性能上却相差无几。
  • 2019年,他们又发布了ESPNet的升级版——ESPNetv2,并在CVPR上发表。该网络在ESPNet的基础上继续被优化,参数相比前一代少了约四倍,而性能却只下降了很少的一点,这使得 ESPNetv2在轻型网络中占有一席之地。

关于卷积加速

  • 卷积分解:将卷积运算分解为多个步骤以降低计算复杂度,比如Inception,ResNext,Xception,MobileNets等都使用了这样的技巧来减轻计算量。
  • 网络压缩:主要通过散列、修剪、矢量量化和收缩等方法,以减小预训练的模型大小。
  • 低位网络:通过量化模型的权重来减小模型大小和复杂度。
  • 稀疏CNNs:为了消除CNN的冗余,借助稀疏分解和稀疏结构学习等思路压缩模型大小。

膨胀卷积

  • 为了能够在不增加参数数量的情况下提高卷积核的感受野,便诞生了膨胀卷积(Dilated Convolution)
  • 简单而言,在标准卷积核中的每个参数中间插入一定数量的0元素便得到了卷积膨胀的卷积核

ESPNetv1

侵删

  • ESP Module基于卷积分解原理,将标准卷积分解为两个步骤:
  1. point-wise convolutions 逐点卷积
  2. spatial pyramid of dilated convolutions 空间金字塔型膨胀卷积
  • 基于卷积分解理论,ESP模块首先通过1x1 conv对输入特征进行降维,然后使用多个不同膨胀率的卷积核对低维特征特征进行卷积,因为各个膨胀卷积核的感受野不同,而且从小到大都有,有点类似空间金字塔,所以作者将其命名为ESP模块。
    在这里插入图片描述
  • 对于一个n * n * M @ N的标准卷积核,ESP模块将其分解为以下三步:
  • Step-1: Reduce(Point-wise convolutions):d个1* 1* M的卷积核,将M维的输入feature map降至d维
  • Step-2: Split & Transform(Spatial pyramid of dilated convolutions):使用K个不同膨胀率的卷积核对上一步输出的feature map并行进行卷积,将会得到K个相同大小的feature map
  • Step-3*: HFF(Hierarchical feature fusion,图中未体现):分层特征融合,即将上一步得到的K个相同大小的feature map按照一定规则进行拼接,得到最终的输出feature

在这里插入图片描述

  • 因为使用了大感受野的膨胀卷积,导致了gridding artifacts现象,如下图所示。本文提出了使用HFF方法来解决该问题,具体做法就是从最小的膨胀卷积核输出的那张feature map开始,逐级叠加。这样的做法并没有引入任何新的参数,同时计算量上也没有增加太多,但却有效地改善了网格效应。

  • 此外,还将输入的feature map也通过“逐元素求和”的方式加到了最终输出的feature map上,以改善信息传递

  • 与其他CNN模块的关系

    1. MobileNet Module
      在这里插入图片描述
      • 如图所示,MobileNet模块 = Depth-wise Conv + Point-wise Conv
      • 与ESP模块相比,参数量少,内存占用大,感受野小
      • 对ESP模块而言,当K=N时,与MobileNet模块很相似,只是两步的顺序颠倒一下
      • 与MobileNet模块相比,ESP模块的优势主要是感受野大
    2. ShuffleNet Module
      在这里插入图片描述
      • 基于reduce-transform-expand策略设计
      • ResNet中bottleneck模块的改进:
        1x1 conv => 1x1 grouped conv
        3x3 conv => 3x3 depth-wise conv
      • 与ESP模块相比,虽然ShuffleNet模块的参数量少,但会占用更大的内存同时无法扩大感受野
    3. Inception Module
      在这里插入图片描述
      • 基于split-reduce-transform-merge策略设计
      • 每个支路上的往往具有特定的通道数、大小等
      • ESP模块在参数量、内存占用、感受野三个方面都优于Inception Module
    4. ResNext Module

在这里插入图片描述

  • 是ResNet中bottleneck模块的并行版本
  • 基于split-reduce-transform-expand-merge策略设计
  • ESP模块借鉴了其分支求和的思想
  • 但ESP模块在参数量、内存占用、感受野三个方面都优于ResNext Module

网络结构:
在这里插入图片描述
文中给出了4种网络结构,其中前3种网络的输出mask为输入尺寸的1/8。为了适配不同的应用场景,引入了超参数 α l \alpha_l αl,其实就是ESP模块的重复堆叠个数。因为在网络前两个stage(l=0,1),feature map较大,占用内存和计算开销较多,所以没有堆叠,主要都是在后面几级堆ESP模块。

四种网络结构(从简到繁)简单解释如下:

  • ESPNet-A:基本网络。学习不同级别的特征,最后通过1x1 conv得到mask;
  • ESPNet-B:在A的基础上添加了跨步连接,改善了信息流;
  • ESPNet-C:在B的基础上继续添加跨步连接,这次连接的是下采样后的输入图像;
  • ESPNet:最终形态。在ESPNet-C的基础上,添加了一个轻量级的解码器,从而得到与输入图像相同分辨率的mask。

ESPNetV2

主要贡献如下:

  • 通用的轻量化网络结构,能够支持视觉数据以及序列化数据,即能支持视觉任务和自然语言处理任务。
  • 在ESPNet基础上,加入深度可分离空洞卷积进行拓展,相对于ESPNet拥有更好的精度以及更少的参数。
  • 从实验来看,ESPNetv2在多个视觉任务上有较好的准确率和较低的参数量,任务包括图像分类、语义分割、目标检测。
  • 设计了cyclic learning rate scheduler,比一般的固定学习率的scheduler要好。

EESP unit:
在这里插入图片描述
论文基于深度可分离空洞卷积以及分组point-wise卷积改进ESP模块,提出了EESP(Extremely Efficient Spatial Pyramid)模块。原始的ESP模块结构如图1a所示,论文首先将point-wise卷积替换为分组point-wise卷积,然后将计算量较大的空洞卷积替换为深度可分离空洞卷积,最后依然使用HFF来消除网格纹路,结构如图1b所示,能够降低计算复杂度,K为空洞卷积金字塔层数。考虑到单独计算K个point-wise卷积等同于单个分组数为的point-wise分组卷积,而分组卷积的在实现上更高效,于是改进为图1c的最终结构。

下采样版本:
  为了更高效地学习多尺度特征,论文提出下采样版本的EESP模块(Strided EESP with shortcut connection to an input image)
在这里插入图片描述
主要进行以下改进:

  • 修改深度可分离空洞卷积为stride=2的版本。
  • 为模块原本的shortcut添加平均池化操作。
  • 将element-wise相加操作替换为concate操作,这样能增加输出的特征维度。
  • 为防止随着下采样产生的信息丢失,添加一条连接输入图像的shortcut,该路径使用多个池化操作来使其空间大小与模块输出的特征图一致,然后使用两个卷积来提取特征并调整维度,最后进行element-wise相加。

网络结构:
在这里插入图片描述
ESPNetv2的网络结构如表2所示,ESSP模块的每个卷积后面都接BN层以及PReLU,模块最后的分组卷积的PReLU在element-wise相加后进行,g=K=4,其它与ESPNet类似。

13 深入剖析MobileNet和它的变种

文章链接

普通的卷积:
在这里插入图片描述
假设 H x W 为输出feature map的空间大小,N为输入通道数,K x K为卷积核的大小,M为输出通道数,则标准卷积的计算量为 HWNK²M 。

在这里插入图片描述
如果看总结能记住就不用转了,如果记不住,链接讲的很清楚

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值