CompConv: A Compact Convolution Module for Efficient Feature Learning 论文学习

Abstract

CNN 在各视觉任务上取得显著成功,但计算开支巨大。为了解决这个问题,现有方法要么对训练好的模型做压缩,要么设计一个轻量级的网络结构训练。本文作者仔细研究了卷积算子,降低计算开支。提出了一个简洁的卷积模块,叫做 CompConv,有助于高效的特征学习。基于分治的思想,CompConv 能省去大量的计算开支和参数,来产生一定维度的特征图。此外,为了有效地继承输入信息,CompConv 往输出中加入输入特征是非常审慎的。CompConv 是即插即用的,能直接应用到现有的 CNN 结构中,替代标准卷积层。大量实验结果显示,CompConv 可以压缩基准 CNN 结构,而不会损失多少性能,领先于其它方法。

1. Introduction

CNN 由于其强大的特征学习能力,近些年在多项计算机视觉任务上取得突破进展。但是,它的成功依赖于大量的计算开支和存储资源,使这些模型无法在资源有限的设备上部署。

为了减轻计算资源的依赖,一个直接的办法就是压缩训练好的大模型。为此,现有方法要么使用一个小模型来从教师模型蒸馏知识,要么裁剪掉多余的模型连接,让它更精炼。除了训练大网络然后压缩之外,一个替代方案就是直接学习一个轻量级模型。但是,降低模型大小的副作用就是会牺牲部分能力。为了解决这个问题,我们需要精心设计网络结构,如 MobileNet 和 SqueezeNet。

在这里插入图片描述
图1. CompConv 模块的概念图。与标准卷积(a)相比,输入和输出通道是完全连接的,CompConv 采用了分治的策略来递归地输出结果。(b) 描述了 CompConv 的核心单元,卷积操作只贡献一半的输出通道(实线),另一半则从输入中借用(虚线)。

本文中,与之前的工作不同,作者仔细研究了卷积算子,提出压缩卷积模块可以节约计算负载。卷积模块学习从一个特征空间到另一个空间的变换。给定一个通道数为 C i n C_{in} Cin的输入特征图,卷积核将其映射到一个通道数为 C o u t C_{out} Cout的输出特征图。对于每个像素点,传统卷积需要 C i n × C o u t C_{in}\times C_{out} Cin×Cout个连接,如图1a所示。但是,论文[9,22,10]指出,CNN 的学习带有一定的过参数化和冗余性。因此作者提出了 CompConv 来简洁地实现该卷积。

CompConv 没有直接输出最终的特征图,而是利用一个核心单元完成,该单元沿着通道维度将输出等分为两份。一个是通过对输入特征做卷积映射得到,另一个则借用输入通道的一部分。这样,我们就可以最大程度、最小代价地传递学到的信息。图1b 展示了这个过程。更重要的是,我们的核心单元可以递归的方式完成,实现分治的思想。CompConv 能够节约大量的计算开支和参数,进行高效的特征提取。本文贡献如下:

  • 提出了一个简洁的卷积模块,叫做 CompConv。它利用分治的策略和精心设计的恒等映射,显著地降低了计算成本。
  • 通过研究模型能力是如何被递归计算的深度影响的,作者详细地分析了 CompConv。作者进一步提出了控制压缩率的机制。
  • 作者在多个 CNN 基准上使用 CompConv,替换传统卷积层。在检测和分类任务上,CompConv 能够大幅度节省计算成本,而不会牺牲模型的性能,超越现有的方法。

2. Related Work

模型压缩。目前的DNN都有数百万个权值,对内存和算力要求很高。一个直接的办法就是利用规则或学习的方式去除不重要的神经元连接,称为网络剪枝。最近工作表明精度对于训练和推理也不是必需的。于是人们普遍采用量化权重和激活值的方式来提升网络的效率。二值网络只使用 1-bit 神经元来表示模型权重和激活值,用布尔运算代替所有的 MAC 操作,节省计算量。此外,知识蒸馏是另一种方法,用一个训练好的大教师网络来指导小的学生网络的训练。这样学生网络能够取得与教师网络相近的性能,但是推理速度更快。

