扩展卷积详解 - 组卷积, 深度可分离卷积, 空洞卷积

在标准卷积的基础上介绍组卷积, 深度可分离卷积, 空洞卷积.

零. Standard Convolution - 标准卷积

标准卷积运算是这样地:

在这里插入图片描述

对于输入特征为 C ∗ H ∗ W C*H*W CHW, 卷积核大小为 K ∗ K K*K KK, 共 N 个卷积核. 则:

  • 对于输出特征图上的每一个点, 都是在输入特征图的所有通道上执行 add 操作得到.
  • 输出特征图的通道数为 N N N.
  • 每个卷积核的尺寸为 C ∗ K ∗ K C*K*K CKK.
  • N 个卷积核的总参数量为 N ∗ C ∗ K ∗ K N*C*K*K NCKK.

输入特征图与输出特征图的连接方式如下图所示:

在这里插入图片描述

一. Group Convolution - 组卷积

最早出现分组卷积的是 AlexNet. 分组卷积, 顾名思义就是将原始卷积中的输入特征按照通道进行分组, 每个组卷积只对同组通道内的特征图执行卷积运算.

在这里插入图片描述

给定, 输入特征图为: C × H × W C×H×W C×H×W, 卷积核大小为 K × K K×K K×K, 卷积核共有 N 个. 我们按照通道数分为 g 个组, 一般来讲, g 应该可以被 N 整除. 则:

  • 每个组的特征通道数量为 C g \frac{C}{g} gC.
  • 每个组的卷积核尺寸为 N / g × C / g × K × K N/g×C/g×K×K N/g×C/g×K×K.
  • 每个组得到的输出特征图为 N / g × H × W N/g × H × W N/g×H×W.
  • 拼接 g 个组的输出特征图, 得到和标准卷积尺度一样的输出特征图, 即 N × H × W N×H×W N×H×W.

特点:

1. 分组卷积可以减小卷积参数的个数, 总参数量为 g ∗ ( N × C × K × K g 2 ) = N × C × K × K g g*(\frac{N×C×K×K}{g^2}) = \frac{N×C×K×K}{g} g(g2N×C×K×K)=gN×C×K×K.

2. 分组卷积可以看成是 structured sparse, 对上图所示的, N / g × C / g × K × K N/g×C/g×K×K N/g×C/g×K×K 卷积核可以看作 N / g × ( C − C / g ) × K × K N/g×(C-C/g)×K×K N/g×(CC/g)×K×K 这部分卷积核的值为 0, 有时甚至可以在减少参数量的同时获得更好的效果 (起到类似正则化的作用) .

二. Depth Separable Convolution - 深度可分离卷积

深度可分离卷积是在 mobileNet 和 Xception 中都有涉及的一个操作.

在分组卷积中, 我们考虑一种特殊情况, 如果输入特征图的尺寸等于输出特征图的尺寸 (H × W 不变) , 如果我们把输入特征图的通道数 C1 分成 C1个组, 也就是每个组都只有 1 个通道, 那么我们用 1 × 1 × K × K 的卷积核来对每组进行卷积, 同时拼接 C1 个组的结果, 得到输出特征图的通道仍为 C1 × H × W, 这其实就是深度可分离卷积.

对于可分离卷积, 我认为其可以分为两种形式, 一种是空间可分离卷积, 顾名思义, 空间可分离就是将一个大的卷积核变成两个小的卷积核, 也就是在 inception 系列中出现的把 3 × 3卷积分成对称的 1×3 与 3×1 的操作, 另一种就是深度可分离卷积, 深度可分离卷积也可分为两部分, 深度卷积+逐点卷积, 深度卷积就是在每个通道上执行卷积, 但是不整合所有对应通道上的结果 (没有通道级别对应的 add 操作) ; 逐点卷积其实就是 1x1 3D 卷积, 对所有通道进行融合.

在这里插入图片描述

图 (a) 代表标准卷积. 假设输入特征图尺寸为 M ∗ H ∗ W M*H*W MHW, 卷积核尺寸为 M ∗ D k ∗ D k M*D_{k}*D_{k} MDkDk , 共 N N N 个卷积核, 输出特征图尺寸为 N ∗ H ∗ W N*H*W NHW, 标准卷积层的参数量为: N ∗ M ∗ D k ∗ D k N*M*D_{k}*D_{k} NMDkDk.

图 (b) 就是深度卷积, 把输入特征图上的每一个通道单独执行卷积操作, 也就是用 M M M 1 ∗ D k ∗ D k 1*D_{k}*D_{k} 1DkDk 的卷积核对输入特征图上的每一个通道执行卷积操作, 最终得到的输出特征图的尺寸仍然为 M ∗ H ∗ W M*H*W MHW, 参数数量为 M ∗ D k ∗ D k M*D_{k}*D_{k} MDkDk.

图 © 为逐点卷积, 也就是常规的 1 × 1 1×1 1×1 卷积操作, 输入特征图为 M ∗ H ∗ W M*H*W MHW, 卷积核的尺寸为 M ∗ 1 ∗ 1 M*1*1 M11 , 共 N N N 个卷积核, 输出特征图尺寸为 N ∗ H ∗ W N*H*W NHW. 参数数量为 N ∗ M N*M NM.

那么图 (b) 与图 © 的操作结合之后就是深度可分离卷积. 深度可分离卷积的作用就是降参, 我们来对比一下标准卷积与深度可分离卷积的参数个数:

( M ∗ D k ∗ D k + N ∗ M ) N ∗ M ∗ D k ∗ D k = 1 N + 1 D k 2 \frac{ (M*D_{k}*D_{k}+N*M)}{N*M*D_{k}*D_{k}}=\frac{1}{N}+\frac{1}{D_{k}^{2}} NMDkDk(MDkDk+NM)=N1+Dk21

如果我们用 3 ∗ 3 3*3 33 的卷积, 那么相当于我们大约可以减少 10 倍的参数计算量.

深度可分离卷积与标准卷积相比, MobileNet1 在 ImageNet 上降低了约 1% 的精度.

三. Dilated Convoluton - 扩张卷积

扩张卷积又名空洞卷积 (atrous convolutions), 通过向卷积层引入了一个称为 "扩张率 (dilation rate) " 的参数, 该参数定义了卷积核处理数据时各值的间距.

直观地感受一下空洞卷积的计算方式:

在这里插入图片描述

其公式表示为:

y [ i ] = ∑ k = 0 K − 1 x [ i + r ∗ k ] ⋅ w [ k ] y[i] = \sum_{k = 0}^{K-1}x[i+r*k] \cdot w[k] y[i]=k=0K1x[i+rk]w[k]

其中,

  • y y y 表示输出特征图.
  • w w w 表示卷积核的权重值.
  • K K K 表示卷积核的大小.
  • x x x 表示输入特征图.

换句话说, 与标准卷积相比, 扩张卷积多了一个超参数 (扩张率), 其指定了 kernel 各点之间的间隔的点数. 因此, 标准卷积的扩张率为 1.

四. 参考

[1]. 理解分组卷积与深度可分离卷积
[2]. Group Convolution组卷积
[3]. 如何理解空洞卷积 (dilated convolution)?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值