arxiv:https://arxiv.org/pdf/1911.11907arxiv.org
github:https://github.com/iamhankai/ghostnet.pytorch
(在ARM CPU上的表现惊人)(CVPR2020)
目的及意义
文章提出了一种Ghost模块(和depth-wise convolution有点像的),用来降低卷积神经网络的计算成本。
模块可以即插即用,来代替常规的卷积操作。
在保持网络性能的前提下,将原始模型转换为紧凑模型。
具体结构下面介绍。
ghost模块解析
常规的卷积操作
C×H×W大小的特征图需要N个C×K×K的卷积核进行卷积,得到N×H×W的特征图。
C为输入特征图通道数,H为高,W为宽,N为输出特征图的通道数,K为卷积核大小。计算量如下
计算量
Ghost module
C×H×W大小的特征图首先与M个C×K×K的卷积核进行卷积,得到M×H×W的特征图。(M<N,且M*S=N)
之后对M×H×W进行S-1次分组卷积(文章中说是对每个通道均进行linear opera-
tion操作,和大小为d×d,d可以为1,3,5...)得到S-1个M×H×W大小的特征图,最后S个叠加到一起得到N×H×W的特征图。
计算量
两种方法计算量对比(相较于常规卷积操作,ghost module大约可以缩小S倍的计算量)
例如c=256,512或者其他,s=2,3后者其他,s<<c
这样我们可以看出ghost模块可在缩小S倍计算量的前提下代替传统卷积操作。
为什么可以怎么做呢?
论文中指出,复杂的卷积神经网络中,存在着很多相似的通道(下图所示),相似的通道在CNN中是存在一定道理的,虽然网络裁剪的过程中往往更倾向于删减掉这些通道。那ghost module中linear opera-
tion即是在减少计算量的前提下来增加这些相似通道。(也就是,既然人家网络存在着相似层,那我们也就不去想着怎么减少它了,而是找一种更高效的操作去直接生成它。我猜应该是这样子的。)
为了方便使用,提出两种结构
stride=1也没啥好说的
stride=2中用到了mobilenet中的DWConv(stride=2)来进行下采样,并且对输入特征图进行downsampling layer来保证Add操作时特征图的H×W一致。
参数D和S的尝试
有效减少计算量的同时精度得到了很好的保留
对比效果
相较于mobilenet v3,相似计算量时ghost net在准确度上也有一定的提升
结论
Ghost可降低CNN卷积操作的计算成本。先卷积生成一定数量的特征图,再进一步应用一定数量的廉价变换操作,有效地生成ghost特征图。该方法是一个即插即用的模块,并通过实验证明在保持可比性能的前提下,将原始模型转换为紧凑模型。此外,使用所提出的新模块构建的GhostNet在效率和准确性方面都优于最先进的轻量级神经架构。
ghost modual其实和可分离卷积有点像。
网友评论