轻量模型设计。降低CNN计算量的另一种方法就是学习一个轻量级模型,但是模型大小和学习能力之间要平衡好。现有的方法都通过一个精心设计的网络结构,提高模型效率的同时保证其性能。SqueezeNet 采用了大量的 1 × 1 1\times 1 1×1卷积,降低参数量。MobileNet V1 和 V2 利用深度可分离卷积和倒转线性残差 bottleneck,提升计算效率。ShuffleNet V1 和 V2 提出了 channel shuffle 操作,增强不同通道分组之间的信息传递,对硬件比较友好。GhostNet 研究了特征图之间的特征冗余性,通过廉价的操作来学习 ghost 特征。神经结构搜索目的是自动地找到最高效率的网络结构。MobileNet V3 利用了 Auto-ML 技术,实现了更高的表现,而浮点计算数量更少。

3. Compact Convolution Module

作者提出了 CompConv 模块,通过分治的策略高效地从输入中学习特征输出。3.1节介绍其动机。3.2节讲述 CompConv 的核心单元。3.3节介绍完整的CompConv模块,以递归的方式执行核心单元。3.4节提供了一个自适应的策略。3.5节分析了其计算复杂度。

3.1 Motivation

卷积操作将特征从一个空间映射到另一个。在某种程度上,该过程和离散傅里叶变换(DFT)类似,将时域的信号序列映射到频域。快速傅里叶变换(FFT)常被用于加速 DFT。受到 FFT 启发,作者提出了 CompConv,通过分治策略对传统卷积进行压缩。

我们回顾一下 FFT 的形式。当 DFT 应用到一个时域内由 N N N个点组成的信号序列 x ( t ) x(t) x(t)时,FFT 会将之分为两个 N 2 \frac{N}{2} 2N 点子序列,记做 x ( e ) ( t ) x^{(e)}(t) x(e)(t) x ( o ) ( t ) x^{(o)}(t) x(o)(t),然后分别对它们做 DFT。这里 e e e o o o代表偶数和奇数。因此,频域的最终结果 X ( k ) X(k) X(k)可以从中间变换的结果 X ( e ) ( k ) X^{(e)}(k) X(e)(k) X ( o ) ( k ) X^{(o)}(k) X(o)(k) 得到:

X ( k ) = X ( e ) ( k ) + W N k X ( o ) ( k ) (1) X(k)=X^{(e)}(k) + W_N^k X^{(o)}(k) \tag{1} X(k)=X(e)(k)+WNkX(o)(k)(1)

其中 W N k = exp ⁡ ( − j 2 π N k ) W_N^k=\exp(-j \frac{2\pi}{N}k) WNk=exp(jN2πk) 是一个乘数。基于此,拆分后的 X ( e ) ( k ) X^{(e)}(k) X(e)(k) X ( o ) ( k ) X^{(o)}(k) X(o)(k)可被拆分为更小的组,以递归的方式进行。

3.2 CompConv 核心单元

受 FFT 启发,作者在卷积模块中引入了分治策略,提升其计算效率。作者将CNN输出的中间特征图按照通道维度当作序列。为了得到一个 C C C通道的特征图 X \mathbf{X} X,我们可以有两个特征图 X A \mathbf{X}_A XA X B \mathbf{X}_B XB,每个都有 C 2 \frac{C}{2} 2C个通道,然后将它们组合起来:

X = X A ⊕ W X B (2) \mathbf{X} = \mathbf{X}_A \oplus \mathbf{W} \mathbf{X}_B \tag{2} X=XAWXB(2)

其中 ⊕ \oplus 表示通道维度上 concat 操作, W \mathbf{W} W是一个可学习参数,用于变换特征图。

