轻量级网络ESPNet系列 空洞卷积简介

空洞卷积(Dilated/Atrous Convolution)

相比原来的正常convolution,dilated convolution 多了一个 hyper-parameter 称之为 dilation rate 指的是kernel的间隔数量:

  • a是普通的卷积过程(dilation rate = 1),卷积后的感受野为3
  • b是dilation rate = 2的空洞卷积,卷积后的感受野为5
  • c是dilation rate = 3的空洞卷积,卷积后的感受野为7

卷积核膨胀是将卷积核扩张到膨胀尺度约束的尺度中,并将原卷积核没有占用的区域填充零:

空洞卷积的作用:

  • 扩大感受野:为了增加感受野且降低计算量,总要进行降采样或s2/conv,这样虽然可以增加感受野,但空间分辨率降低了。为了能不丢失分辨率,且仍然扩大感受野,可以使用空洞卷积。这在检测,分割任务中十分有用。一方面感受野大了可以检测分割大目标,另一方面分辨率高了可以精确定位目标。
  • 捕获多尺度上下文信息:空洞卷积有一个参数dilation rate可以设置,具体含义就是在卷积核中填充dilation rate个0,因此,当设置不同dilation rate时,感受野就会不一样,也即获取了多尺度信息。

 空洞卷积可以增大感受野,但是可以不改变图像输出特征图的尺寸(分辨率,resolution)

从一维去分析容易理解:从(b)和(c)可以看出,有无空洞卷积,并不影响输出特征图的尺寸,也就是说输出特征图的尺和空洞数无关,因此可以利用空洞卷积增大感受野,而输出特征图的尺寸可以保持不变,由于保持特征图尺寸不变,所以导致了计算过程的计算量比较大。

黑色为填充的像素

保持特征图不变,如何利用多尺度信息

我们知道,神经元感受野的值越大表示其能接触到的原始图像范围就越大,也意味着它可能蕴含更为全局,语义层次更高的特征;相反,值越小则表示其所包含的特征越趋向局部和细节。因此感受野的值可以用来大致判断每一层的抽象层次;

1个 7 x 7 的卷积层的正则等效于 3 个 3 x 3 的卷积层的叠加。而这样的设计可以大幅度的减少参数,有正则化的效果,参数少了就没那么容易发生过拟合。这也是现在绝大部分基于卷积的深层网络都在用小卷积核的原因,常常使用3 x 3的卷积核;

一般每一层的卷积核都是用3*3大小的,而每一层只要设置不同dilation rate时,感受野就会不一样,也即获取了多尺度信息,当然这样操作并不影响特征图的尺寸,这样一来,又避免下采样那样造成信息损失,同时也利用到多尺度信息。

空洞卷积感受野计算:和标准卷积计算一致

假设空洞卷积的卷积核大小为k,空洞数为r,空洞卷积实际卷积核大小:K=k+(k-1)(r-1);

当前层的感受野计算公式:

RF_{i+1}=RF_{i}+S_{i}*(K-1)

其中,RF_{i+1}表示当前层的感受野,RF_{i}表示上一层的感受野,K表示卷积核的大小,S_{i}表示之前所有层的步长的乘积(不包括本层)

S_{i}= \prod_{i=1}^{i}Stride_{i}

同样,当前层的步长并不影响当前层的感受野,感受野和填补(padding)没有关系。

空洞卷积存在的问题:

  1. The Gridding Effect(网格效应/棋盘问题)

alt

  上图可以看出,采样的kernel 并不连续,也就是并不是所有的 pixel 都用来计算了:

  • 局部信息丢失:由于空洞卷积的计算方式类似于棋盘格式,某一层得到的卷积结果,来自上一层的独立的集合,没有相互依赖,因此该层的卷积结果之间没有相关性,即局部信息丢失。

2. Long-ranged information might be not relevant.

