-
虽然有许多轻量级网络在基于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。