等式2包含了 CompConv 的核心思想。CompConv 的核心单元有两个部分,如图2所示。一部分(即 X A \mathbf{X}_A XA)直接来自于输入通道的恒等映射,只需很少的代价即可继承输入的信息。另一部分(即 X B \mathbf{X}_B XB)则通过对输入特征变换得到。

3.3 Recursive Computation

有了等式2,CompConv 可以递归的方式计算,将 X B \mathbf{X}_B XB进一步拆分为两半:

X B i = X A i + 1 ⊕ W i + 1 X B i + 1 , i = 0 , . . . , d − 1 (3) \mathbf{X}_{B_i} = \mathbf{X}_{A_{i+1}} \oplus \mathbf{W}_{i+1} \mathbf{X}_{B_{i+1}}, i=0,...,d-1 \tag{3} XBi=XAi+1Wi+1XBi+1,i=0,...,d1(3)

其中 d d d表示递归深度。

在这里插入图片描述
图2. CompConv 的框架,递归深度为3。使用分治的策略,CompConv 递归地计算输出结果。每一步中,为了得到特定通道数的特征图,CompConv 通过传统的卷积操作得到一半的通道(蓝色块),另一半(橘色块)来自于输入的恒等映射。同时,为了增加学习能力而保持低计算量,在第一个分离步骤时,作者用一个额外的卷积模块替代了恒等映射,从而产生尾部的通道(绿色块)。

Tailing channels. 作者对待第一次分离(即 { X A 0 , X B 0 } \{\mathbf{X}_{A_0}, \mathbf{X}_{B_0}\} {XA0,XB0})与后面的步骤是不一样的,如图2所示。 X A 0 \mathbf{X}_{A_0} XA0不是直接从输入那里借来的,而是从 X B 0 \mathbf{X}_{B_0} XB0变换得到。这么做出于两点原因。第一, X A 0 \mathbf{X}_{A_0} XA0在所有的恒等映射 { X A i } i = 0 d − 1 \{\mathbf{X}_{A_i}\}_{i=0}^{d-1} {XAi}i=0d1中通道数最多的。如果我们直接复制输入通道,就会在输入特征图和输出特征图之间存在过多的冗余,严重限制模块的学习能力。其次,除了从 X B 0 \mathbf{X}_{B_0} XB0变换而来,也有其它的方式得到 X A 0 \mathbf{X}_{A_0} XA0,如从整个输入特征图映射得到,或者像 X B 0 \mathbf{X}_{B_0} XB0一样构建另一个递归。但是显然,从 X B 0 \mathbf{X}_{B_0} XB0得到 X A 0 \mathbf{X}_{A_0} XA0是成本最低的。 X B 0 \mathbf{X}_{B_0} XB0的计算已经包含了足够多的输入特征信息,因此可以保证其学习能力。对于这个变换,作者使用了分组卷积,组数等于通道数。

Integrating Recursive Results. 为了更好地利用递归过程中的计算,作者不仅将两个最大的子特征(即 X A 0 \mathbf{X}_{A_0} XA0 X B 0 \mathbf{X}_{B_0} XB0)组合,也将所有中间结果进行了整合,从而得到最终输出,如图2所示。这样,我们可以充分利用计算操作,产生最终输出。此外,在将这些特征图 concat 之后,也有一个 shuffle 模块。

3.4 自适应分离策略

如3.3节所讲述的,CompConv 采用分治策略来进行高效的特征学习。因此对于计算效率和学习能力来说,如何递归地分离通道就很关键。作者用 C i n C_{in} Cin C o u t C_{out} Cout表示输入通道数和输出通道数。 C p r i m C_{prim} Cprim表示最小计算单元的通道数,如图2中 X B 2 \mathbf{X}_{B_2} XB2 d = 3 d=3 d=3。考虑到递归计算过程中,通道数的增长是指数级的,我们可以认为

