Paper:PP-PicoDet: A Better Real-Time Object Detector on Mobile Devices
official implementation:https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.7/configs/picodet
Backbone
作者通过实验发现,ShuffleNetV2在移动设备上比其他网络更加鲁棒,为了进一步提升backbone的性能,作者在ShuffleNetV2的基础上借鉴了PP-LCNet(具体介绍见PP-LCNet 原理解析)的一些方法进行改进,构建了一个新的骨干网络Enhanced ShuffleNet (ESNET)。下图描述了ES Block的细节
具体而言,加入了SE module,和MobileNetV3一样,SE module两层激活函数分别为ReLU和H-Sigmoid。channel shuffle提供了通道的信息交换但会导致融合信息的丢失,为了解决这个问题,当stride=2时,加入了深度可分离卷积来整合不同通道的信息。GhostNet(具体介绍见GhostNet(CVPR 2020) 原理与代码解析)提出的Ghost module可以用更少的参数生成更多的特征图以提高网络的学习能力,作者在stride=1的block中加入Ghost module进一步提高ESNet的性能。
Neck
neck部分采用CSP-PAN结构,在原始的CSP-PAN中,每个输出特征图的通道数和从backbone得到的输入是一样的,这对于移动设备来说计算成本太大,本文通过1x1卷积将输入C3~C5的通道数先降到最小的通道数即96。此外本文多添加了一层输出特征即P6来检测更多的对象。同时,除了1x1外的所有卷积都改成深度可分离卷积,并且将卷积核扩大到5x5来增大感受野。完整的结构如图2所示
Head
检测头采用coupled head的形式,卷积也改成5x5的深度可分离卷积。
Label Assignment
标签分配采用SimOTA,原始的SimOTA采用CE loss和IoU loss的加权和来计算cost matrix,为了对齐cost和最终的目标函数,这里用Varifocal loss和GIoU loss的加权和来计算cost matrix,如下,其中加权系数 \(\lambda=6\)。
Loss
分类损失采用Varifocal loss,回归损失采用GIoU loss和Distribution loss,如下
Other strategies
激活函数H-Swish的计算更多对移动设备更友好,ESNet中的所有激活函数都由ReLU改成H-Swish。
与linear step learning rate decay不同,Cosine learning rate使学习率呈指数衰减。余弦学习率平稳下降,有利于训练过程,特别是在batch size较大的情况下,因此本文采用余弦学习了下降策略。
过多的数据增强会增加正则化效果,使轻量级模型的训练更难收敛。因此,本文只使用random flip,random crop和multi-scale resize的数据增强。
PP-PicoDet V2
PaddleDetection中目前是V2版本,但官方没有给出技术报告,具体的改进大概是一下几点
-
backbone由ESNet替换为LCNet
-
neck由CSP-PAN替换为LCPAN
-
标签分配由SimOTA替换为ATSS+TaskAlignedAssigner
参考
ShuffleNet v2
PP-LCNet 原理解析
SENet: Squeeze-and-Excitation Networks
GhostNet(CVPR 2020) 原理与代码解析
PANet(CVPR 2018)原理与代码解析
OTA: Optimal Transport Assignment for Object Detection 原理与代码解读-CSDN博客
VarifocalNet: An IoU-aware Dense Object Detector(CVPR 2021)原理与代码解析-CSDN博客
Generalized Focal Loss 原理与代码解析_self.reg_max是啥-CSDN博客