CVPR 2020 论文标题:GhostNet: More Features from Cheap Operations 论文地址:https://arxiv.org/abs/1911.11907 代码地址:https://github.com/huawei-noah/ghostnet

image.png


简介

本文提出了一种新的轻量级CNN框架GhostNet,相比于经典的轻量网络如MobileNet和ShuffleNet计算量更小,效果更好。另外,构成GhostNet的组件Ghost Module可以在其他CNN框架中即插即用,Ghost Module也可以根据硬件条件设置相应的参数控制模型计算量。最后作者在image classification和object detection两个视觉任务上验证了GhostNet的有效性。


Ghost Module for More Features

作者的motivation源自于一个有趣的发现:有效的CNN网络往往会生成很多冗余的feature map。如图1,ResNet50的第一个残差块生成的特征图中有很多通道都是相似的,它们可以通过简单的线性变换近似生成彼此。这些看似冗余的feature map其实是非常必要的,GhostNet要做的不是减小冗余,而是用更小的计算量增加冗余。
image.png

在传统的CNN中,所有的feature map都是由卷积层生成的,而卷积操作的参数量和运算量都比较大。既然卷积层生成的feature map有很多都是相似却又必要的,那是否可以只用卷积层生成少量的feature map,然后用更简单的运算以少量的feature map为基础,线性变换生成更多的feature map,达到和传统CNN同样的效果。这就是Ghost Module的核心思想,下面来看具体操作。
传统的卷积层可以用下式表示(如图2(a)):
image.png
其中image.png为输入,image.png为输出,image.png为卷积核,b是偏置项。这种操作的浮点运算量FLOPs为image.png,其大小和输入的feature map通道数c以及输出通道数n密切相关。
image.png

为了减小卷积核的参数量以及运算量,作者首先减小输出通道数n:
image.png
其中image.png,m为输出通道数且m<n。这里省略的偏置项b。这一步得到了少量的feature map,作者称为intrinsic feature map。之后用线性变换在intrinsic feature map上生成与其相似的ghost feature map,并把它们concat起来,得到与原来近似的通道数量:
image.png
其中image.png表示由第i个intrinsic feature map生成第j个ghost feature map的线型操作。可以看到,每个intrinsic feature map都会生成s个ghost feature map,其中第s个直接设置为其本身,这样就相当于将feature map的数量m扩大了s倍。在实际实现中,image.png由s-1个卷积核大小为m33或m55的depthwise Conv实现(没看代码,有待求证)。
以上就是本文核心的Ghost Module,实现了用更小的计算量生成和传统CNN近似的feature map。换个角度来看Ghost Module,其实和bottleneck异曲同工:都是在模型的中间部分减小channel数量,然后再恢复。只不过bottleneck用了pointwise Conv恢复,而Ghost Module用了depthwise Conv的思想恢复。
最后分析一下Ghost Module的计算量和参数量:
image.png
image.png
可以看到计算量image.png和参数量image.png都减小了约s倍,其中s是中间通道数减小的倍数,即n/m。


GhostNet

以Ghost Module为基础,仿照MobileNetV3的结构,作者构造了GhostNet,结构如下:
image.png
image.png

其中#exp表示expansion,即在一个G-bneck中第一个Ghost Module输出的channel,其往往会扩大channel数量,形成一种反的bottleneck结构。之后第二个Ghost Module再缩小channel数量,也就是#out。具体的实现细节还是要参考开源代码。最后,给每一层的channel数量乘一个缩放因子image.png可以进一步控制网络的参数量和计算量。


Experiments

作者在CIFAR-10和ImageNet数据集上做了图像分类实验,在MS-COCO数据集上做了目标检测实验。图4和图5对比了GhostNet和VGG-16生成的feature map。
image.pngimage.png

image.png

image.pngimage.png

image.png

总结

题目和motivation很吸引人!从feature map的特点入手也算是提供了一种轻量CNN结构设计的新思路。
这篇博客讲地更详细~