PP-LCNet: A Lightweight CPU Convolutional Neural Network
- 提出了一个基于MKLDNN加速策略的轻量级CPU网络,命名为PP-LCNet,它提高了轻量级模型在多任务上的性能。
- 本文列出了可以在延迟几乎不变的情况下提高网络准确性的技术。通过这些改进,PP-LCNet在相同的分类推理时间下,准确率可以大大超过以前的网络结构。如下图所示,它优于最先进的模型。并且对于计算机视觉的下游任务,也表现非常出色,比如物体检测、语义分割等。
- 所有的实验都是基于PaddlePaddle实现的。PaddleClas提供代码和预训练模型。
- 比较不同移动系列模型的准确性-延迟。在批量大小为1且启用了MKLDNN的Intelr Xeonr Gold 6148处理器上测试的延迟,线程数量为10。
- PP-LCNet 在同样精度的情况下,速度远超当前所有的骨架网络,最多可以有 2 倍的性能优势!它应用在比如目标检测、语义分割等任务算法上,也可以使原本的网络有大幅度的性能提升。
Introduction
-
卷积神经网络(CNN)代表了大多数当前计算机视觉应用的主力,包括图像分类,对象检测,注意力预测,目标跟踪,动作识别,语义分割,显著对象检测和边缘检测。 -
随着模型特征提取能力的增加以及模型参数和触发器的数量变得更大,在基于ARM架构的移动设备或基于x86架构的CPU设备上实现快速推理变得困难。在这种情况下,许多优秀的移动网络被提出,但由于MKLDNN的限制,这些网络的速度在启用MKLDNN的英特尔CPU上并不理想。 -
在本文中,重新思考了基于Intel-CPU设计的轻量级网络模型元素。特别是,我考虑以下三个基本问题。
- (一)如何促进网络在不增加延迟的情况下学习更强的特征呈现。
- (二)轻量级模型在CPU上提高精度的要素有哪些。
- (三)如何在CPU上有效组合设计轻量级模型的不同策略。
-
本文的主要贡献是总结了一系列在不增加推理时间的情况下提高准确率的方法,以及如何将这些方法结合起来以获得更好的准确率和速度的平衡。 -
基于此,提出了几种设计轻量级CNN的通用规则,并为其他研究人员在CPU设备上构建CNN提供了新的思路。此外,它可以为神经架构搜索研究人员在构建搜索空间时提供新的思路,从而更快地获得更好的模型。 -
- PP-LCNet的详细视图。虚线框代表可选模块。茎部分使用标准的3×3卷积。DepthSepConv表示深度方向可分离卷积,DW表示深度方向卷积,PW表示点方向卷积,GAP表示全局平均池。
Related Works
-
为提高模型的能力,目前的工作通常遵循两种类型的方法。一种基于人工设计的CNN结构,另一种基于神经结构搜索(NAS)。 -
Manually-designed Architecture
-
VGG展示了一种构建非常深的网络的简单而有效的策略:堆叠具有相同维度的块。 -
GoogLeNet构造了一个Inception块,它包括4个并行操作:1×1卷积、3×3卷积、5×5卷积和max pooling。GoogLeNet让卷积神经网络足够轻便,然后越来越多更轻便的网络出现。 -
MobileNetV1用深度方向和点方向卷积代替了标准卷积,大大减少了模型的参数和FLOPs的数量。MobileNetV2的作者提出了Inverted block,进一步减少了模型的FLOPs,同时提高了模型的性能。 -
ShuffleNetV1/V2通过channel shuffle来交换信息,减少了网络结构不必要的开销。 -
GhostNet的作者提出了一种新颖的Ghost模块,可以用更少的参数生成更多的特征图,提高模型的整体性能。
-
Ghost Module是一种模型压缩的方法,即在保证网络精度的同时减少网络参数和计算量,从而提升计算速度(speed),降低延时(latency)。Ghost 模块可以代替现有卷积网络中的每一个卷积层。 -
通过对比分析ResNet-50网络第一个残差组(Residual group)输出的特征图可视化结果,发现一些特征图高度相似(如Ghost一般,下图中的三组box内的图像对)。
- 原论文的操作是推测CNN的强大特征提取能力和这些相似的特征图(Ghost对)正相关,不去刻意的避免产生这种Ghost对,而是尝试利用简单的线性操作来获得更多的Ghost对。
-
Ghost Module:*分为常规卷积、Ghost生成和特征图拼接三*步(如下图所示):
-
-
-
首先用常规卷积得到本征特征图(intrinsic feature maps)
Y
w
‘
?
h
‘
?
m
Y_{w^`*h^`*m}
Yw‘?h‘?m? ,这部分的运算量约等于
h
?
w
?
c
?
m
?
w
‘
?
h
‘
h*w*c*m*w^`*h^`
h?w?c?m?w‘?h‘(忽略偏置项)。
Y
‘
=
X
?
f
‘
Y^`=X*f^`
Y‘=X?f‘。 -
然后将
Y
‘
Y^`
Y‘每一个通道的特征图
y
i
、
y^、_i
yi、?,用 操
?
i
,
j
\phi_{i,j}
?i,j?作来产生Ghost特征图
y
i
j
y_{ij}
yij?。
-
y
i
j
=
?
i
,
j
(
y
i
‘
)
,
?
i
=
1
,
.
.
.
,
m
;
j
=
1
,
.
.
.
,
s
y_{ij}=\phi_{i,j}(y_i^`),\forall{i}=1,...,m;j=1,...,s
yij?=?i,j?(yi‘?),?i=1,...,m;j=1,...,s
-
最后将第一步得到的本征特征图和第二步得到的Ghost特征图拼接(identity连接)得到最终结果OutPut。
-
对线性操作
?
i
,
j
\phi_{i,j}
?i,j?的理解:论文中表示,可以探索仿射变换和小波变换等其他低成本的线性运算来构建Ghost模块。但是,卷积是当前硬件已经很好支持的高效运算,它可以涵盖许多广泛使用的线性运算,例如平滑、模糊等。 此外,线性运算
?
i
,
j
\phi_{i,j}
?i,j?的滤波器的大小不一致将降低计算单元(例如CPU和GPU)的效率,所以论文中实验中让Ghost模块中的滤波器size取固定值,并利用Depthwise卷积实现
?
i
,
j
\phi_{i,j}
?i,j? ,以构建高效的深度神经网络。 -
很明显,相比于直接用常规卷积,Ghost Module的计算量大幅度降低。
-
Neural Architecture Search
- 随着GPU硬件的发展,重点已经从手动设计的架构转移到自适应地执行特定任务的系统搜索的架构。大多数NAS生成的网络使用与MobileNetV2相似的搜索空间,包括EfficientNet,MobileNetV3,FBNet,DNANet,OFANet等等。
- MixNet提出在一层中杂交不同内核大小的深度方向卷积。NAS生成的网络依赖于手动生成块,如BottleNeck、Inverted-block等。本文的方法可以减少搜索空间,提高神经结构搜索的效率,并可能提高整体性能,这可以在未来的工作中进行研究。
Approach
-
虽然有许多轻量级网络在基于ARM的设备上推理速度很快,但很少有网络考虑到英特尔CPU上的速度,尤其是在启用MKLDNN等加速策略时。 -
许多提高模型精度的方法在ARM设备上不会增加太多的推理时间,但是,当切换到Intel CPU设备时,情况会略有不同。这里总结了一些方法,可以在推理时间增加很少的情况下提高模型的性能。这些方法将在下面详细描述。 -
使用MobileNetV1提到的DepthSepConv作为基本块。这个块没有shortcuts之类的操作,所以没有concat或elementwise-add之类的额外操作,这些操作不仅会减慢模型的推理速度,而且在小模型上也不会提高精度。而且这个块经过了Intel CPU加速库的深度优化,推理速度可以超越invertedblock或者shufflenet-block等其他轻量级块。 -
将这些块堆叠起来,形成一个类似于MobileNetV1的BaseNet。将BaseNet和一些现有技术结合成一个更强大的网络,即PP-LCNet。 -
Better activation function
- 激活功能的好坏往往决定了网络的性能。由于网络的激活函数由Sigmoid改为ReLU,网络的性能有了很大的提高。
- 近年来,出现了越来越多超越ReLU的激活函数。在EfficientNet使用Swish激活函数表现出更好的性能后,MobileNetV3的作者将其升级为HSwish,从而避免了大量的指数运算。此后,许多轻量级网络也使用这个激活功能。还把BaseNet里的激活功能从ReLU换成了H-Swish。性能有了很大的提升,而推理时间几乎没有变化。
-
SE modules at appropriate positions
- 自提出以来,SE模块已经被大量网络使用。这个模块也帮助SENet赢得了2017 ImageNet分类比赛。它在权衡网络通道以获得更好的功能方面做得很好,其速度提高版本也用于许多轻量级网络,如MobileNetV3。然而,在Intel CPUs上,SE模块增加了推理时间,因此不能将其用于整个网络。
- 事实上,做了大量的实验,观察到当SE模块位于网络的末端时,可以发挥更好的作用。只需将SE模块添加到靠近网络尾部的模块中。导致了更好的精度-速度平衡。与MobileNetV3一样,SE模块的两层的激活函数分别是ReLU和HSigmoid。
-
Larger convolution kernels
- 卷积核的大小通常会影响网络的最终性能。在MixNet中,作者分析了不同大小的卷积核对网络性能的影响,最终在网络的同一层中混合了不同大小的卷积核。
- 但是这样的混合减缓了模型的推理速度,所以尽量在单层中只使用一种大小的卷积核,并保证在低延迟、高精度的情况下使用较大的卷积核。通过实验发现,类似于SE模块的放置,在网络的尾部只用5×5的卷积核替换3×3的卷积核,会达到替换网络几乎所有层的效果,所以只在网络的尾部做了这个替换操作。
-
Larger dimensional 1 × 1 conv layer after GAP
- 在PP-LCNet中,GAP之后的网络输出维数很小。而直接追加最终分类层会丢失特征的组合。为了使网络具有更强的拟合能力,在最终的GAP层之后附加了一个1280维大小的1 × 1 conv(相当于FC层),这将允许在几乎不增加推理时间的情况下存储更多的模型。
-
通过这四个变化,本文的模型在ImageNet-1k上表现良好,下表列出了与英特尔CPU上的其他轻量级模型相比的指标。
- 最先进的轻量级网络在分类准确性方面的比较。在批量大小为1且启用了MKLDNN的Intelr Xeonr Gold 6148处理器上测试的延迟,线程数量为10。
Experiment
-
Implementation Details
- 为了公平比较,用PaddlePaddle重新实现了MobileNetV1,MobileNetV2,MobileNetV3,ShuffleNetV2,PicoDet和Deeplabv3+的模型。在4个V100 GPUs上训练模型,CPU测试环境基于批量为1且启用MKLDNN的Intelr Xeonr Gold 6148处理器。
-
Image Classification
- 对于图像分类任务,在ImageNet-1k上对PP-LCNet进行训练,ImageNet-1k包含128万幅训练图像和1000个类别的50k幅验证图像。
- 使用SGD optimizer,权重衰减设置为3e-5(大型模型为4e-5),动量设置为0.9,批量大小为2048。学习率根据余弦时间表进行调整,用于训练360个时期,具有5个线性预热时期。初始学习率设置为0.8。
- 在训练阶段,每幅图像被随机裁剪为224×224,并随机水平翻转。在评估阶段,首先沿短边将图像的大小调整为256,然后应用224 × 224大小的中间裁剪。下表显示了PP-LCNet的前1名和前5名验证准确性和不同量表的推断时间。
- 不同规模的PP-LCNet的指标,其中*表示使用SSLD蒸馏法对其进行训练。在批量大小为1且启用了MKLDNN的Intelr Xeonr Gold 6148处理器上测试的延迟,线程数量为10。
- 此外,当使用SSLD蒸馏方法时,模型的准确性可以大大提高。
-
Object Detection
- 对于对象检测任务,下表中的所有模型都在具有80个类别和118k图像的COCO-2017训练集上进行训练,并在具有5000个图像的COCO-2017验证集上使用单一尺度的通用COCO AP度量进行评估。
- COCO数据集上的对象检测结果,使用mAP@IoU=0.5:0.95 (%)测量。在批量大小为1且启用了MKLDNN的Intelr Xeonr Gold 6148处理器上测试的延迟,线程数量为10。
- 使用PaddleDection开发的轻量级PicoDet作为基线方法。上表显示了以PP-LCNet和MobileNetV3为骨干的对象检测结果。整个网络使用随机梯度下降(SGD)进行146K次迭代训练,使用分布在4个GPU上的224个图像的小批量。
- 学习速率表是从0.3开始的余弦,作为280个时期的基本学习速率。重量衰减设为1e-4,动量设为0.9。令人印象深刻的是,PP-LCNet主干在COCO上的mAP和推理速度相比MobileNetV3有了很大的提升。
-
Semantic Segmentation
- 对于语义分割任务,还在Cityscapes数据集上评估了PP-LCNet的能力,该数据集包含5000幅高质量的标记图像。使用PaddleSeg开发的DeeplabV3+作为基线方法,并将输出步幅设置为32。
- 通过随机水平翻转、随机缩放和随机裁剪来增加数据。随机刻度包含{0.5,0.75,1.0,1.25,1.5,1.75,2.0},裁剪后分辨率为1024 × 512。使用SGD优化器,初始学习率为0.01,动量为0.9,权重衰减为4e-5。使用幂为0.9的poly学习率计划。所有模型都在4个V100 GPUs上以32的批量进行80K次迭代训练。
- 使用MobileNetV3作为比较的主干。如下表所示,PP-LCNet-0.5x在mIoU上的性能比MobileNetV3-large-0.5x高2.94%,但推理时间减少了53ms。与更大的型号相比,PP-LCNet的性能也很强。以PPLCNet-1x为骨干时,model的mIOU比MobileNetV3-large-0.75x高1.5%,但推理时间减少了55ms。
- Cityscapes验证数据集上语义分割的性能。在批量大小为1且启用了MKLDNN的Intelr Xeonr Gold 6148处理器上测试的延迟,线程数量为10。
-
Ablation Study
- SE模块在不同位置的影响。SE模块是通道间的注意机制,可以提高模型的准确性。但如果盲目增加SE模块的数量,会降低模型的推理速度,因此如何在模型中适当增加SE模块是值得研究和探索的。
- 通过实验,发现SE模块会对网络的尾部产生较大的影响。在网络中的不同位置仅添加两个SE模块的结果呈现在下表中。该表清楚地表明,对于几乎相同的推断时间,添加最后两个块更有利。所以为了平衡推理速度,PP-LCNet只在最后两个块中加入了SE模块。
- SE模块在不同位置的消融实验。在批量大小为1且启用了MKLDNN的Intelr Xeonr Gold 6148处理器上测试的延迟,线程数量为10。
- large-kernel在不同位置的影响。虽然大内核可以提高准确性,但在网络中的所有位置添加它并不是最好的。
- 通过实验展示了正确添加大内核的一般规则。下表显示了5 × 5深度方向卷积增加的位置。1表示DepthSepConv中的深度方向卷积核为5 × 5,0表示DepthSepConv中的深度方向卷积核为3 × 3。从表中可以看出,类似于SE模块加入的位置,在网络尾部加入5×5卷积也更有竞争力。PP-LCNet选择了表中第三行的配置。
- 在批量大小为1且启用了MKLDNN的Intelr Xeonr Gold 6148处理器上测试的延迟,线程数量为10。
- 在PP-LCNet中,使用了4种不同的技术来提高模型的性能。下表列出了不同技术对PP-LCNet的累计增加量,
- 不同技术的增加对PP-LCNet-0.5x. Latency性能的影响在Intelr Xeonr Gold 6148处理器上测试,批量为1,启用MKLDNN,线程数为10。
- 下表列出了减少不同模块对PP-LCNet的影响。结合上表,H-Swish和大核可以在几乎不增加推理时间的情况下提高模型的性能。增加少量的SE模块可以进一步提高模型的性能。在GAP之后使用更大的FC层也将大大增加精度。同时,也许是因为这里涉及到了一个相对较大的矩阵,使用dropout策略可以进一步提高模型的精度。
- PP-LCNet-0.5x的性能对降低某项技术的影响。在批量大小为1且启用了MKLDNN的Intelr Xeonr Gold 6148处理器上测试的延迟,线程数量为10。
Conclusion and Future work
- 本文的工作总结了一些设计轻量级Intel CPU网络的方法,可以提高模型的准确性,同时避免增加推理时间。虽然这些方法是来自先前工作的现有方法,但是准确性和速度之间的平衡还没有通过实验总结。
- 通过大量的实验和这些方法的加持,提出了PPLCNet,它在大量的视觉任务上表现出更强的性能,并且具有更好的精度-速度平衡。此外,这项工作减少了NAS的搜索空间,还提供了更快地访问NAS的轻量级模型的可能性。未来,还将使用NAS来获得更快、更强的模型。
|