论文:GhostNet: More Features from Cheap Operations
一、序
又到了CVPR放榜之日,各脉大仙们各显神通,偶然间寻得一妖魅之术,名为幽灵网络。
二、初识
作者通过对ResNet-50的第一个残差块生成的特征图进行可视化,不看不知道,一看吓一跳!又能搞点事情了,嘿嘿。
作者发现这些特征图中有一部分很相似,如图中的扳手标记处,既然很相似,那么大概应该或许能够用线性变换得到吧!
三、详解
-
常规卷积
公式(1)中:X为输入,f 代表卷积操作,b为偏置
X : c×h×w
f : c×k×k×n
Y : h’×w’×n
FLOPs = h’×w’×c×k×k×n
作者认为随着卷积核数目的增加,生成的特征图数目随之增加,计算量会显著增大,那么这就很明确了,要想减小计算量,得从特征图的数目入手。
另外,作者指出没有必要生成多余的特征图,因为特征图之间存在冗余。 -
幽灵模型
既然没必要生成多余的特征图,那么可以先生成m个特征图(intrinsic feature maps);
X : c×h×w
f’ : c×k×k×m
Y’ : h’×w’×m
FLOPs = h’×w’×c×k×k×m
然后对这m个特征图进行线性变换,得到n = m×s个特征图;
s :线性操作的方式(例如3×3,5×5卷积,**函数为linear)
另外,保留原始的m个feature maps(Identity mapping),这一点很重要。
设线性变换的卷积核平均尺寸为d×d,可以计算Ghost Module相比普通模型的加速比例:
可以看到,计算量和参数量都可以压缩 s 倍,即有几种线性变换方式就能压缩几倍。
四、总览
- Ghost bottleneck
- GhostNet
对于stride = 2的地方,shortcut采用下采样的方式,并且在两个Ghost module之间插入一个depthwise卷积 - Experiments on ImageNet dataset
五、总结
从作者给出的实验结果来看,轻量级网络又要再添一员大将了,而且实现起来也不复杂,抓紧时间实现一下看看效果如何。