重读GhostNet:使用轻量操作代替部分传统卷积层生成冗余特征以减少计算量


本文为CVPR 2020 录用论文,作者来自华为、北京大学、悉尼大学,截止目前已有36次引用,github 星标1.2K,是近年来值得关注的轻量级CNN模型。

使用轻量操作代替部分传统卷积层生成冗余特征以减少计算量

GhostNet:More Features from Cheap Operations

论文:https://arxiv.org/pdf/1911.11907.pdf

代码:https://github.com/huawei-noah/ghostnet

0

绪论

随着卷积神经网络部署在终端的需求越来越强烈,很多研究者们开始研究如何降低神经网络的计算量。一种方法是在一个已经训练好的网络基础上做一些裁剪和量化,比如模型剪枝、低比特量化、知识蒸馏;另外一种方法是设计高效的神经网络架构,比如MobileNetv1-v3系列、ShuffleNet等等。

特征冗余性是卷积神经网络的重要特性之一,一些轻量化网络的工作恰恰是利用特征的冗余性,通过裁掉部分冗余特征达到模型轻量化的效果。

与其他工作不同,这篇文章并没有刻意裁剪冗余的特征,而是用一种比传统卷积层更轻量化的方法去生成冗余的特征。通过“少量传统卷积计算”+“轻量的冗余特征生成器”的方式,既能减少网络的整体计算量,又能保证网络的精度。

1

动机

下图为针对一输入图片,ResNet-50中间的feature map,图中的30个feature map中,有一些feature map是很相似的,比如图中相同颜色标出的3组feature map。这种现象一定程度上说明了神经网络中feature map的冗余性,神经网络的冗余性有助于网络更全面地理解输入图片。与通过减少冗余性进行网络轻量化的工作不同,这篇文章并没有减少冗余性,而是采用一种新的、计算量小的方法生成冗余特征。

既然feature map具有冗余性,那么完全使用传统的卷积层生成这么冗余的特征是不是有点浪费计算资源了呢?考虑可以用一个输出feature map数量很少的卷积层和另外一个能增加冗余性、计算量小的操作去代替传统网络中的卷积层,既能保证特征冗余性从而保证精度,又能减少网络的整体计算量。

2

Ghost Module

作者提出了用于代替传统卷积层的Ghost module。Ghost module和传统卷积层的区别如下图所示:

使用 表示输入feature map,其中 是输入feature map的通道数, 分别是输入feature map的高和宽,那么上图中图(a)所示的传统卷积层可以用如下公式表示:

上式中 表示含有 个通道的输出feature map,  分别是输出feature map的高和宽。 表示卷积操作, 表示卷积核,卷积核尺寸为 表示偏置项。计算整个卷积层,需要做 次乘法和加法操作,在网络的浅层, 比较大;在网络的深层, 比较大。

上图中图(b)所示即为作者提出的Ghost module。既然feature map有冗余性,大可不必使用很昂贵的传统卷积层产生所有的feature map;只需要使用传统卷积层产生一部分feature map,然后通过对这部分feature map做简单的线性变换,增加feature map的冗余性,应该可以“模拟”传统卷积层的效果。

因此Ghost module由两部分组成:其一为输出少量feature map的传统卷积层;其二为用于产生冗余feature map的轻量级线性变换层。使用如下2个公式表述上图中图(b)的操作:

第一个公式表示输出少量feature map的传统卷积层,其中 表示输出特征, 表示该卷积操作的卷积核,这个卷积操作的输出feature map通道数要小于传统卷积层的通道数,即

第二个公式表示用于产生冗余特征的线性变换操作,其中 个feature map。 中的每个feature map   ,都要通过轻量级的线性操作 ,得到 个feature map。

因此这 个feature map通过线性操作共可以得到 个feature map。为了使Ghost module能即插即用地替换传统卷积,即Ghost module输出的feature map数量与传统卷积一致,因此要保证 ,且Ghost module中卷积操作的卷积核尺寸、步长、padding等属性要与被替换的传统卷积层一致。

需要特别指出的是,每个 个线性变换中,最后一个线性变换被强行指定为恒等变换,从上图(b)中也可看出来这一点。这里的线性变换 可以为 的卷积操作,当然也可以是其他轻量级的线性操作。

在如上图(b)所示的Ghost module中,左侧的操作计算量为 ;在右侧的操作中,每个 个线性操作中有1个恒等映射,

