PP-LCNet: A Lightweight CPU Convolutional Neural Network
PP-LCNet Baidu
论文链接: https://arxiv.org/abs/2109.15099
一、 Problem Statement
大部分目前的轻量型网络都是基于ARM结构设备所开发的,很少网络会考虑到在Intel CPU上的运行速度。因此本文提出了三个问题:
- 怎么样提升网络,使得可以学习更强的特征表示能力,且不增加迟滞性。
- 什么东西可以在CPU上,使得一些轻量化模型的精度可以提升。
- 怎么样有效地结合不同的策略来进行基于CPU的轻量化模型的设计。
二、 Direction
基于MKLDNN(intel开发的开源项目,针对cpu上运行神经网络做了一些并行优化),提出一些方法提升精度的同时不增加推理时间。同时本文也提出了一些方法来获得精度与速度更好地平衡。
- Better activation funtion
- SE modules at appropriate positions
- Larger convolution kernels
- Larger dimension 1x1 conv layer after GAP
三、 Method
先来看一下整体的网络结构:
整体网络比较简单,使用了串联结构。同时使用了深度可分离卷积作为Basic block。这个block没有shortcuts连接,因此没有额外的拼接或者相加的操作。这些操作不仅会导致推理速度的下降,而且在小模型上不会提升精度。 从以下策略,对这个BaseNet网络进行优化。
1. 更好的激活函数
MobileNet v3中提出了H-Swish, 本文也借鉴使用H-Swish。
2. 在正确的位置使用SE 模块
SE模块是一个通道注意力模块,也在MobileNet v3中使用了。因此,在Interl CPUs上,SE 模块稍微增加了一点推理时间,因此本文并没有在所有的网络层都使用SE模块。通过实验发现: 在网络的末尾,使用SE模块,会有较好的效果。因此,本文只在网络的末尾使用了SE模块。
3. 使用较大的卷积核
卷积核的大小通常会影响最后的网络性能。作者实验发现,在网络的末尾使用5x5的卷积核替换3x3会有比较好的效果,而且不需要改变所有网络层的卷积核大小。
4. 在GAP层之后,增大1x1卷积的通道数
作者发现,在GAP层之后,网络的维度比较小,直接用于分类层会丢失一些特征组合。因此,使用了1280通道数的1x1卷积层,提升模型的表征能力,同时只提升一点点推理时间。
四、 Conclusion
提出了一些策略,设计了一个网络,提升了轻量型网络在Intel CPUs上的性能。