GhostNet:廉价操作得到更多的特征
Posted AI浩
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GhostNet:廉价操作得到更多的特征相关的知识,希望对你有一定的参考价值。
文章目录
摘要
论文链接:https://arxiv.org/pdf/1911.11907.pdf
由于内存和计算资源的限制,在嵌入式设备上部署卷积神经网络(CNNs)非常困难。特征映射的冗余性是成功的神经网络的一个重要特征,但在神经结构设计方面的研究很少。本文提出了一种新的Ghost模块,可以通过低成本操作生成更多的特征图。我们在一组内在特征映射的基础上,以较低的代价进行一系列线性变换,生成许多能充分揭示内在特征信息的Ghost特征映射。提出的Ghost模块可以作为即插即用组件来升级现有的卷积神经网络。Ghost瓶颈被设计成堆叠Ghost模块,这样就可以轻松建立轻量级的GhostNet。在基准测试上进行的实验表明,提出的Ghost模块是基线模型中卷积层的一个令人印象深刻的替代方案,我们的GhostNet在ImageNet ILSVRC-2012分类数据集上的计算成本与MobileNetV3相似,可以实现更高的识别性能(例如75.7%的top-1精度)。代码可从https://github.com/huawei-noah/ghostnet获得。
1. 简介
深度卷积神经网络在各种计算机视觉任务中表现出出色的性能,如图像识别[30,13]、目标检测[43,33]和语义分割[4]。传统的CNNs通常需要大量的参数和浮点运算(FLOPs)才能达到令人满意的精度,例如ResNet-50[16]的参数约为25.6M,处理大小为224 × 224的图像需要4.1B FLOPs。因此,深度神经网络设计的近期趋势是探索移动设备(如智能手机和自动驾驶汽车)性能可接受的便携、高效网络架构。
多年来,人们提出了一系列研究紧凑深度神经网络的方法,如网络修剪[14,39]、低位量化[42,26]、知识蒸馏[19,57]等。Han等人[14]提出修剪神经网络中不重要的权重。[31]利用’ 1范数正则化来修剪滤波器以获得高效的cnn。[42]将权重和激活量化为1位数据,以实现较大的压缩和加速比。[19]引入了知识蒸馏,将知识从较大的模型转移到较小的模型。然而,这些方法的性能通常是被预先训练的深度神经网络作为基线的上界。
除此之外,高效的神经体系结构设计在建立高效的深度网络方面具有非常大的潜力,并且使用较少的参数和计算,最近已经取得了相当大的成功。这类方法还可以为自动搜索方法提供新的搜索单元[62,55,5]。例如,MobileNet[21,44,20]利用深度卷积和点卷积构造一个单元,用更大的滤波器近似原始卷积层,并取得了相当的性能。ShuffleNet[61,40]进一步探索了信道洗牌操作来增强轻量级模型的性能。
训练有素的深度神经网络特征图中丰富甚至冗余的信息通常保证了对输入数据的全面理解。例如,图1展示了ResNet-50生成的输入图像的一些特征映射,其中存在许多相似的特征映射对,就像彼此的幽灵。特征映射的冗余可能是一个成功的深度神经网络的重要特征。我们倾向于接受它们,而不是避免冗余的功能映射,但是以一种成本效益的方式。
在本文中,我们引入了一种新的Ghost模块,它可以用更少的参数生成更多的特征。具体来说,将深度神经网络中的普通卷积层分为两部分。第一部分涉及普通的卷积,但它们的总数将被严格控制。在第一部分的固有特征映射的基础上,通过一系列简单的线性运算生成更多的特征映射。与普通卷积神经网络相比,该Ghost模块在不改变输出特征映射大小的情况下,降低了所需的参数总数和计算复杂度。基于Ghost模块,我们建立了一个高效的神经体系结构,即GhostNet。我们首先替换基准神经体系结构中原有的卷积层,以演示Ghost模块的有效性,然后验证我们的GhostNets在几个基准视觉数据集上的优越性。实验结果表明,所提出的Ghost模块能够在保持相似识别性能的同时降低通用卷积层的计算成本,并且在移动设备上的各种快速推理任务中,GhostNets可以超过目前最先进的高效深度模型如MobileNetV3 [20]。
本文的其余部分组织如下:第2节简要总结了该领域的相关工作,第3节介绍了提出的Ghost模块和GhostNet,第4节进行了实验和分析,最后在第5节给出了结论。
2. 相关工作
本文从模型压缩和紧致模型设计两部分回顾了现有的神经网络轻量化方法。
2.1. 模型的压缩
对于给定的神经网络,模型压缩旨在减少计算、能量和存储成本[14,48,11,54]。剪枝连接[15,14,50]切断了神经元之间不重要的连接。信道修剪[51,18,31,39,59,23,35]进一步目标是去除无用的信道,以便在实践中更容易加速。模型量化[42,24,26]表示具有离散值的神经网络的权重或激活,用于压缩和计算加速。具体来说,只有1位值的二值化方法[24,42,38,45]可以通过高效的二进制操作极大地加速模型。张量分解[27,9]通过利用权重的冗余和低秩特性,减少了参数或计算量。知识蒸馏[19,12,3]利用较大的模型来教授较小的模型,这提高了较小模型的性能。这些方法的性能通常取决于给定的预训练模型。对基本操作和体系结构的改进将使它们走得更远。
2.2. 紧凑的模型设计
随着在嵌入式设备上部署神经网络的需求,近年来提出了一系列紧凑模型[7,21,44,20,61,40,53,56]。例外[7]利用深度卷积运算更有效地利用模型参数。MobileNets[21]是一系列基于深度可分卷积的轻量级深度神经网络。MobileNetV2[44]提出了反向残留块,而MobileNetV3[20]进一步利用了AutoML技术[62,55,10],以更少的flop实现了更好的性能。ShuffleNet[61]引入信道洗牌操作,改善信道组之间的信息流交换。ShuffleNetV2[40]进一步考虑了目标硬件上的实际速度,以便进行紧凑模型设计。虽然这些模型以很少的flop获得了良好的性能,但特征映射之间的相关性和冗余性从来没有得到很好的利用。
3.方法
在本节中,我们将首先介绍Ghost模块,利用一些小过滤器从原始的卷积层生成更多的特征映射,然后开发一个具有非常高效的架构和高性能的新的GhostNet。
3.1. 提供更多特征的Ghost模块
深度卷积神经网络[30,46,16]通常由大量的卷积组成,导致大量的计算成本。尽管最近的工作如MobileNet[21,44]和ShuffleNet[40]引入了深度卷积或shuffle操作,使用更小的卷积滤波器(浮点数操作)构建高效的cnn,但剩余的1 × 1卷积层仍将占用大量内存和FLOPs。
考虑到主流cnn计算的中间特征图(如图1所示)普遍存在冗余,我们建议减少所需资源,即用于生成中间特征图的卷积滤波器。在实际操作中,给定输入数据
X
∈
R
c
×
h
×
w
X \\in \\mathbbR^c \\times h \\times w
X∈Rc×h×w,其中c为输入通道数,h和w分别为输入数据的高度和宽度,则任意卷积层生成n个特征图的操作可表述为
Y
=
X
∗
f
+
b
(1)
Y=X * f+b \\tag1
Y=X∗f+b(1)
其中,*是卷积运算,b是偏置项, Y ∈ R h ′ × w ′ × n Y \\in \\mathbbR^h^\\prime \\times w^\\prime \\times n Y∈Rh′×w′×n是有n个通道的输出特征映射, f ∈ R c × k × k × n f \\in \\mathbbR^c \\times k \\times k \\times n f∈Rc×k×k×n是该层的卷积滤波器。其中h0和w0分别为输出数据的高度和宽度,k × k分别为卷积滤波器f的核大小。在这个卷积过程中,所需的flop数量可以计算为 n ⋅ h 0 ⋅ w 0 ⋅ c ⋅ k ⋅ k n·h0·w0·c·k·k n⋅h0⋅w0⋅c⋅k⋅k,由于滤波器n的数量和通道数量c通常非常大(例如256或512),这个数字通常高达数十万。
根据公式1,f和b中待优化参数的数量由输入和输出特征映射的尺寸显式决定。从图1中可以观察到,卷积层的输出特征映射通常包含很多冗余,其中一些特征映射可能彼此相似。我们指出,对于大量的flop和参数,没有必要逐个生成这些冗余的特征映射。假设输出特征映射是一些带有一些廉价转换的内在特征映射的“ghost”。这些固有特征图通常较小,由普通卷积滤波器产生。具体地说,m个固有特征映射
Y
′
∈
R
h
′
×
w
′
×
m
Y^\\prime \\in \\mathbbR^h^\\prime \\times w^\\prime \\times m
Y′∈Rh′×w′×m是使用初级卷积生成的:
Y
′
=
X
∗
f
′
(2)
Y^\\prime=X * f^\\prime \\tag2
Y′=X∗f′(2)
其中
f
′
∈
R
c
×
k
×
k
×
m
f^\\prime \\in \\mathbbR^c \\times k \\times k \\times m
f′∈Rc×k×k×m为所使用的滤波器,m≤n,为简便省略了偏置项。滤波器大小、步幅、填充等超参数与普通卷积(公式1)中的超参数相同,以保持输出特征映射的空间大小(即
h
′
h^\\prime
h′和
w
′
w^\\prime
w′)一致。为了进一步获得所需的n个特征映射,我们建议对
Y
′
Y^\\prime
Y′中的每个固有特征进行一系列廉价的线性操作,根据以下函数生成s个鬼特征:
y
i
j
=
Φ
i
,
j
(
y
i
′
)
,
∀
i
=
1
,
…
,
m
,
j
=
1
,
…
,
s
(3)
y_i j=\\Phi_i, j\\left(y_i^\\prime\\right), \\quad \\forall i=1, \\ldots, m, \\quad j=1, \\ldots, s \\tag3
yij=Φi,j(yi′),∀i=1,…,m,j=1,…,s(3)
其中
y
i
′
y_i^\\prime
yi′为
Y
′
Y^\\prime
Y′中的第i个固有特征映射,
Φ
i
,
j
\\Phi_i, j
Φi,j上述函数中的j为生成第j个Ghost特征映射
y
i
j
y_i j
yij的第j个(除最后一个)线性操作,即
y
i
′
y_i^\\prime
yi′可以有一个或多个Ghost特征映射
y
i
j
j
=
1
s
\\left\\y_i j\\right\\_j=1^s
yijj=1s。最后一个
Φ
i
,
s
\\Phi_i, s
Φi,s是用于保留固有特征映射的标识映射,如图2(b)所示。利用式3,我们可以得到n = m·s特征映射
Y
=
[
y
11
,
y
12
,
⋯
,
y
m
s
]
Y=\\left[y_11, y_12, \\cdots, y_m s\\right]
Y=[y11,y12,⋯,yms]作为Ghost模块的输出数据,如图2(b)所示。注意,线性运算Φ操作在每个通道上,其计算成本比普通卷积小得多。在实际操作中,Ghost模块中可能存在几种不同的线性操作,例如3 × 3和5 × 5线性核,这将在实验部分进行分析。
与现有方法的区别。 提出的Ghost模块与现有的高效卷积方案有很大的不同。i)与[21,61]中广泛利用1×1点卷积的单元相比,Ghost模块中的主卷积可以自定义内核大小。ii)现有方法[21,44,61,40]采用点卷积处理信道间的特征,然后采用深度卷积处理空间信息。相比之下,Ghost模块采用普通卷积先生成一些固有特征映射,然后利用廉价的线性运算对特征进行增广,增加信道。iii)在以往高效的体系结构中,处理每个特征图的操作仅限于深度卷积或移位操作[21,61,53,28],而Ghost模块中的线性操作可以具有较大的多样性。iv)此外,在Ghost模块中将身份映射与线性变换并行,以保留固有特征映射。
复杂性分析。 由于我们可以利用公式3中提出的Ghost模块来生成与普通卷积层相同数量的特征映射,我们可以轻松地将Ghost模块集成到现有设计良好的神经体系结构中,以减少计算成本。在这里,我们进一步分析了使用Ghost模块在内存使用和理论加速方面的收益。例如,有1个标识映射和
m
⋅
(
s
−
1
)
=
n
s
⋅
(
s
−
1
)
m \\cdot(s-1)=\\fracns \\cdot(s-1)
m⋅(s−1)=sn⋅(s−1)个线性操作,每个线性操作的平均内核大小等于d × d。理想情况下,n·(s−1)个线性操作可以有不同的形状和参数,但尤其考虑到CPU或GPU卡的效用,在线推理会受到阻碍。因此,我们建议在一个Ghost模块中采用相同大小的线性操作(例如3 × 3或5 × 5),以便有效地实现。用Ghost模块升级普通卷积的理论加速比为
r
s
=
n
⋅
h
′
⋅
w
′
⋅
c
⋅
k
⋅
k
n
s
⋅
h
′
⋅
w
′
⋅
c
⋅
k
⋅
k
+
(
s
−
1
)
⋅
n
s
⋅
h
′
⋅
w
′
⋅
d
⋅
d
=
c
⋅
k
⋅
k
1
s
⋅
c
⋅
k
⋅
k
+
s
−
1
s
⋅
d
⋅
d
≈
s
⋅
c
s
+
c
−
1
≈
s
,
(4)
\\beginaligned r_s &=\\fracn \\cdot h^\\prime \\cdot w^\\prime \\cdot c \\cdot k \\cdot k\\fracns \\cdot h^\\prime \\cdot w^\\prime \\cdot c \\cdot k \\cdot k+(s-1) \\cdot \\fracns \\cdot h^\\prime \\cdot w^\\prime \\cdot d \\cdot d \\\\ &=\\fracc \\cdot k \\cdot k\\frac1s \\cdot c \\cdot k \\cdot k+\\fracs-1s \\cdot d \\cdot d \\approx \\fracs \\cdot cs+c-1 \\approx s, \\endaligned \\tag4
rs=GhostNet网络详解