轻量检测模型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.mzph.cn/news/596736.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NeRF-RPN: A general framework for object detection in NeRFs 全文翻译

摘要 Abstract 本文提出了第一个重要的物体检测框架 NeRF-RPN,它直接在 NeRF 上运行。给定一个预先训练好的 NeRF 模型,NeRF-RPN 的目标是检测场景中所有物体的边界框。通过利用包含多尺度三维神经体积特征的新颖体素表示法,我们证明…

ubuntu环境安装配置nginx流程

今天分享ubuntu环境安装配置nginx流程 一、下载安装 1、检查是否已经安装 nginx -v 结果 2、安装 apt install nginx-core 过程 查看版本:nginx -v 安装路径:whereis nginx nginx文件安装完成之后的文件位置: /usr/sbin/nginx&#xf…

MySQL中UNION和UNION ALL的区别有哪些?

在MySQL中如何想要对两个结果集进行合并操作,可以使用UNION和UNION ALL,如果只是想要去除掉重复的记录,属于UNION ALL 即可,但是如何想要除掉没有重复行数据,就要使用Union。本文详细向大家介绍MySQL中UNION和UNION AL…

Axure鲜花商城网站原型图,网上花店订花O2O本地生活电商平台

作品概况 页面数量:共 30 页 兼容软件:仅支持Axure RP 9/10,非程序软件无源代码 应用领域:鲜花网、花店网站、本地生活电商 作品特色 本作品为「鲜花购物商城」网站模板,高保真高交互,属于O2O本地生活电…

OpenVINS学习5——VioManager.cpp/h学习与注释

前言 之前又看到说VioManager.cpp/h是OpenVINS中的核心程序,这次就看看这里面都写了啥,整体架构什么样,有哪些函数功能。具体介绍: VioManager类 整体分析 VioManager类包含 MSCKF 工作所需的状态和其他算法。我们将测量结果输…

python的课后练习总结3之条件语句

1,简单点,只有IF IF 后面加入条件然后冒号: 条件成立执行的代码1 条件成立执行的代码2 条件是否成立都执行的代码 身高 float(input(请输入你的身高(米):)) if 身高 > 1.3:print(f您的身高是{身高}米,请您买票) print(祝您旅途愉快) 2,IF 加个else if 条件:…

Spring AOP的环境搭建、切入点表达式、通知注解

Spring AOP的实现 Spring AOP环境搭建AOP坐标依赖引入添加xml配置实现三层架构 定义切入点Pointcut("匹配规则")切入点表达式1. 执行所有的公共方法2.执行任意的set方法3.设置指定包下的任意类的任意方法 (指定包: com.svt.service)4.设置指定包及于包下的任意类的任…

医院信息系统集成平台—病人主索引(MPI)

随着医院信息化程度的不断深入,应用的不断扩展。在各级、各类医疗或者医院信息系统中作为医疗服务以及信息系统中信息发生源的主体――病人(Patient)的信息保持正确性与唯一性体现的越来越重要,随之产生MPI(Master Patient Index 病人主索引)的概念,随着区域级以及医院级多…

数学建模2023-A太阳镜厂代码认识

Pnp.column_stack((p1,new_column)) #得到每个镜子的x,y,z序列 nlnl/np.linalg.norm(nl) #得到单位法向量 for dx in np.arange(-W/2,W/20.1,delta_t): indices_in_circlenp.where(Dis[:,i]1)[0] #取周围半径 Di_bTb.T.dot(Di_d-B) #A镜上的点 从地面坐标系->B镜坐标系 总…

用 Python 抓取 bilibili 弹幕并分析!

01 实现思路 首先,利用哔哩哔哩的弹幕接口,把数据保存到本地。接着,对数据进行分词。最后,做了评论的可视化。 02 弹幕数据 平常我们在看视频时,弹幕是出现在视频上的。实际上在网页中,弹幕是被隐藏在源代码…

【熔断限流组件resilience4j和hystrix】

文章目录 🔊博主介绍🥤本文内容起因resilience4j落地实现pom.xml依赖application.yml配置接口使用 hystrix 落地实现pom.xml依赖启动类上添加注解接口上使用 📢文章总结📥博主目标 🔊博主介绍 🌟我是廖志伟…

【期末复习向】数据可视化技术

一、重点复习 题型:填空题(15道,2分一个)与简答题(3道题目,10分一个)与绘图题(选画2个类型的图) 1.什么是数据可视化 在计算机视觉领域,数据可视化是对数据的…

Linux 进程(八) 进程的退出码

main 函数的返回值叫做进程的退出码。当进程成功退出的时候,我们一般用0来表示。进程失败的时候一般用非零来表示。我们使用不同的数字来表示进程退出时不同的失败原因。 我们查看系统的有多少退出码以及其含义时需要用到strerror() 他的头文件和用法如下。 通过一…

CSS 放大旋转动画

<template><div class"container" mouseenter"startAnimation" mouseleave"stopAnimation"><!-- 旋方块 --><div class"box" :class"{ rotate-scale-up: isAnimating }"><!-- 元素内容 -->&l…

从零开始搭建企业级前端项目模板(vue3+vite+ts)

文章目录 主要内容一、vite脚手架工具初始化项目二、项目代码加入eslint校验和自动格式化2.1安装对应依赖插件2.2 配置script脚本&#xff0c;项目安装eslint配置2.3 安装完成后&#xff0c;后面启动项目还缺少一些依赖&#xff0c;提前按需安装好 三&#xff0c;修改eslintrc.…

3D目标检测(教程+代码)

随着计算机视觉技术的不断发展&#xff0c;3D目标检测成为了一个备受关注的研究领域。与传统的2D目标检测相比&#xff0c;3D目标检测可以在三维空间中对物体进行定位和识别&#xff0c;具有更高的准确性和适用性。本文将介绍3D目标检测的相关概念、方法和代码实现。 一、3D目…

2023年12月青少年软件编程Python等级考试(三级)真题试卷

2023年12月青少年软件编程Python等级考试&#xff08;三级&#xff09;真题试卷 题目总数&#xff1a;38 总分数&#xff1a;100 选择题 第 1 题 单选题 一个非零的二进制正整数&#xff0c;在其末尾添加两个“0”&#xff0c;则该新数将是原数的&#xff1f;&#x…

nuxt3 env文件、全局变量处理

有两种方向 通过配置nuxt.config.ts Nuxt提供的钩子函数&#xff0c;实现全局变量的获取 runtimeconfig env文件往runtimeconfig放入内容 useAppConfig 通过env文件配置来获取服务端全局变量&#xff0c;客户端通过vite.define实现 nuxt.config.ts Nuxt钩子 1. runtim…

Win32 TEXT()宏学习

之前学习了_T()宏&#xff1b; _T()是MFC的&#xff1b; TEXT()是win32的&#xff1b; _T("")定义于tchar.h&#xff1b; TEXT宏是windows程序设计中经常遇到的宏&#xff0c;定义在 <winnt.h>中&#xff1b; 如果使用UNICODE字符集&#xff0c;则TEXT&…

kubernetes(三)

文章目录 1. k8s弹性伸缩1.1 安装heapster监控1.2 弹性伸缩使用和验证 2. 持久化存储2.1 emptyDir 1. k8s弹性伸缩 k8s弹性伸缩&#xff0c;需要附加插件heapster 1.1 安装heapster监控 使用heapster(低版本)可以监控pod压力大不大 使用hpa调节pod数量&#xff0c;自动扩容或…