因此每个 实际上只有 个占用计算资源的线性变换,若采用 卷积作为该线性变换,这部分计算为

那么Ghost module的总计算量为

又因为 ,因此总计算量可以表示为

输出同样通道数和同样的feature map尺寸,传统的卷积层与ghost module的计算量之比为:

一般情况下, ,若令

3

Ghost Bottleneck

以Ghost module为基础构建Ghost Bottleneck,如下图所示

Ghost Bottleneck的结构参考了如下两篇论文:

  • Deep residual learning for image recognition.

  • Mobilenetv2: Inverted residuals and linear bottlenecks.

Ghost Bottleneck具有如下特点:

  • 每个Ghost Bottleneck中包含2个Ghost module,第1个Ghost module用于扩充特征的通道数,第2个Ghost module用于减少特征的通道数。

  • 参考了ResNet中shortcut结构。

  • 每个Ghost module后面加1个BN层。

  • 参考了MobileNetv2的结构,第1个Ghost module后面有ReLU操作,第2个Ghost module后面没有ReLU操作。

此外,针对stride=2的情况,Ghost Bottleneck又增加了如下操作:

  • shortcut部分包含下采样操作以保证维度一致。

  • 2个Ghost module中间插入stride=2的DWConv层完成下采样操作,并在其后增加1个BN层。

在实际使用过程中,当stride=2时,令Ghost module中的卷积操作为1x1卷积,以减少计算量。

4

GhostNet

使用Ghost Bottleneck构建GhostNet,在构建GhostNet时参考了下面2篇文章提出的网络结构:

  • Searching for mobilenetv3.

  • Squeeze-and-excitation networks.

将MobileNetv3中的bottleneck替换成上文中的Ghost Bottleneck,GhostNet结构如下所示:

上图中的“#exp”一栏的数字,表示Ghost Bottleneck中第1个Ghost module产生的特征通道数;“SE”一栏表示是否使用了squeeze and excite模块。

为了保证计算效率,GhostNet并没有使用MobileNetv3中的hard-swish激活函数。

为了使GhostNet能够平衡计算量与性能,将上述网络结构中的通道数乘以 ,使得网络具有扩展性,记作GhostNet- 。GhostNet- 的计算量约为GhostNet- 倍。

5

超参数探索

作者通过实验探索最佳的s值和d值,使用CIFAR-10数据集和VGG结构,使用Ghost module替代VGG中的卷积层,首先令s=2,d={1,3,5,7}构建4个网络,这4个网络以及VGG16的计算量和性能如下表所示:

可以看出当d=3时网络性能最好,当d=5或者d=7时,计算量有一定提升,且网络性能并没有提高。

令d=3,s={2,3,4,5}构建4个网络,这4个网络以及VGG16的计算量和性能如下表所示:

当s=2时性能最好,且计算量是VGG16的一半。

6

实验结果

将上述超参数探索的结果应用于GhostNet,即令GhostNet中的s=2,d=3,为减少计算量,将卷积核尺寸设置为1x1。

在ImageNet训练集上训练,在ImageNet验证集上测试,结果如下表所示:

可以看出在不同计算量下,相比于其他网络,GhostNet都有很优越的性能。

为了证明GhostNet的通用性,将GhostNet-1.1X分别用于RetinaNet和Faster R-CNN框架下,在COCO数据集上做目标检测,效果如下表所示:

从上表可以看出,无论是使用RetinaNet方法还是Faster R-CNN方法,相比于使用其他backbone,使用GhostNet-1.1X作为backbone在保证精度的同时能显著降低计算量。

7

总结

1.利用feature map之间的冗余性,提出了Ghost module,使用轻量级操作(比如DWConv)代替部分传统的卷积层生成冗余特征。

2.以Ghost module为基础构建GhostNet,并通过实验证明了GhostNet的性能和通用性。

3.很适用于基于ARM的终端平台,但是由于现有的AI芯片对DWConv支持不够友好,因此在AI芯片上未必有很高的推理速度。

仅用于学习交流!

(本文为粉丝投稿)

END

备注:部署

模型压缩与应用部署交流群

模型压缩、网络压缩、神经网络加速、轻量级网络设计、知识蒸馏、应用部署、MNN、NCNN等技术,

若已为CV君其他账号好友请直接私信。

我爱计算机视觉

微信号:aicvml

QQ群:805388940

微博知乎:@我爱计算机视觉

投稿:amos@52cv.net

网站:www.52cv.net

在看,让更多人看到  

  • 8
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值