C o u t = ∑ i = 1 d 2 i C p r i m (4) C_{out} = \sum_{i=1}^{d} 2^i C_{prim} \tag{4} Cout=i=1d2iCprim(4)

我们可以通过下面的式子很容易地解决等式4:

C p r i m = ⌈ C o u t 2 × ( 2 d − 1 ) ⌉ (5) C_{prim} = \lceil \frac{C_{out}}{2\times (2^d - 1)} \rceil \tag{5} Cprim=2×(2d1)Cout(5)

其中 ⌈ ⋅ ⌉ \lceil \cdot \rceil 表示向上取整。如果所有单元的通道和大于 C o u t C_{out} Cout,我们可以直接丢掉 X A 0 X_{A_0} XA0中的最后几层,确保输出特征的维度没问题。

Choice of Recursive Depth。从等式5可以看到, C p r i m C_{prim} Cprim高度依赖于递归深度 d d d,它是 CompConv 模块的一个超参。 d d d越大,压缩率就越高,当 d = 0 d=0 d=0时,就没有压缩。考虑到不同的网络结构和模型大小,作者提出了一个自适应策略来选取递归深度:

d = max ⁡ ( log ⁡ 2 ( max ⁡ ( 1 , C i n C 0 ) ) + 1 , 3 ) (6) d=\max (\log_2 (\max(1, \frac{C_{in}}{C_0})) + 1,3) \tag{6} d=max(log2(max(1,C0Cin))+1,3)(6)

C 0 C_0 C0是与模型具体相关的设计选择,取值范围是 { 32 , 64 , 128 , 256 , 512 , . . . } \{32,64,128,256,512,...\} {32,64,128,256,512,...},可以通过目标压缩率和模型大小来决定。 C 0 C_0 C0越大, d d d就越小,造成压缩率降低。 C 0 C_0 C0可用于平衡计算效率和学习能力的选择。递归深度 d d d与输入通道数 C i n C_{in} Cin有关,也就是说该策略会根据不同层而调节递归深度。为了确保最小单元有足够的计算能力,它会有足够数量的通道。 C p r i m C_{prim} Cprim不会太小。从等式5,我们可以看到当 d = 3 d=3 d=3时, C p r i m C_{prim} Cprim只占输出通道的 ∼ 8 % \sim 8\% 8%。因此, d d d的最小值设为了3。

Recommended Configuration。对于大多数 CNN 如 VGG 和 ResNet,作者推荐 C 0 = 128 C_0=128 C0=128。将该设定记做 CompConv128。后面如果没有特殊说明,都默认使用CompConv128。

3.5 Complexity Analysis

作者简要地讨论了 CompConv 如何节省计算资源的。对传统卷积和 CompConv 作者进行了复杂度分析。作者只关注每个模块的运算数量。

假设输入和输出特征图都是 H × W H\times W H×W,传统卷积和 CompConv 的计算复杂度分别是:

O C o n v = H × W × k 2 × C i n × C o u t \mathcal{O}_{Conv} = H\times W\times k^2 \times C_{in}\times C_{out} OConv=H×W×k2×Cin×Cout

O C o m p C o n v = H × W × k 2 × ( C i n × C p r i m + ∑ i = 1 d − 1 ( 2 i C p r i m ) 2 + 2 d − 1 C p r i m ) \mathcal{O}_{CompConv} = H\times W\times k^2 \times (C_{in}\times C_{prim} + \sum_{i=1}^{d-1} (2^i C_{prim})^2 + 2^{d-1}C_{prim}) OCompConv=H×W×k2×(Cin×Cprim+i=1d1(2iCprim)2+2d1Cprim)

其中 k k k是卷积核的大小。在 C i n = C o u t , d = 3 C_{in}=C_{out}, d=3 Cin=Cout,d=3的设定下,CompConv 只需要传统卷积的 ∼ 20 % \sim 20\% 20%的计算量就可产生通道数相同的输出特征。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值