采用大 dilation rate 的信息或许只对一些大物体分割有效果,而对小物体来说可能则有弊无利了:

  • 远距离获取的信息没有相关性:由于空洞卷积稀疏的采样输入信号,使得远距离卷积得到的信息之间没有相关性,影响分类结果。

解决方法:

Hybrid Dilated Convolution (HDC)

具体地址:空洞卷积(dilated convolution)理解

Atrous Spatial Pyramid Pooling (ASPP)

具体地址:总结-空洞卷积(Dilated/Atrous Convolution)

这篇文章总结得很好,以此做个记录

SPNet v1

论文地址:ECCV 2018

ESPNet: Efficient Spatial Pyramid of Dilated Convolutions for Semantic Segmentation

ESPNet被设计为在资源限制的高分辨率图片的快速语义分割,ESP模块比其它卷积分解方法(mobilenet/shufflenet,可参考我之前的博文)更高效,ESPNet能在GPU/笔记本/终端设备上达到112FPS/21FPS/9FPS。

亮点:

  • ESP模块:该模块包含point-wise卷积空洞卷积金字塔,每层具有不同的dilation rate,在参数量不增加的情况下,能够融合多尺度特征,相比于深度可分离卷积,深度可分离空洞卷积金字塔性价比更高。

1. ESP module(Efficient Spatial Pyramid)

ESP模块是ESPNet的核心组成部分,其基于"reduce-split-transform-merge"的策略设计,主要由point-wise conv和基于空间金字塔的膨胀卷积两部分组成。基于卷积分解理论,ESP模块首先通过1x1 point-wise conv对输入特征进行降维,然后使用多个不同膨胀率的卷积核对低维特征特征进行空洞卷积,重采样低维特征,因为各个膨胀卷积核的感受野不同,从小到大都有,类似于空间金字塔,所以作者将其命名为ESP模块。

步骤: 

对于一个的标准卷积核,ESP模块将其分解为以下三步:

Step1: 降维Reduce(Point-wise convolutions):d个1x1xM的卷积核,将M维的输入feature map降至d维;
Step2: 卷积Split & Transform(Spatial pyramid of dilated convolutions):使用K个不同膨胀率的卷积核对上一步输出的feature map并行进行卷积操作,将得到K个相同大小的feature map;
Step3: 拼接HFF(Hierarchical feature fusion):分层特征融合,即将上一步得到的个相同大小的feature map按照一定规则进行拼接,得到最终的输出feature map。

Width divider K:

对于输入输出维度为M和N,卷积核大小为n×n的标准卷积,需要学习的参数量为n^{2}*M*N,有效感受域为n^{2}。超参数K用来调节ESP模块的计算复杂度,首先使用point-wise卷积将输入维度从M降为\frac{N}{K}(reduce),然后将低维特征分别使用上述的空洞卷积金字塔进行处理(split and transform),最后将K组空洞卷积的输出合并(merge)。ESP模块包含\frac{M*N}{k}+\frac{(nN)^{2}}{k}参数,Reduce部分:M\times\frac{N}{K},Split部分:K\times n^2 \times \left ( \frac{N}{K} \right )^2;有效感受域为\left [ (n-1)2^{K-1}+1 \right ]^2,在参数和感受域方面都有一定的提升。

例子:

假设一个标准卷积核的大小为(w*h*M*N),即设输入的feature map大小为128*128*M,输出的feature map大小为128*128*N。ESP模块的具体计算如下:

① 经过Reduce以后,变为128*128*d

② 经过Split后,可以得到K张128*128*d的feature map

③ 经过HFF融合以后,变为128*128*(d*K),注意d=N/K,所以输出大小为128*128*N

比如:当n=3,N=M=128,K=4时,一个标准卷积核参数量是一个ESP模块参数量的3.6倍,但ESP模块的感受野可以达到17*17。
HFF for de-gridding:
因为使用了大感受野的膨胀卷积,导致了gridding artifacts现象,如下图所示。使用HFF方法来解决,具体做法就是从最小的膨胀卷积核输出的那张feature map开始,逐级叠加。这样的做法并没有引入任何新的参数,同时计算量上也没有增加太多,但却有效地改善了网格效应。

