论文阅读 ACNet: Strengthening the Kernel Skeletons for Powerful CNN via Asymmetric Convolution Blocks
前言
对CNN结构的设计,之前的工作主要关注层间的连接方式,如 VGG 简单地把层堆叠在一起,ResNet 通过 identity mapping 把 block 的输入和输出加在一起,DenseNet 用 densely connecting 把每一层的输出拼接起来…而这篇文章提出的 ACNet 是通过寻找卷积核的权重与空间位置之间的关系设计的,实质上是一个即插即用模块,可以与其他网络方便地结合,达到 SOTA 性能。
Asymmetric Convolution Block (ACB)
一般 CNN 的卷积层都是用一个正方形的核,假设为
d
×
d
d \times d
d×d,而这里的 ACB ,还另外用了
1
×
d
1 \times d
1×d 和
d
×
1
d \times 1
d×1 两个核来对方形核的 skeletons (中心十字架)位置进行加强。
训练的时候(上左图)ACB 有三个并行的卷积分支,而测试的时候(上右图)可以把三个分支融合成一个正方形核,不需要额外的计算开销。
卷积分支的融合
每个分支融合conv和BN
设原来的 kernel 为
F
=
[
F
1
,
F
2
,
.
.
.
,
F
C
o
u
t
]
∈
R
C
i
n
×
d
×
d
×
C
o
u
t
F=[F_1, F_2, ..., F_{C_{out}}] \in R^{C_{in} \times d \times d \times C_{out}}
F=[F1,F2,...,FCout]∈RCin×d×d×Cout ,BN层的均值
μ
=
[
μ
1
,
μ
2
,
.
.
.
,
μ
C
o
u
t
]
\mu=[\mu_1, \mu_2, ..., \mu_{C_{out}}]
μ=[μ1,μ2,...,μCout],标准差
σ
=
[
σ
1
,
σ
2
,
.
.
.
,
σ
C
o
u
t
]
\sigma=[\sigma_1, \sigma_2, ..., \sigma_{C_{out}}]
σ=[σ1,σ2,...,σCout],拟合均值
β
=
[
β
1
,
β
2
,
.
.
.
,
β
C
o
u
t
]
\beta=[\beta_1, \beta_2, ..., \beta_{C_{out}}]
β=[β1,β2,...,βCout],拟合标准差
γ
=
[
γ
1
,
γ
2
,
.
.
.
,
γ
C
o
u
t
]
\gamma=[\gamma_1, \gamma_2, ..., \gamma_{C_{out}}]
γ=[γ1,γ2,...,γCout]
进行融合之后,等价于一个卷积层,核
F
f
u
s
i
o
n
1
F_{fusion}^1
Ffusion1 为
F
f
u
s
i
o
n
1
=
[
γ
1
σ
1
F
1
,
γ
2
σ
2
F
2
,
.
.
.
,
γ
C
o
u
t
σ
C
o
u
t
F
C
o
u
t
]
F_{fusion}^1=[\frac{\gamma_1}{\sigma_1} F_1, \frac{\gamma_2}{\sigma_2}F_2, ..., \frac{\gamma_{C_{out}}}{\sigma_{C_{out}}}F_{C_{out}}]
Ffusion1=[σ1γ1F1,σ2γ2F2,...,σCoutγCoutFCout]
偏置
b
f
u
s
i
o
n
1
=
[
b
1
1
,
b
2
1
,
.
.
.
,
b
C
o
u
t
1
]
b_{fusion}^1=[b_1^1, b_2^1, ..., b_{C_{out}}^1]
bfusion1=[b11,b21,...,bCout1]中第
i
i
i 个分量为
b
i
1
=
−
μ
i
γ
i
σ
i
+
β
i
b_i^1=-\frac{\mu_i\gamma_i}{\sigma_i}+\beta_i
bi1=−σiμiγi+βi
并行分支融合
如上图所示,把三个卷积分支合并,得到的仍是一个卷积层,核
F
f
u
s
i
o
n
2
F_{fusion}^2
Ffusion2 为
F
f
u
s
i
o
n
2
=
F
f
u
s
i
o
n
1
⊕
F
ˉ
f
u
s
i
o
n
1
⊕
F
^
f
u
s
i
o
n
1
F_{fusion}^2= F_{fusion}^1 \oplus \bar{F}_{fusion}^1 \oplus \hat{F}_{fusion}^1
Ffusion2=Ffusion1⊕Fˉfusion1⊕F^fusion1
其中第
i
i
i 个分量为
F
i
2
=
γ
i
σ
i
F
i
⊕
γ
ˉ
i
σ
ˉ
i
F
ˉ
i
⊕
γ
^
i
σ
^
i
F
^
i
F_i^2= \frac{\gamma_i}{\sigma_i} F_i \oplus \frac{\bar{\gamma}_i}{\bar{\sigma}_i} \bar{F}_i \oplus \frac{\hat{\gamma}_i}{\hat{\sigma}_i} \hat{F}_i
Fi2=σiγiFi⊕σˉiγˉiFˉi⊕σ^iγ^iF^i
偏置
b
f
u
s
i
o
n
2
b_{fusion}^2
bfusion2为
b
f
u
s
i
o
n
2
=
b
f
u
s
i
o
n
1
+
b
ˉ
f
u
s
i
o
n
1
+
b
^
f
u
s
i
o
n
1
b_{fusion}^2=b_{fusion}^1+\bar{b}_{fusion}^1+\hat{b}_{fusion}^1
bfusion2=bfusion1+bˉfusion1+b^fusion1
其中第
i
i
i 个分量为
b
i
2
=
−
μ
i
γ
i
σ
i
−
μ
ˉ
i
γ
ˉ
i
σ
ˉ
i
−
μ
^
i
γ
^
i
σ
^
i
+
β
i
+
β
ˉ
i
+
β
^
i
b_i^2=-\frac{\mu_i\gamma_i}{\sigma_i}-\frac{\bar \mu_i \bar \gamma_i}{\bar \sigma_i}-\frac{\hat \mu_i \hat \gamma_i}{\hat \sigma_i}+\beta_i+\bar \beta_i+\hat \beta_i
bi2=−σiμiγi−σˉiμˉiγˉi−σ^iμ^iγ^i+βi+βˉi+β^i
最后相当于把三个分支等价融合成了一个方形核卷积层,测试的时候不需要额外的时间和计算开销。
实验
ACNet 在 Cifar 和 ImageNet 上都取得了很好的效果,这个不多说。值得一提的是,为了证明 skeleton 处的权重更重要,作者在卷积核的不同位置抹掉一些参数,得到了下图的结果
在 ResNet 和 ACNet 上的实验都表明,抹掉 skeleton 的参数,对性能造成的损害更大,这就说明了卷积核中不同位置确实有不同的重要性,而 skeleton 的权重相对来说更重要。这也是为什么 ACNet 采用两个条状卷积核对原始方形卷积核进行加强能获得提升的原因。