轻量检测模型PP-PicoDet解析

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博客


http://www.niftyadmin.cn/n/5305190.html

相关文章

C#和C++存储 和 解析 bin 文件

C 解析 bin 文件 // C 解析 bin 文件 #include <stdio.h>int main() {FILE *file; // 定义文件指针file fopen("example.bin", "rb"); // 打开二进制文件&#xff08;只读模式&#xff09;if (file NULL) {printf("无法打开文件\n");re…

【mujoco】Ubuntu20.04中解决mujoco报错raise error.MujocoDependencyError

【mujoco】Ubuntu20.04中解决mujoco报错raise error.MujocoDependencyError 文章目录 【mujoco】Ubuntu20.04中解决mujoco报错raise error.MujocoDependencyError1. 报错的具体情况2. 解决过程3. 其他问题3.1 ModuleNotFoundError: No module named OpenGL3.2 ModuleNotFoundEr…

中国-印尼双清专线,货物运输全搞定!

中国-印尼双清专线&#xff0c;货物运输全搞定&#xff01;✈️&#x1f4e6; 嗨&#xff0c;亲爱的小伙伴们&#xff01;有没有梦想过一条直达雅加达的通道&#xff0c;让您的货物畅通无阻&#xff1f;现在&#xff0c;中国-印尼双清专线为您提供一站式&#xff0c;让我们一起…

Qt6学习笔记:对象树

使用QObject及其子类创建的对象是以对象树的形式来组织的。创建一个QObject对象时若设置一个父对象&#xff0c;它就会被添加到父对象的子对象列表里&#xff0c;一个父对象被删除时&#xff0c;其全部的子对象都会自动删除。QObject类的构造函数里有一个参数用于设置对象的父对…

宠物猫可能塑造人类肠道中的抗生素耐药性和益生菌

谷禾健康 宠物猫——伴侣——耐药性 宠物可以为人类的身心健康做出贡献&#xff0c;它们通常与主人生活得很亲密&#xff0c;有时甚至睡一张床。然而&#xff0c;宠物与其主人之间的密切接触所带来的潜在生物安全风险常常被忽视。狗和猫是很受欢迎的宠物&#xff0c;也是人畜共…

【Java基础篇】 try中return A,catch中return Bfinally中return C,最终返回值是什么?

try中return A&#xff0c;catch中return Bfinally中return C&#xff0c;最终返回值是什么? ✔️典型解析✔️拓展知识仓✔️finally 和 return 的关系 ✔️ final、finally、finalize有什么区别✔️final✔️finally✔️ finalize ✔️典型解析 最终的返回值将会是C 因为 fi…

opencv期末练习题(8)附带解析

图像切片 %matplotlib inline import cv2 import matplotlib.pyplot as plt def imshow(img,grayFalse,bgr_modeFalse):if gray:img cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)plt.imshow(img,cmap"gray")else:if not bgr_mode:img cv2.cvtColor(img,cv2.COLOR_BGR2RG…

鸿蒙系列--动态共享包的依赖与使用

一、前言 HarmonyOS的共享包相当于Android的Library&#xff0c;在HarmonyOS中&#xff0c;给开发者提供了两种共享包&#xff0c;HAR&#xff08;Harmony Archive&#xff09;静态共享包&#xff0c;和HSP&#xff08;Harmony Shared Package&#xff09;动态共享包 区别&…