尽管空洞卷积金字塔带来更大的感受域,但直接concate输出却会带来奇怪网格纹路,为解决这个问题,在concate之前先将输出进行层级相加:空洞核最小(n1xn1)的特征图直接输出,空洞核(n2xn2)特征图作为残差与之前输出求和作为输出,后续特征图类似此操作得到不同空洞率的融合特征,然后拼接起来,之后与原输入构成残差,相对于添加额外的卷积来进行后处理,HFF能够有效地解决网格纹路而不带来过多的计算量。另外,为了保证网络的梯度传递,在ESP模块添加了一条从输入到输出的shortcut连接:将输入的feature map也通过“逐元素求和”的方式加到了最终输出的feature map上,以改善信息传递。

2. ESP与其他CNN模块的关系

MobileNet模块 = 3*3 Depth wise Conv +1*1 Point wise Conv;与ESP模块相比,参数量少,内存占用大,感受野小;
ShuffleNet模块 = 1x1 grouped conv +  3x3 depth-wise conv;与ESP模块相比,虽然ShuffleNet模块的参数量少,但会占用更大的内存同时无法扩大感受野 ;

Inception模块基于split-reduce-transform-merge策略设计、每个支路上的往往具有特定的通道数、大小等、ESP模块在参数量、内存占用、感受野三个方面都优于Inception Module;

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

ASP模块基于split-transform-merge策略设计、通过在不同的分支上使用不同大小的膨胀卷积来捕捉不同大小的感受野、由于其感受野较大,在分割任务上表现出色、缺点是内存占用较大,且参数量较多;

ESP模块在参数量/内存/感受域方面都有很不错的数值。

 3. ESPNet模型结构

为了适配不同的应用场景,引入了超参数,其实就是ESP模块的重复堆叠个数。因为在网络前两个stage,feature map较大,占用内存和计算开销较多,所以没有堆叠,主要都是在后面几级堆ESP模块。

四种网络结构如下:

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

参考:

晓飞的算法工程笔记

论文学习笔记(四)ESPNet: Efficient Spatial Pyramid of Dilated Convolutions for Semantic Segmentation 

 

SPNet v2

论文地址:CVPR  2019

《ESPNetv2: A Light-weight, Power Efficient, and General Purpose Convolutional Neural Network》

该网络在ESPNet的基础上继续被优化,参数相比前一代少了约四倍,而性能却只下降了很少的一点。

亮点:

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

1. 常见的轻量化设计方法

目前主要有三种减少网络参数的方法:基于网络压缩的方法,基于低位表示的方法,分解卷积操作。本文介绍的ESPNetv2正是使用第三种方法来减轻网络的。 

网络压缩: 主要通过散列、修剪、矢量量化和收缩等方法,以减小预训练的模型大小;这里主要强调的是对网络结构和通道的剪枝:CNN有相当数量的冗余权重,由于参数的稀疏性,在保证CNN精度的前提下,保留重要的权重(一般权重值越接近于0越不重要),去掉不重要的权重,简化网络模型复杂度。在CPU上无法实施,原因是数据查找和数据迁移操作占用较多资源。
低位网络: 通过量化模型的权重来减小模型大小和复杂度。使用较低位表示预训练模型中的权重,来代替32位高精度的浮点数,减小后的模型通过使用逻辑门可以在CPU上实现快速计算。

神经网络架构搜索: 预定义一个词典,其中包含不同参数,例如:卷积层数、卷积单位、过滤器尺寸等;使用这个词典在网络空间中进行搜索;基于搜索的方法已经改进了MobileNetv2;

分解卷积操作:

传统卷积结构:2D卷积

在这里插入图片描述

 

