Ghost Module是一种模型压缩的方法,可以用更少的参数生成更多的特征图,即在保证网络精度的同时减少网络参数和计算量,从而提升计算速度(speed),降低延时(latency)。
Ghost 模块可以代替现有卷积网络中的每一个卷积层。
Ghost Module原理
通过对比分析ResNet-50网络第一个残差组(Residual group)输出的特征图可视化结果,发现一些特征图高度相似(如Ghost一般,下图中的三组box内的图像对)。如果按照传统的思考方式,可能认为这些相似的特征图存在冗余,是多余信息,想办法避免产生这些高度相似的特征图。
但本文思路清奇,推测CNN的强大特征提取能力和这些相似的特征图(Ghost对)正相关,不去刻意的避免产生这种Ghost对,而是尝试利用简单的线性操作来获得更多的Ghost对,以增强模型的特征提取能力。
作者提出一个仅通过少量计算(论文称为cheap operations)就能生成大量特征图的结构——Ghost Module。而cheap operations就是线性变换,论文中采用卷积操作实现。具体过程如下:
- 使用比原始更少量卷积运算,比如正常用64个卷积核,这里就用32个,减少一半的计算量。
- 利用深度分离卷积,从上面生成的特征图中变换出冗余的特征。
- 上面两步获取的特征图concat起来输出,送入后续的环节。
如下图所示,假设原始卷积操作中输入Input与n组kxk的Kernel卷积后生成通道数为n,尺寸为h’xw’大小的输出。在ghost模型中,我们用m组kxk的Kernel与input进行卷积,生成mxh’xw’的本征图intrinsic,之后本征图进行线性变换Φ产生ghost图,将intrinsic和ghost一起作为输出。