Zhangzhe's Blog

The projection of my life.

0%

ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks

URL

TL;DR

  • 本文提出一种高效的 Channel Attention 算法,与 SENet 相比,效果更好,参数量与计算量更低

Algorithm

网络结构

eca1.png

  • SENet 结构的区别:
    • 两层 FC 变成一层 FC
    • FC 权重稀疏(kernel_size = k 的 1D Conv

对比实验

  • 本文将 ECA-Net 与以下 Channel Attention Block 进行了对比,目的是:如何对 FC 稀疏可以使得模型最终效果最好

    • SENet:Squeeze and Excitation Network
    • SE-Var1:SE 变种 1
    • SE-Var2:SE 变种 2
    • SE-Var3:SE 变种 3
    • SE-GC1:SE 通道分组 1
    • SE-GC2:SE 通道分组 2
    • SE-GC3:SE 通道分组 3
    • ECA-NS:ECA-Net 的动态版
  • 数学表示

    xRW×H×C : inputx \in \mathbb{R}^{W\times H\times C}\ :\ input

    g : Global Average Poolg\ :\ Global\ Average\ Pool

    σ : Sigmoid\sigma\ :\ Sigmoid

  • SENet

    • Channel-wise Attention Weight:w=σ(f{W1,W2}(g(x)))w = \sigma(f_{\{W_1,W_2\}}(g(x))),记 y=g(x)y = g(x)
    • f{W1,W2}(y)=W2ReLU(W1y)f_{\{W_1,W_2\}}(y) = W_2 ReLU(W_1 y)
    • W1RC×CrW_1\in \mathbb{R}^{C\times \frac{C}{r}}
    • W2RCr×CW_2\in \mathbb{R}^{\frac{C}{r} \times C}
    • 参数个数:2×C2r2\times \frac{C^2}{r}
  • SE-Var

    • Channel-wise Attention Weight:w=σ(Wy)w = \sigma (Wy)
    • WRC×CW \in \mathbb{R}^{C\times C}
    • SE-Var1WW 是一个 单位矩阵,参数个数:1
    • SE-Var2WW 是一个 对角矩阵,参数个数:CC
    • SE-Var3WW 是一个 普通矩阵,参数个数:C2C^2
  • SE-GC

    • WW 是一个 分块对角矩阵,每个块边长 CG\frac{C}{G},对角线包含 GG 个块,一共包含非零元素(参数个数):CG×CG×G=C2G\frac{C}{G}\times \frac{C}{G}\times G = \frac{C^2}{G}
    • SE-GC1SE-GC2SE-GC3 的区别只是 GG 的取值不同
  • ECA-NS

    • WW 是一个 阶梯状矩阵,每行连续 KK 个非零元素,阶梯状叠加 CC 行,参数个数:K×CK\times C
  • ECA-Net

    • ECA-NS 中每行元素都一样的特例,参数量:KK

eca2.png

代码表示

eca3.png

对下游任务的提升

  • ImageNet 分类

eca4.png

  • COCO 目标检测

eca5.png

  • COCO 实例分割

eca6.png

Thought

  • SE-Net 的简化版,但参数量与计算量都更小
  • 但是性能比 SE-Net 更好这个结论感觉不太 make sense