PP-LCNet 原理解析

paper:PP-LCNet: A Lightweight CPU Convolutional Neural Network

official implementation:PaddleClas/pp_lcnet.py at release/2.5 · PaddlePaddle/PaddleClas · GitHub 

third-party implementation:pytorch-image-models/mobilenetv3.py at main · huggingface/pytorch-image-models · GitHub

本文的创新点

尽管有很多轻量网络,但由于MKLDNN的限制,这些网络的速度在使用了MKLDNN的英特尔CPU上并不理想。本文设计了一个针对Inter-CPU的网络PP-LCNet,效果超过了大多数SOTA轻量模型。

PP-LCNet 原理解析_第1张图片

方法介绍

虽然有很多轻量模型在基于ARM架构的设备上推理速度很快,但很少有网络考虑到在Inter-CPU上的速度,特别是当启用MKLDNN等加速策略时。在ARM设备上时,许多可以提升精度的方法并不会增加推理时间,但当迁移到Inter-CPU的设备上时,结果可能会不一样。本文总结了一些在几乎不增加推理时间的前提下提高模型精度的方法。我们使用MobileNet v1中的DepthSepConv作为basic block,其中不包含shortcut,这样就没有concat或elementwise-add等操作,这些操作不仅会降低模型的推理速度,而且不会提高小模型的精度。此外,这个block被英特尔加速库深度优化过,推理速度比其它的轻量模块比如inverted-block或shufflenet-block快。我们将这些block堆叠成一个基础网络,然后结合一些现有的技术就得到了PP-LCNet。

Better activation function

激活函数的性能往往决定了网络的性能,由Sigmoid变为ReLU,网络的性能有了很大的提高。最近更多的激活函数被提出,EfficientNet中使用Swish激活函数获得了更好的性能后,MobileNet v3的作者将其升级为H-Swish从而避免了大量的指数操作。本文也将基础网络中的ReLU换成H-Swish,性能得到了很大的提升,而推理时间几乎没有增加。

SE modules at appropriate positions

SE模块自提出以来已被大量网络使用,但在Inter-CPU上,SE模块会增加推理时间,因此不能在整个网络中都使用它。作者通过大量实验发现将SE模块用于网络的末端时,它可以发挥更好的作用,因此本文只将SE模块用在网络尾端的block中,获得了更好的精度-速度的平衡。和MobileNet v3一样,SE模块两层的激活函数分别为ReLU和H-Sigmoid。

Larger convolution kernels

卷积核的大小也会影响网络的性能。MixNet中作者分析了不同不同大小的卷积核对网络性能的影响,最终在网络的同一层中使用不同大小的卷积核。但这种混合降低了网络的推理速度,因此本文在同一层只使用一种大小的卷积核,并确保在低延迟和高精度的前提下才使用大卷积核。通过实验,作者发现和使用SE模块位置一样,只在网络的尾部用5x5卷积替换3x3卷积获得了和整个网络都使用5x5卷积差不多的性能 ,因此最终只在网络尾部才使用5x5卷积。

Larger dimensional 1x1 conv layer after GAP

在PP-LCNet中,GAP后的输出维度很小,后面直接添加分类层会丧失特征的组合。为了增加网络的拟合能力,作者在GAP后增加了一个1280维的1x1卷积,增加了模型的容量同时推理时间的增加可以忽略不计。

实验结果

不同尺度的PP-LCNet在ImageNet上的精度和延迟如表2所示

PP-LCNet 原理解析_第2张图片

和其它轻量模型的对比如表3所示

 PP-LCNet 原理解析_第3张图片

在目标检测模型PicoDet中,PP-LCNet和MobileNet v3作为backbone,模型的mAP和延迟对比如表4所示

PP-LCNet 原理解析_第4张图片 

在语义分割模型Deeplabv3+中,PP-LCNet和MobileNet v3作为backbone,模型的mIoU和延迟对比如表5所示

PP-LCNet 原理解析_第5张图片 

 

你可能感兴趣的:(Lightweight,Backbone,Classification,深度学习,pytorch,人工智能,图像分类,轻量模型)