最近在看ppocrv4相关的代码,看到里面运用了一种高效的backbone---PP-LCNet,目前这个模型有3个版本,V3网上没有相关解析也没有论文,我粗略查看了一下源码,运用的方法大致跟V2差不多,所以我在这里只解析V1和V2
PP-LCNetV1
PP-LCNetV1 的结构非常简单,以至于我们模型设计常用的跳跃连接都不使用,其结构主要由深度可分离卷积组成(深度卷积+逐点卷积),并结合SE通道注意力机制进行特征提取,不过SE模块做了一些加速处理,以提高在CPU端的计算效率,具体来说就是减少了全连接的层数,使用h-swish来近似代替复杂度更高的-sigmoid。V1的整体结构如下图所示。
可以看到V1 基本不用我们模型设计里的一些技巧操作,如拼接concat或逐元素elementwise-add相加,这些操作不仅会降低模型的推理速度,而且在小型模型上也不会提高准确度。由于整体结构相当简单,作者估计也担心精度太差,所以标配hard-switch激活函数。
PP-LCNetV2
V2在V1的基础上增加了当下较为流行的技巧---重参数化,整体结构如下图所示。
可以看到V2并不是所有block都用重参数,只用在最后2个Block,同时在最后一个block增加了残差连接,以及全系激活函数换回了relu,理由是有很大一部分硬件设施对于h-swish的加速不理想,虽然精度有提高,但速度下降很大,有点得不偿失。其中重参数模块中使用了多尺度卷积核,用于提取不同感受野的特征信息。
整体 PP-LCNet系列结构上的创新不大,主要是小修小改,瞄准点是速度快然后精度也不差,适用于CPU端模型的设计,如果是GPU端的话我比较推荐百度的HGNet系列模型。