GhostNet: More Features from Cheap Operations
原文[https://arxiv.org/pdf/1911.11907v2.pdf]
Abstract
在嵌入式设备中部署卷积神经网络模型受限于内存大小和计算量,本文提出了一个Ghost模块可以以低昂的代价插入到现有的神经网络中代替卷积层,并且尤其组成的GhostNet用与MobileNetV3 相同的计算量取得更好地效果(top-1 75.7%)
Introduction
卷积神经网络在图片分类、目标检测、分割等方向都有很好的表现。但是他们往往都有巨大的参数量,ResNet50参数量达到25.6M,FLOPs为3800M,因此现在的趋势是设计轻量化模型。
这些年也有剪枝,量化,知识蒸馏等模型压缩和加速方法,但会带来精度损失。同时也有手工设计模块减小计算量,像MobileNet的深度可分离卷积,ShuffleNet的分组卷积和打乱channels和通过NAS搜索出来网络。
ResNet产生的特征如图,存在着相似的部分,就像彼此的Ghost的一样。作者希望在有效的措施下且保证足够多的特征情况下减少冗余。
本文的Ghost模块使用更少的参数产生更多的特征,通过Ghost模块搭建GhostNet达到轻量化模型的SOTA。
Related Work
- 韩松提出的模型压缩方法。
- Xception的深度卷积,MobileNet v1 DW,V2的反残差,V3利用NAS搜出的结构。
Approach
尽管MoblieNet和shuffleNet采用了1 × \times × 1卷积,但仍有着可观的计算量和参数量。作者打算减少生成像图一那样的特征图的计算量。
令输入
X
∈
R
h
×
w
×
c
X \in \R^{h \times w \times c}
X∈Rh×w×c,输出为可表示为:
Y
=
X
∗
f
+
b
,
Y
∈
R
h
′
×
w
′
×
n
Y=X*f+b, Y \in R^{h' \times w' \times n}
Y=X∗f+b,Y∈Rh′×w′×n
∗
*
∗为卷积操作,卷积核大小
c
×
k
×
k
c\times k \times k
c×k×k,FLOPS为
h
′
×
w
′
×
n
×
k
×
k
×
c
h' \times w' \times n \times k \times k \times c
h′×w′×n×k×k×c,c和n往往很大,并且参数量的大小大部分由输入输出的维度决定。从图一发现输出的通道内会有较多冗余近似特征,作者决定减少卷积核的个数从而降低输出的通道至m,为保持输出通道为
n
n
n,作者再对卷积核的输出做
s
−
1
s-1
s−1个简单的线性变换后加上恒等映射。则
n
=
m
×
s
n=m \times s
n=m×s。
下面来分析一下计算量,卷积核的计算量为
h
′
×
w
′
×
n
s
×
k
×
k
×
c
h' \times w' \times \frac{n}s \times k \times k \times c
h′×w′×sn×k×k×c
而线性变化计算量则是
(
s
−
1
)
×
h
′
×
w
′
×
n
s
×
d
×
d
(s-1) \times h' \times w' \times \frac{n}s \times d \times d
(s−1)×h′×w′×sn×d×d
d
×
d
d \times d
d×d代表线性操作。
计算量的压缩比例约为 s s s倍。
作者以此搭建GhostNet,GhostNet主要由Ghost bottleneck 组成。与ResNet相似地采用shortcut。
整体的结构与MobileNetV3相似,#exp代表压缩倍率。SE代表使用SE模块。因为hard-swish激活函数延迟高,所以并没有像MobileNetV3一样。另外作者表示这个结构仅是个baseline供参考,用NAS搜出的结构可能有更好的表现。
实验
作者在CIFAR10和ImageNet还有Coco上做了对比。
首先对比参数
d
×
d
d\times d
d×d 即用来补全channel的线性变换的卷积核参数。作者还做使用了更低代价的仿射变换和小波变换,但效果都不如使用深度卷积好。
在VGG16上作者比较两个超参数的设置。d=1时不能很好的产生特征,d过大反而会过拟合。然后作者选取d=3来测试不同的s。A
在CIFAR10上,作者对比VGG16和ResNet56使用Ghost模块替代卷积层的效果。
在ImageNet上也与ResNet-50的SOTA比较
与其他的轻量化模型比较
总结
作者发现输出的特征存在相似的部分,运用了Ghost模块来代替多个卷积产生足够的特征,与MobileNet接近的参数量和计算量取得了更好的表现。