一、PP-LCNet: 一个轻量级的卷积神经网络
我们提出了一个基于MKLDNN加速策略的轻量级卷积神经网络,叫做PP-LCNet,他是一个能够用于多任务的轻量级模型。这篇论文提出了一些能在保持延迟不变的情况下提高模型准确率的方法。在这些优势的加持下,PP-LCNet与之前预测速度差不多的模型相比更加准确。对于计算机视觉的一些下流任务(指具体应用),比如目标检测、语义分割等,该模型效果也很好。我们的实验是基于PaddlePaddle实现的可以直接在飞桨查看相关的项目事例。
二、模型提出的原因
轻量级网络模型,主要从三个方面来进行考虑:
-
如何让模型在不提高延迟的情况下跟好的学习特征。
-
什么组件可以提高轻量级的网络的准确率
-
如何有效地集成那些为轻量级CPU网络设计的策略
三、模型整体结构
1、更好的激活函数的使用
一般而言,我们经常使用的激活函数不外乎为tanh relu sigmoid 还有bert中的gelu函数,这里我们使用了一种比较新颖的激活函数swich。
因为之前对于视觉不是很了解,这方面使用的激活函数也不是很熟悉,想对我而言还是比较新的函数了。
swish链接
在EfficientNet用 Swish激活函数展示出更好的性能后MobileNetV3将他升级到了H-Swish,进而减少了大量的指数运算。自那以后,许多轻量级网络也用了这个激活函数,我们也把我们基本网络中的RELU换成了H-Swish。性能提高了很多但预测时间基本没变。
2、SE模块
SE模块在他被提出后就被大量网络使用,他帮助SENet赢得了2017年的ImageNet图像分类大赛。他在调整网络的通道的权重以获取更好的特征信息方面很优秀,同时它的速度型版本也被一些网络,比如MobileNetV3使用。但是,在intelCPU上,他会提高预测时间,所以我们不能到处用,事实上我们做了很多实验,发现当SE模块放到最后的时候比较好。所以我们把他放到了我们网络的靠进末尾的地方,结果获得了很好的准确率和速度的平衡。和MobileNetV3一样,SE模块的两层激活函数分别是RELU,H-Sigmoid。
(SE模块放在网络最后部分效果比较好,在se层中使用的激活函数为relu和h-sigmoid)
3、更大的卷积核
卷积核的大小会影响到网络的性能,在MixNet中,作者分析了不同大小的卷积核对网络性能的影响,最后决定在**同一层的卷积中混合使用不同大小的卷积核。但是这样的混合使用会增加预测的时间,**所以我们决定在同一层卷积中用一种大小的卷积核,为了保证不会大量增加预测时间,我们也做了实验,发现在模型的最后将3x3卷积核换成5x5的效果比较好,所以我们只在模型的末尾作了这个替代。
4、GAP后更高维度的1x1卷积层
在我们的模型,GAP后面的维度很小,直接在他后面添加分类层会损失很多特征信息,为了增强模型的鲁棒性,我们在两者之间添加了1280维、大小为1x1的卷积核(和FC[全连接层]等价)这使得模型鲁棒性更好但只有一点的预测时间提高。