参考代码:ghostnet
1. 概述
导读:卷积网络由于其在运行时内存与计算资源的限制较难部署到移动设备上,这篇文章是在卷积网络中存在较多冗余的特征图发现基础上,进行研究并提出了一Ghost module使用代价更小的方式去生成更多的特征图。这个模块通过一系列的低代价线性变换去虚构一些特征图,从而来实现或近似复杂特征图中的信息,并且这个模块的可以很方便地嵌入到现有的网络中去。此外,文章还提出了Ghost boottenecks去堆叠Ghost module,从而构建了一个轻量级的基础网络GhostNet,其在ImageNet数据集上达到了75.7%的top-1,超过了MobileNetV3网络。
训练好的模型中为了保证对输入图像有足够的理解能力,会使得网络中存在冗余的信息,见下图ResNet-50中使用方框匹配出来的近似特征图:
上图中这些相似的特征图就像是彼此的ghost的存在,这样的特性也是现有比较成功的网络的一个属性。这篇文章从并非去除相似特征图的角度出发,而是通过以一种高效得变换去近似它。
在这篇文章中提出了新的Ghost模块使用少量的参数去生成更多的特征图,因而对于传统的卷积算法将其分为两个部分:
- 1)第一部分:使用传统的卷积算法,但是特征通道的数量被严格限制;
- 2)第二部分:使用简单的新型操作在第一部分生成特征图的基础上使用线性变换生成更多的特征图;
这样整个卷积的输入输出channel数量就不变,但是参数量就显著减少,文章就是给予这样的模块构建了GhostNet,将原有的卷积使用Ghost模块进行替换也显示出这个模块的有效性。
2. 网络设计
2.1 Ghost Module
对于传统的卷积运算,假设输入的数据是
X
∈
R
c
∗
h
∗
w
X\in R^{c*h*w}
X∈Rc∗h∗w,则整个卷积的过程可以描述为:
Y
=
X
∗
f
+
b
Y=X*f+b
Y=X∗f+b
其中,
Y
∈
R
h
′
∗
w
′
∗
n
,
f
∈
R
c
∗
k
∗
k
∗
n
Y\in R^{h^{'}*w^{'}*n},f\in R^{c*k*k*n}
Y∈Rh′∗w′∗n,f∈Rc∗k∗k∗n,因而这个卷积的运算量表示为
F
L
O
P
s
=
n
∗
h
′
∗
w
′
∗
c
∗
k
∗
k
FLOPs=n*h^{'}*w^{'}*c*k*k
FLOPs=n∗h′∗w′∗c∗k∗k,整个卷积的运算示意见下图所示:
基于上文中提到的特征冗余的观察,文章对此使用新的卷积核(channel数量被压制,卷积的其它参数保持一致)与生成卷积图像,因而新的卷积操作可以描述为
Y
′
=
X
∗
f
′
Y^{'}=X*f^{'}
Y′=X∗f′
其中,
Y
∈
R
h
′
∗
w
′
∗
m
,
f
∈
R
c
∗
k
∗
k
∗
m
Y\in R^{h^{'}*w^{'}*m},f\in R^{c*k*k*m}
Y∈Rh′∗w′∗m,f∈Rc∗k∗k∗m并且
m
≤
n
m\le n
m≤n。那么接下来就是使用前文提到的廉价线性操作去弥补剩下的特征了,因而会对前面经过channel压缩的特征进行变换得到特征:
y
i
,
j
=
Φ
i
,
j
(
y
i
′
)
,
∀
i
=
1
,
…
,
m
;
j
=
1
,
…
,
s
y_{i,j}=\Phi_{i,j}(y_i^{'}),\forall i=1,\dots ,m;j=1,\dots ,s
yi,j=Φi,j(yi′),∀i=1,…,m;j=1,…,s
因而,通过上面的对应关系
n
=
m
∗
s
n=m*s
n=m∗s,就可以重建出与原版卷积channel数量相同的特征图。因而改进之后的计算过程描述为:
计算量分析,下文中的1是指的是identity mapping操作,因而线性操作的操作数描述为
m
∗
(
s
−
1
)
=
n
s
∗
(
s
−
1
)
m*(s-1)=\frac{n}{s}*(s-1)
m∗(s−1)=sn∗(s−1),再考虑线性变换的核大小
d
∗
d
d*d
d∗d,因而变化前后的计算量比较可以描述为:
而对于参数压缩量的分析为:
2.2 GhostNet
基于上面的结构分析,文章将Ghost模块设计为下图所示:
因而使用这样的结构去替换掉传统的卷积操作,从而构建了GhostNet,其结构见表7所示: