Zhangzhe's Blog

The projection of my life.

0%

Learning Versatile Convolution Filters for Efficient Visual Recognition

URL

https://arxiv.org/pdf/2109.09310.pdf

TL;DR

  • 本文提出一种多功能的卷积核,可以有效提高算法效果,降低计算量与存储空间
  • 具体做法是:将 一个 主卷积核与 多个 二值 mask 点积生成 多个次级卷积核,用次级卷积核进行计算
  • 二值 mask 包括 H、W、C 方向,即每个次级卷积核的 H、W、C 都可能不同

Algorithm

思路

  • 神经网络轻量化(参数量与计算量)常用方法:
    • 模型压缩,主要包括:
      • 权重分解
      • 网络剪枝
      • 权重量化
      • 知识蒸馏
    • 网络结构轻量化,主要包括:
      • Xception
      • MobileNet series
      • ShuffleNet series
      • OctConv
      • MixConv
  • 本论文思路:
    • 一个 主卷积核与 多个 二值 mask 点积生成 多个次级卷积核
    • 二值 mask 作用在 H、W、C 上,所以每 个次级卷积核的感受野可能不同,关注的 channel 可能不同

网络设计

在空间方向设计多功能卷积

lv1.png

  • 空间方向就是指 H、W 方向

  • 图中用一个极端例子演示,实际上二值 mask 不是由人手工设计的,而是神经网络自动学习得到

  • 普通卷积计算过程:

    • input: xRH×W×cinput:\ x\in\mathbb{R}^{H\times W\times c}
    • filter: fRd×d×cfilter:\ f \in\mathbb{R}^{d\times d\times c}
    • output: y=f@x  ,   yRH×Woutput:\ y = f @ x\ \ ,\ \ \ y\in\mathbb{R}^{H'\times W'} (“@” means convolution operation)
  • 多功能卷积计算过程(在空间方向上):

    • filter: fRd×dfilter:\ f \in\mathbb{R}^{d\times d}
    • binery mask: Mi(p,q,c)={1, if p,qip,qd+1i0, otherwisebinery\ mask:\ M_i(p,q,c) = \begin{cases} 1,\ if\ p,q \ge i \mid p,q \le d+1-i\\ 0,\ otherwise \end{cases}
    • secondary filter: {f^1, f^2, ... ,f^s}  ,    s=d2 ,   f^i=Mifsecondary\ filter:\ \{\hat{f}_1,\ \hat{f}_2,\ ...\ ,\hat{f}_s\}\ \ ,\ \ \ \ s=\lceil \frac{d}{2} \rceil\ ,\ \ \ \hat{f}_i = M_i \circ f
    • output: y=[(Mif) @ x+b1,... ,(Msf) @ x+bs],output: \ y = [(M_i\circ f)\ @\ x + b_1, ...\ , (M_s\circ f)\ @\ x + b_s],

    $s.t.\ s = \lceil \frac{d}{2} \lceil,\ { M_i }s_{i=1}\in{0, 1}{d\times d\times c}\ $

    “[]” means concat,bib_i means bias

    • naive version:output: y=i=1s(Mif) @ x+b=[i=1s(Mi)f] @ x+b,output:\ y = \sum_{i=1}^s(M_i\circ f)\ @\ x + b = [\sum_{i=1}^s(M_i)\circ f]\ @\ x + b,

    $ s.t.\ s = \lceil \frac{d}{2} \lceil,\ { M_i }s_{i=1}\in{0, 1}{d\times d\times c}\ $

在 Channel 方向设计多功能卷积

lv2.png

  • 在卷积神经网络中 C >> H、W,所以在 Channel 方向设计多功能卷积非常必要

  • 数学表示:

    • y=[f^1 @ x1, ... ,f^n @ xn]y = [\hat{f}_1\ @\ x_1,\ ...\ ,\hat{f}_n\ @\ x_n]

    $ s.t.\ \ \forall i, \hat{f}_i \in \mathbb{R}^{d\times d\times c},\ \ n = (c - \hat{c})/g+1$

    • 其中:
      • 省略 bias
      • g means channel-wise stride
      • c^\hat{c} means non-zeros channels
      • n means 一个 filter 用几次
      • [] means concat

学习策略

mask 具体如何设计

lv3.png

  • mask 两种设计策略:
    • 方案 a:每个主卷积核共享一套二值 mask
    • 方案 b:每个二值 mask 只用一次
  • 实验证明,方案 b 效果更好,原因是:方案 b 中二值 mask 的假设空间更大

如何让主卷积核对应的多个二值 mask 相似性

  • 极端情况:如果一个主卷积核对应的所有二值 mask 都相同,那理论上模型效果与只是用主卷积核运算表现基本相同

  • 所以需要加入一种使得 同一个主卷积核对应的多个每个二值 mask 更倾向不同 的损失函数

  • 损失函数数学表示:

    • minF,ML=L0(F,M)+λLortho(M)\min_{F,M}\mathcal L = \mathcal L_0(F,M) + \lambda\mathcal L_{ortho}(M)
    • M=[vec(M1), ... ,vec(Ms)]M = [vec(M_1),\ ...\ ,vec(M_s)]

    $ \mathcal{L}_{ortho} = \frac{1}{2} \lVert \frac{1}{d2c}MTM-I\rVert_F^2$

    • 其中:
      • Lortho\mathcal{L}_{ortho} means loss of Orthogonal(正交损失)
      • L0\mathcal{L}_0 means 任务相关 loss
      • MiM_i 表示一个主卷积核的一个二值 mask
      • 正交矩阵的性质:
        • 假设 M 是一个正交矩阵,则 MTM=IM^TM=I
        • 正交矩阵的列向量线性无关

对主卷积核的优化方法

  • 总 loss 包括 任务相关 lossmask 正交 loss
  • 只有 任务相关 loss 与主卷积核相关
  • Lfi=L0fi=j=1sL0f^ijMj\frac{\partial\mathcal L}{\partial f_i} = \frac{\partial\mathcal L_0}{\partial f_i} = \sum_{j=1}^{s}\frac{\partial\mathcal L_0}{\partial \hat f_{ij}}\circ M_j
  • LF=[L0f1, .... ,L0fk]\frac{\partial\mathcal L}{\partial F} = [\frac{\partial\mathcal L_0}{\partial f_1},\ ....\ ,\frac{\partial\mathcal L_0}{\partial f_k}]
    • 其中 k 表示主卷积核的个数
  • FFηLFF \leftarrow F - \eta \frac{\mathcal L}{F}

对二值 mask 的优化方法

  • 先将 Lortho\mathcal L_{ortho} 展开:
    • Lortho=12Tr[(1d2cMTMI)(1d2cMTMI)T]=12Tr[1d4c2MTMMTM21d2cMTM+I]\mathcal L_{ortho} = \frac{1}{2}Tr[(\frac{1}{d^2c}M^TM-I)(\frac{1}{d^2c}M^TM-I)^T] = \frac{1}{2}Tr[\frac{1}{d^4c^2}M^TMM^TM - 2\frac{1}{d^2c}M^TM+I]
  • 所以:
    • LorthoM=12(4d4c2MMTM4d2cM)=2d4c2MMTM2d2cM\frac{\partial\mathcal L_{ortho}}{\partial M} = \frac{1}{2}(\frac{4}{d^4c^2}MM^TM - \frac{4}{d^2c}M) = \frac{2}{d^4c^2}MM^TM - \frac{2}{d^2c}M
  • \because 交换门,L0Mj=i=1kL0f^ijfi\therefore \frac{\partial\mathcal L_{0}}{\partial M_j} = \sum_{i=1}^k\frac{\partial\mathcal L_{0}}{\partial\hat f_{ij}}\circ f_i
  • LM=[L0M1, ... ,L0Ms]+λLorthoM\frac{\partial\mathcal L}{\partial M} = [\frac{\partial\mathcal L_0}{\partial M_1},\ ...\ , \frac{\partial\mathcal L_0}{\partial M_s}] + \lambda \frac{\partial\mathcal L_{ortho}}{\partial M}
  • 因为 M 是 binary 的离散值,所以需要一个代理的连续变量 H,实现 直通估计器 STE 的作用
  • M=sign(H),   H=clip(H,0,1)M = sign(H),\ \ \ H = clip(H,0,1)
  • LM=LH\frac{\partial\mathcal L}{\partial M}=\frac{\partial\mathcal L}{\partial H}
  • {HMHclip(HηLH,0,1)\begin{cases} H\leftarrow M\\ H\leftarrow clip(H-\eta \frac{\partial\mathcal L}{\partial H},0,1) \end{cases}

lv4.png

Thought

  • 这篇文章在 2018 年就已经发表在 nips 上了,最近做了一些详细实验后重新挂在了 arxiv 上了
  • 本文实验非常详细,虽然没有开源,前向计算和反向计算的数学推导很精彩~~(敲 latex 敲的想哭)~~,像一篇 survey
  • 这篇文章 inference 阶段有点重参数化的感觉,RepMLP 思想和本文有点相似
  • STE 部分让我想起了 DoReFa-Net 😂