深度可分离卷积结构

(1)deep-wise卷积:进行轻量级过滤,一个卷积核负责一个通道,一个通道只被一个卷积核卷积;

(2)point-wise卷积:通过学习输入通道的线性组合来沿着通道扩展特征图,卷积核的尺寸为 1×1×M,M为上一层deep-wise卷积的通道数。所以这里的卷积运算会将上一步deep-wise卷积的map在深度方向上进行加权组合,生成新的Feature map。有几个卷积核就有几个输出Feature map。

alt

例子:

第一步:在 2D 卷积中分别使用 3 个卷积核,每个过滤器的大小为 3 x 3 x 1,而不使用大小为 3 x 3 x 3 的单个过滤器。每个卷积核仅对输入层的 1 个通道做卷积,这样的卷积每次都得出大小为 5 x 5 x 1 的映射,之后再将这些映射堆叠在一起创建一个 5 x 5 x 3 的图像,最终得出一个大小为 5 x 5 x 3 的输出图像。
第二步是扩大深度,我们用大小为 1x1x3 的卷积核做 1x1 卷积。每个 1x1x3 卷积核对 5 x 5 x 3 输入图像做卷积后都得出一个大小为 5 x 5 x1 的映射。这样的话,做 128 次 1x1 卷积后,就可以得出一个大小为 5 x 5 x 128 的层。深度可分离卷积完成这两步后,同样可以将一个 7 x 7 x 3 的输入层转换为 5 x 5 x 128 的输出层。

分组卷积结构: 将输入通道与卷积核分组,每组单独卷积;

假设上一层的输出feature map有N个,即通道数channel=N,假设分组卷积的分组数目为M。那么卷积层的操作为:先将channel分成M份。每一个group对应N/M个channel,与之独立连接。然后各个group卷积完成后将输出叠在一起(concatenate),作为这一层的输出channel。

alt

空洞深度可分离卷积结构Depth-wise dilated separable convolution(DDConv): 深度可分离卷积+空洞卷积;
空洞卷积:为了能够在不增加参数数量的情况下提高卷积核的感受野;在标准卷积核中的每个参数中间插入一定数量的0元素便得到了空洞膨胀的卷积核;膨胀率(即相邻元素之间的插0个数)为r。

 计算量与感受野: 

channel shuffle: ShuffleNet的核心
channel split: 通道分割

2. EESP Unit

ESPNet只采用了空洞卷积,到达了提高卷积核感受野的作用。同时也没用应用分组卷积,所以相比较于MobileNet 和 ShuffleNet,ESPNet的优势就在于其感受野,但参数量方面的确不占优势,ESPNet v2基于此出现了。

改进:

使用逐点分组卷积(group point-wise convolution)替代了逐点卷积(point-wise convolutions),然后使用深度空洞可分离卷积(depth-wise dilated separable convolutions)替代了3 ∗ 3空洞卷积(dilated convolutions)以减少参数;

在深度空洞可分离卷积与逐点群卷积中间添加HFF,去除了空洞卷积带来的栅格重影。

Strided EESP:

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

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

3. 网络结构 

ESPNet v2网络使用EESP单元构建。在每个空间级别,ESPNet v2重复多次EESP单元以增加网络的深度。其中在每个卷积层之后使用batch normalizationPRelu,模块最后的分组卷积的PReLU在element-wise相加后进行;

batch normalization:均值为0方差为1的标准正态分布;

PRelu(Parametric Rectified Linear Unit):

alt

将224×224输入分类为ImageNet数据集中的1000个类: 

在图像分类的训练中,论文设计了循环学习率调度器,在每个周期t,学习率的计算为:

 ηmax和ηmin分别为最大和最小学习率,T为循环周期。 

实验结果:地址

参考:

轻量级深度学习网络——ESPNet v2 

如何评价论文:ESPNetv2? 

 

 

仅为学习记录,侵删! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖虎记录学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值