论文链接: https://arxiv.org/pdf/2201.03297.pdf
PyTorch: https://github.com/shanglianlm0525/CvPytorch
PyTorch: https://github.com/shanglianlm0525/PyTorch-Networks
由于内存和计算资源的限制,在移动设备上部署卷积神经网络非常困难。本文的目标是通过利用特征映射中的冗余性,为包括CPU和GPU在内的异构设备设计高效的神经网络,这在神经体系结构设计中很少被研究。对于类cpu设备,提出了一种新型的cpu高效Ghost (C-Ghost)模块,可以通过廉价的操作生成更多的特征图。在一组固有特征映射的基础上,利用一系列低成本的线性变换,生成了许多能够完全揭示固有特征背后信息的伪特征映射。提出的C-Ghost模块可以作为即插即用组件,对现有的卷积神经网络进行升级。CGhost瓶颈设计为将C-Ghost模块进行堆叠,从而轻松建立轻量级的C-GhostNet。我们进一步考虑GPU设备的高效网络。不需要在构建阶段涉及太多gpu效率低的操作(例如,深度卷积),建议利用阶段特征冗余来制定gpu效率高的Ghost (G-Ghost)阶段结构。将某一阶段的特征分为两部分,其中第一部分使用输出通道较少的原始块来生成内在特征,而另一部分使用利用阶段冗余的廉价操作来生成。在基准上进行的实验证明了提出的C-Ghost模块和G-Ghost阶段的有效性。C-GhostNet和G-GhostNet可以实现精度和延迟的最佳权衡。
一、摘要
传统的CNN通常需要大量的参数和浮点运算(FLOPs)来达到令人满意的精度,例如,ResNet50 的参数约为25.6M,需要4.1BFLOPs来处理大小为224×224的图像。因此,深度神经网络设计的最新趋势是探索便携式和高效的网络架构,并为移动设备(如智能手机和自动驾驶汽车)提供可接受的性能。多年来,人们提出了一系列研究紧凑深度神经网络的方法,如网络剪枝,低比特量化,知识蒸馏等。此外,高效的神经网络体系结构设计在用较少的参数和计算量建立高效的深度网络方面具有很高的潜力,最近已经取得了相当大的成功。这种方法也可以为自动搜索方法提供新的搜索单元。例如,MobileNet利用深度卷积和点卷积构造了一个单元,用更大的滤波器逼近原始卷积层,并取得了相当的性能。shuffle Net进一步探索了通道洗牌操作,以增强轻量级模型的性能。训练良好的深度神经网络的特征映射中含有丰富甚至冗余的信息,通常可以保证对输入数据的全面理解。例如,下图展示了ResNet50生成的一个输入图像的一些特征映射,其中存在许多类似的特征映射对。特征映射中的冗余是一个成功的深度神经网络的重要特征。我们不是避免冗余的特性映射,而是倾向于采用它们,但是以一种成本效益高的方式。
ResNet50中由第一个残差组生成的一些特征图的可视化,其中三个相似的特征图对示例用相同颜色的框进行注释。通过廉价的操作(用扳手表示),可以将一对特征图中的一个近似地转化为另一个。
在本文中,作者旨在为包括CPU和GPU在内的异构设备设计高效的神经网络。针对CPU设备,引入了一种新型的CPU-efficient Ghost (C-Ghost)模块,可以使用更少的参数生成更多的特性。具体来说,深度神经网络中的普通卷积层将被分为两部分。第一部分涉及普通的卷积,但它们的总数将被严格控制。在第一部分给出的固有特征映射的基础上,通过一系列简单的线性运算生成更多的特征映射。在不改变输出特征图大小的前提下,C-Ghost模块所需的参数数量和计算复杂度都有所降低。建立了一个高效的神经网络体系结构,即C-GhostNet。首先在基准神经体系结构中替换了原有的卷积层,以证明C-Ghost模块的有效性,然后验证了C-GhostNet在几个基准可视化数据集上的优越性。实验结果表明,提出的C-Ghost模块能够降低通用卷积层的计算成本,同时保持相似的识别性能,并且C-GhostNet可以在移动设备上的各种快速推理任务上超越最先进的高效深度模型,如MobileNetV3 。
此外,考虑为GPU设备设计高效的CNN。包括前面提到的C-GhostNet在内,大多数现有的支持flops的轻量级架构都是为cpu设计的。由于CPU和GPU在硬件架构上的显著差异,一些操作的FLOPs更少(特别是广泛使用的深度卷积和通道洗牌)在GPU上不是完全高效的。在实践中,这些运算符的运算强度通常较低,即计算与内存操作的比率,无法被并行计算能力充分利用。因此,在GPU上使用它们对延迟的减少总是达不到我们的期望。在本文中,为了改善CNN架构在GPU设备上的延迟性能,提出了一种新的GPU-efficient Ghost (G-Ghost)阶段,用于构建高效的网络。本文研究了传统结构中跨块的逐级特征冗余,而不是将每个卷积层分解为几个具有较少FLOPs和参数的子层。基本上,现代CNN架构中的一个构建阶段通常由几个卷积层或块组成。由于任意构建阶段的中间特征大小相同(如ResNet第二阶段的28*28),因此该阶段的特征相似性和冗余不仅存在于一层内部,而且存在于多个层之间(如下图)。因此,建议利用通道数量较少的原始阶段生成固有特征,并利用GPU上的廉价操作直接产生相似特征。为了增强特征表示能力,最大限度地挖掘中间层的信息,并将其加性聚合为相似特征。新的G-Ghost可以很好地嵌入到任何主流CNN架构中。对于普通的C-GhostNet,消除了所有的C-Ghost模块,并使用提议的G-Ghost阶段来取代原来的阶段,以建立轻量级的G-GhostNet。在多个基准模型和数据集上进行的实验证明了提出的G-Ghost阶段的有效性。
二、实现过程
对于给定的神经网络,模型压缩的目的是减少计算量和存储成本。修剪连接是切断神经元之间不重要的连接。通道剪枝的目标是去除无用的通道,以便在实践中更容易加速。模型量化表示具有离散值的神经网络中的权重或激活,用于压缩和计算加速。具体来说,二值化方法,只有1位的值可以通过高效的二进制操作极大地加速模型。张量分解通过利用权重中的冗余性和低秩性来减少参数或计算。知识蒸馏利用较大的模型来教授较小的模型,这提高了较小模型的性能。这些方法的性能通常取决于给定的预训练模型。基础操作和架构的改进将使他们走得更远。
随着在嵌入式设备上部署神经网络的需要,近年来提出了一系列紧凑的模型。Xception利用深度卷积运算来更有效地使用模型参数。MobileNets是一系列轻量级的基于深度可分离卷积的深度神经网络。MobileNetV2 提出了反向残差块,MobileNetV3 进一步利用了AutoML技术以更高的准确性获得更好的性能。ShuffleNet引入了通道洗牌操作来改善通道组之间的信息流交换。ShuffleNetV2 进一步考虑了目标硬件上的实际速度,用于紧凑的模型设计。尽管这些模型在很少错误率的情况下获得了很好的性能,但特征图之间的相关性和冗余性从未得到很好的利用。此外,也有一些研究CNN在GPU上的推理效率的工作。SqueezeNext 使用分解卷积来降低残差块的复杂度,这是一种张量分解技术。RegNet观察到GPU速度与激活密切相关,并为GPU高效模型提供了经验指导。实际上,RegNet的结构基本遵循ResNet的结构。相反,本文提出了一种新的结构,可以用来改进现有的大多数CNN,包括RegNet。
(一)、CPU-Efficient GhostNet
深度卷积神经网络通常包含大量的卷积,导致巨大的计算成本。虽然最近的作品如MobileNet和ShuffleNet 已经引入了深度使用较小的卷积(浮点运算)来构建高效的CNN,但是剩下的11个卷积层仍然会占用相当大的内存和FLOPs。主流CNN计算的中间特征图中存在广泛的冗余,建议减少所需的资源,即用于生成中间特征图的卷积滤波器。在实际操作中,给定输入数据
X
∈
R
c
∗
h
∗
w
X\in R^{c*h*w}
X∈Rc∗h∗w,其中c为输入通道数,h和w分别为输入数据的高度和宽度,任意一个卷积层产生n个特征映射的操作可以表示为:
其中为卷积运算,b为偏置项,Y为n个通道的输出特征图,f为这一层的卷积。在这个卷积过程中,所需要的FLOPs数量可以计算为nhwck*k,由于滤波器的数量n和通道数c通常非常大(如256或512),所以FLOPs的数量往往高达数十万。由上式可知,输入和输出特征图的维数明确决定了需要优化的参数(在f和b中)的个数。卷积层的输出特征映射往往包含较多的冗余,其中一些可能是相似的。因此不需要逐个生成大量的冗余特征映射,假设输出特征映射是由一些廉价操作生成的少量内在特征映射的伪影。这些固有特征映射通常是较小的尺寸和产生的普通卷积滤波器。具体地说,利用初级卷积产生了m个本征特征映射
其中
f
′
∈
r
c
∗
k
∗
k
∗
m
f^{'}\in r^{c*k*k*m}
f′∈rc∗k∗k∗m为所用滤波器,为简单起见省略了偏置项。filter size, stride, padding等超参数与普通卷积中的超参数相同,以保持输出特征图的空间大小(即h和w)一致。为了进一步得到想要的n个特征映射,建议对Y中的每个固有特征进行一系列廉价的操作,按照以下函数生成s个伪特征
其中
y
i
′
y^{'}_i
yi′是
y
′
y^{'}
y′中的第i个固有特征映射,
Φ
i
,
j
Φ_{i,j}
Φi,j的j是生成第j个伪特征映射
y
i
,
j
y_{i,j}
yi,j的第j个(除了最后一个)廉价操作。这里
y
i
′
y^{'}_i
yi′可以有一个或多个伪特征映射
{
y
i
j
}
j
=
1
s
\{yij\}^{s}_{j=1}
{yij}j=1s。
Φ
i
,
j
Φ_{i,j}
Φi,j可以进行局部特征聚合和调整,生成伪影特征图。最后一个
Φ
i
,
s
Φ_{i,s}
Φi,s是用于保留固有特征映射的身份映射,如图2(b)所示。利用Eq. 3,我们可以得到n = m·s特征映射Y = [y11, y12,···,yms]作为C-Ghost模块的输出数据,如(b)所示。请注意,在每个通道上运行的操作Φ的计算成本比普通的卷积要低得多。在实际操作中,C-Ghost模块中可能会有几种不同的操作,如33和55线性核,将在实验部分进行分析
与现有方法的区别。提出的C-Ghost模块与现有的高效卷积方案有很大的不同。i)与C-Ghost模块中的主卷积可以定制内核大小。
ii)现有方法采用点卷积处理跨通道特征,再采用深度卷积处理空间信息。而CGhost模块则采用普通的卷积,首先生成少量的本征特征映射,然后利用廉价的线性运算来增强特征和增加通道。
iii)在以往的高效架构中,处理每个特征图的操作仅限于深度卷积或移位操作,而C-Ghost模块中的线性运算可以具有较大的多样性。
iv)此外,在C-Ghost模中,将恒等映射与线性变换并行,以保持固有特征映射。
网络复杂性分析 :C-Ghost模块生成与普通卷积层相同数量的特征映射,因此可以很容易地将C-Ghost模块集成到现有设计良好的神经体系结构中,以降低计算成本。在这里进一步分析了使用C-Ghost模块在内存使用和理论加速方面的收益。例如,有1个恒等映射,
m
⋅
(
s
1
)
=
n
/
s
⋅
(
s
−
1
)
m·(s 1) = n/s·(s-1)
m⋅(s1)=n/s⋅(s−1)线性操作,每个线性操作的平均核大小等于dd。理想情况下,n·(s-1)线性操作可以有不同的形状和参数,但会阻碍在线推理,特别是考虑到硬件的效用。因此,建议在一个C-Ghost模块中使用相同大小的线性操作(例如,33或5*5)来高效实现。C-Ghost模块升级普通卷积的理论加速比为:
其中d ×d与k ×k具有相似的数量级,同理,压缩比可以计算为:
这等于利用提出的C-Ghost模块的加速比。
构建轻量级C-GhostNet
C-Ghost瓶颈(G-bneck)。如下图所示,C-Ghost瓶颈看起来类似于ResNet 中的基本残差块,其中集成了几个卷积层和跳连接。提出的伪瓶颈主要由两个堆叠的C-Ghost模块组成。第一个C-Ghost模块作为扩展层,增加通道数量。我们把输出通道数与输入通道数之比称为膨胀比。第二个C-Ghost模块减少了通道数量,以匹配跳链接。然后连接这两个C-Ghost模块的输入和输出之间的快捷方式。除了第二层C-Ghost后不使用ReLU外,每层之后都应用批处理归一化(BN) 和ReLU,上面描述的C-Ghost瓶颈是针对stride=1的。对于stride=2的情况,通过下采样层实现跳连接,并在两个C-Ghost模块之间插入一个stride=2的深度卷积。在实际应用中,C-Ghost模块的主要卷积是逐点卷积,以提高效率
基于C-Ghost瓶颈块,提出了C-GhostNet,如表1所示。基本上遵循MobileNetV3的架构,因为它的优越性,并将MobileNetV3中的瓶颈块替换为C-Ghost瓶颈块。C-GhostNet主要由一堆C-Ghost瓶颈块组成,以C-Ghost模块为构建模块。第一层是带有16个滤波器的标准卷积层,然后是一系列通道逐渐增加的C-Ghost瓶颈。根据输入特征映射的大小,这些C-Ghost瓶颈被分组到不同的阶段。所有的C-Ghost瓶颈都应用了stride=1,除了每个阶段的最后一个是stride=2。最后通过全局平均池化和卷积层将特征映射转换为1280维的特征向量进行最终分类。挤压和激发(SE)模块也应用于一些伪瓶颈中的剩余层,如表1所示。与MobileNetV3相比,由于延迟较大,不使用hard-swish非线性函数。该体系结构提供了一个基本的设计参考,但进一步的超参数调优或基于伪模型的自动体系结构搜索将进一步提高性能。
尽管表1中给出的体系结构已经可以提供低延迟和有保证的准确性,但在某些场景中,可能需要更小、更快的模型,或者对特定任务要求更高的准确性。为了根据需要定制网络,可以简单地在每一层均匀地乘以一个因子α。这个因子α被称为宽度倍增器,因为它可以改变整个网络的宽度。用宽度乘数α表示C-GhostNet-α×.。宽度乘法器可以将模型的大小和计算代价控制在大约
α
2
α^2
α2范围内。通常较小的α会导致较低的延迟和较低的性能,反之亦然。
(二)、GPU-Efficient GhostNet
G-Ghost Stage:
虽然我们的C-GhostNets可以在保持高性能的同时保持准确度不变,但用于生成更多特性的廉价操作在GPU上仍然不是非常廉价和高效。具体来说,深度卷积的运算强度通常较低,即计算与内存运算的比率,不能充分利用并行计算能力。如何在精度和GPU延迟之间取得更好的平衡,仍然是一个被忽视的问题。
除了FLOPs和参数数量,Radosavovic等人引入了activations来测量网络的复杂性,即所有卷积层的输出张量的大小。GPU上的延迟更多的是与activations相关,而不是与FLOPs相关,也就是说,如果可以移除部分feature map,减少activations,就可以以高概率减少GPU上的延迟。另一方面,CNN的主体通常由几个分辨率逐渐降低的阶段组成,每个阶段由一堆块组成。我们的目标是减少阶段冗余,这可以大大减少中间特性,从而减少相关的计算成本和内存使用。
常用的骨干网通常由三部分组成:茎、主体和头部。网络体消耗了大量的计算量和参数,而茎和头相对较轻。因此,我们的目标是简化网络主体,以实现高效推理。网络主体由几个阶段组成,这些阶段处理分辨率逐渐降低的特征图。对于CNN的每个阶段,有n层(如AlexNet)或n块(如ResNet),记为
L
1
,
L
2
,
⋅
⋅
⋅
,
L
n
{L_1,L_2,···,L_n}
L1,L2,⋅⋅⋅,Ln。给定输入特征映射X,第一个块和最后一个块的输出分别为:
为了得到输出特征
Y
n
Y_n
Yn,需要执行一系列块来对输入数据进行处理和聚合,即需要大量的计算成本。
作者认为,不是所有来自上一个块的特征
Y
n
Y_n
Yn都需要使用如此昂贵的多个块的计算来产生。在下图中,展示了ResNet34第三阶段的第一个块和最后一个块的特征映射。虽然最后一个块的特征再经过5个块的处理,但其中一些特征与第一个块非常相似,这意味着这些特征可以通过简单的低级特征变换得到。
一般情况下,我们将深度特征分为复杂特征和虚特征,其中复杂特征仍然需要一系列的块来生成,而虚特征则更容易从浅层特征中获得。对于输出特征
X
∈
R
c
∗
h
∗
w
X\in R^{c*h*w}
X∈Rc∗h∗w的n块阶段,其中c, h, w分别为通道数,高度和宽度,我们将其复杂特征记为
Y
n
c
∈
R
(
1
−
λ
)
c
∗
h
∗
w
Y^c_n\in R^{(1-λ)c*h*w}
Ync∈R(1−λ)c∗h∗w,伪征记为
Y
n
g
∈
R
(
1
−
λ
)
c
∗
h
∗
w
Y^g_n\in R^{(1-λ)c*h*w}
Yng∈R(1−λ)c∗h∗w,其中λ为伪特征之比。用n个块生成复杂的特征:
其中块
l
2
′
,
⋅
⋅
⋅
,
l
n
′
l^{'}_2,···,l^{'}_n
l2′,⋅⋅⋅,ln′是薄块。如上所述,简单特征
y
n
g
y^g_n
yng与第一个块的特征
Y
1
Y_1
Y1相似,可以看作是
Y
1
Y_1
Y1的伪特征。我们将特征
Y
1
Y_1
Y1转化为
y
n
g
y^g_n
yng,并使用廉价的操作C:
其中廉价的操作C可以简单地是11卷积,33卷积,等等。通过将
y
n
c
y^c_n
ync和
y
n
g
y^g_n
yng串联起来,我们可以得到该阶段的最终输出:
下图(b)给出了一个λ = 0.5时G-Ghost阶段的插图。
内在特征聚合:
提出的G-Ghost阶段通过利用第一个块和最后一个块之间的冗余,以低成本的操作生成部分特征。这样与传统的CNN阶段相比,计算成本可以大大降低(上图(a))。虽然简单的特征可以通过廉价的操作近似生成。为了弥补信息的不足,作者提出利用复杂路径中的中间特征来增强廉价运算的表示能力。从G-Ghost阶段的复杂路径中,可以收集到中间特征
Z
∈
R
c
′
∗
h
∗
w
=
[
Y
2
c
,
Y
3
c
,
⋅
⋅
⋅
,
Y
n
c
]
Z \in R^{c{'} *h*w} = [Y^c_2,Y^c_3,···,Y^c_n]
Z∈Rc′∗h∗w=[Y2c,Y3c,⋅⋅⋅,Ync],其中
c
′
c^{'}
c′为通道总数。这些从多层中提取的中间特征可以为低成本操作提供丰富的补充信息。如图6所示,首先将Z变换为与
y
n
g
y^g_n
yng相同的域,然后将变换后的信息混合到
y
n
2
y^2_n
yn2中:
其中τ为变换函数。为了不引入太多额外的计算,保持变换τ简单。它可能有各种可能,这里我们提供一个简单的设计。我们首先应用全局平均池化得到聚合特征
z
∈
R
c
′
=
p
o
o
l
i
n
g
(
z
)
z\in R^{c^{'}} = pooling (z)
z∈Rc′=pooling(z)。一个全连接层被应用到将z转换成与
y
n
2
y^2_n
yn2相同的域。
其中W和b分别为权重和偏置。如上图©所示,在G-Ghost阶段采用混合操作进行内在特征聚合。
提出的G-Ghost阶段和现有的高效块设计(例如,CondenseNet V2)都利用了特征映射中的冗余来降低CNN的复杂性。它们有很多不同,主要包括1)CondenseNet V2侧重于同一层的通道冗余,而G-Ghost减少不同层或块的冗余;
2) CondenseNet V2引入了一种稀疏特征再激活(sparse feature reactivation, SFR)模块用于特征在块中重用,G-Ghost提出了一种新的结构来改进CNN的stage结构;
3) CondenseNet V2在每个SFR模块中采用稀疏连接,对内存绑定设备不友好,而G-Ghost使用普通卷积,有效减少激活,使得gpu推断速度更快。
4) G-Ghost中的混合操作利用全局池化(带有FC层)来聚合中间层的信息。CondenseNet V2利用学习到的稀疏连接从前面的层中选择重要的特征。
与现有的高效网络架构(如DenseNet)相比,本文提出的G-Ghost阶段主要区别在于
1)现有的DenseNet是一种特定的网络架构,而G-Ghost阶段是一种通用的结构,可以应用于简化大部分的CNN;
2) DenseNet的特征维数随着层的加深而增加,而G-Ghost降低了中间层的特征维数,并保持输出不变;
4)在DenseNet中,将之前block的feature map拼接到每一层的输出中,而G-Ghost利用一种廉价的操作将feature map转换并拼接到阶段的最终输出中(不是每一层);
4)在G-Ghost阶段引入混合运算对中间层信息进行聚合。
通过本文提出的G-Ghost stage对原有的CNN结构进行升级,可以大大降低计算和存储成本。折减率与原级结构、映射比λ、操作成本和混合操作有关。给定一个有n个块的阶段,第i个块的FLOPs为
f
i
f_i
fi,参数分别为
p
i
(
i
=
1
,
⋅
⋅
⋅
,
n
)
p_i (i = 1,···,n)
pi(i=1,⋅⋅⋅,n)。G-Ghost阶段将原始n块的FLOPs分别减小为
f
1
、
(
1
−
λ
)
f
2
f_1、(1-λ)f_2
f1、(1−λ)f2和
{
(
1
−
λ
)
2
f
i
}
i
=
3
n
\{(1-λ)^2 f_i\} ^n_{ i=3}
{(1−λ)2fi}i=3n。参数分别简化为
p
1
,
(
1
−
λ
)
p
2
p_1,(1-λ)p_2
p1,(1−λ)p2和
{
(
1
−
λ
)
2
p
i
}
i
=
3
n
\{(1-λ)^2 p_i\} ^n_{i=3}
{(1−λ)2pi}i=3n。引入的廉价操作具有
f
c
f ^c
fc FLOPs和
p
c
p ^c
pc参数。FLOPs折减率及参数为:
从上式可以看出,当n为3时,FLOPs或参数的减少是明显的,所以我们建议在2块以上的阶段使用G-Ghost阶段。一般情况下。伪映射比λ越大,折减比越大。如果伪映射比过大,网络的表示能力就会弱很多。因此,我们需要在计算成本和性能之间进行权衡。
我们还使用G-Ghost stage构建了一个新的轻量级网络,命名为G-GhostNet。上一节中提到的C-GhostNet包含大量深度卷积,它是在FLOPs约束下设计的,对GPU不友好。为了开发一个在GPU设备上高效推理的轻量级模型,使用混合操作的G-Ghost stage构建了G-GhostNet。我们遵循C-GhostNet的基本结构,用G-Ghost stage对各stage进行改造,如下表所示。在G-Ghost的所有阶段中,均采用1*1卷积作为廉价运算,且ghost比λ设为0.4。将残差瓶颈的扩展比设为3,并对每个区块应用SE模块。采用简单的ReLU作为激活函数,提高了激活效率。我们将G-GhostNet-α表示为宽度倍率为α的G-GhostNet模型。
三、实验比较
(一)、C-GhostNet
我们在文章开头展示了一些类似的特征映射对,可以使用一些高效的线性操作来有效地生成。这里我们首先进行一个消融实验,观察原始特征映射与生成的伪特征映射之间的重建误差。以图中的三对(红色、绿色和蓝色)为例,利用ResNet50的第一个残差块提取特征。我们以左边的特征作为输入,左边的特征作为输出,利用一个小的深度卷积滤波器来学习它们之间的映射,即它们之间的线性运算Φ。卷积滤波器d的大小为1 ~ 7,不同d的每对的MSE(均方误差)值如表3所示。
从上表可以发现,所有的MSE值都非常小,这说明深度神经网络中的特征映射之间存在很强的相关性,这些冗余的特征映射可以由几个本征特征映射生成。相似现象在大多数图片中都存在。
提出用于高效深度神经网络的Ghost Module有两个超参数,分别是用于生成m = n/s的内在特征映射的s和线性运算的核大小d*d。
上图为不同d的C-Ghost模块在CIFAR-10上的性能.首先,固定s = 2并调优{1,3,5,7}中的d,并在表4中列出CIFAR-10验证集上的结果。我们可以看到,提出的d = 3的C-Ghost模块比较小或较大的模块性能更好。这是因为大小为1×1的核不能在feature map上引入空间信息,而更大的核(如d = 5或d = 7)会导致过拟合和更多的计算。因此,为了提高实验的有效性和效率,我们在接下来的实验中采用d = 3。
上图为不同深度的C-Ghost模块在CIFAR-10上的性能。在研究了C-Ghost模块中使用的内核大小之后,我们保持d = 3,并将其他超参数s调优在{2,3,4,5}范围内。实际上,s与由此产生的网络的计算成本直接相关,即s越大,压缩和加速比就越大。从表5的结果可以看出,当增加s时,FLOPs明显降低,精度逐渐降低,这与预期相符。特别是当s = 2,我们的方法甚至比原始模型的性能稍好,这表明了我们提出的C-Ghost模块的优越性。
比较最先进的小型网络的分类精度,权重的数量和FLOPs在ImageNet数据集。由于TFLite中不支持shuffle操作,或者没有可用的公共代码,因此没有报告几个模型的延迟。
在MS COCO数据集上进行了目标检测实验。使用trainval35k作为训练数据,并报告最小分割的平均精度(mAP)结果,。我们的框架为单阶段的RetinaNet ,C-GhostNet充当骨干特征提取器。我们使用SGD对所有模型进行了12个epoch的训练.
(二)、G-GhostNet
下图为G-Ghost在CIFAR10的主要结果。
廉价操作的重要性。跨层廉价运算是该方法的关键之一。评估廉价操作的重要性,
1)用身份映射替换它,
2)删除它,并从最后一层产生删除的鬼特征。从下表可以看出,无论是使用恒等映射还是移除廉价操作,性能都不如使用11卷积作为廉价操作。
廉价操作的类型。对于这种廉价的操作,有多种选择,例如具有不同内核大小的卷积。我们测试了不同类型的廉价操作,其中映射比λ设置为0.5,结果如表14所示。33 Conv获得了最好的精度。包括更多的参数,如5 5 Conv不能带来更高的精度。由于11卷积具有较好的性能,且具有较底的误检率和参数,因此在后续的实验中,除非有特别说明,我们都将其作为一种廉价的操作。
低成本操作比率。λ是控制廉价特征比率的超参数,并直接影响压缩比。我们使用1*1卷积作为廉价操作和调谐λ在[0.3,0.4,0.5,0.6,0.7]。结果如图11所示。随着λ的增大,误差大幅减小,而精度逐渐下降。我们通常设置λ为0.5,除非另有规定。
ResNet在ImageNet上的结果。
RegNet在ImageNet上的结果。
我们选择典型的单级检测器RetinaNet 作为基本框架,并使用提出的G-Ghost作为骨干特征提取器的替代。所有模型均采用1个学习率计划(12个epoch)进行训练。表19显示了COCO minival的结果。我们的G-Ghost阶段可以将GPU速度从21.9帧/秒提高到25.9帧/秒,但只需要降低很小的mAP。另一方面,G-Ghost- regnetx3.2 gf显著抑制了ResNet50和RegNetX-3.2GF-0.75,同时获得了更快的推理速度,证明了我们的G-Ghost骨干的有效性和泛化能力。
我们还将G-Ghost-RegNet与其他现代CNN结构进行比较,如RegNet 、ResNet (He等人,2016)、ResNeXt 、DenseNet 、InceptionV3和EfficientNet。为了公平比较,effentnet在相同的设置下进行训练。具体结果如表18所示。我们的G-Ghost-RegNet实现了最优的准确性- flops权衡和准确性-延迟权衡(图14)。注意,尽管efficiency net在准确性和FLOPs之间有一个很好的权衡,但它需要很大的GPU延迟,这与我们在介绍中分析的一致。
四、总结
在本文中,我们提出了GhostNet系列来加速卷积神经网络在异构设备(包括CPU和GPU)上的推理。首先,我们提出了一个新的CGhost模块来构建cpu高效的神经结构。基本的C-Ghost模块将原始卷积层分为两部分,利用较少的滤波器生成多个固有特征映射。然后,进一步应用一定数量的廉价操作来高效生成伪特征图。在基准模型和数据集上进行的实验表明,使用提出的新模块构建的C-GhostNet在效率和准确性方面优于最先进的便携式神经体系结构。
为了提高卷积神经网络的GPU效率,进一步引入了一种新的G-Ghost阶段。除了减少失败率之外,gpu高效的CNN还应该关注运行时内存并避免琐碎的计算。G-Ghost阶段研究卷积结构中的特征冗余交叉层。一个阶段的输出特征分为两部分:内在特征和伪特征。利用原始阶段生成的固有特征具有较少的通道,利用GPU高效的廉价运算从固有特征中生成伪特征。将继承在中间固有特征中的信息叠加到伪特征中,提高了伪特征的表示能力。提出的G-Ghost阶段可以用来简化大多数主流CNN。在各种网络和数据集上的实验证明了G-Ghost stage在gpu上的有效性。