轻量检测模型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…

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.设置指定包及于包下的任意类的任…

用 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;自动扩容或…

chatgpt3.5和chatgpt4的区别

ChatGPT4是基于GPT-3模型的一个实例&#xff0c;但ChatGPT4已经进行了进一步的改进和优化。GPT-3&#xff08;第三代生成式预训练模型&#xff09;是OpenAl开发的一个大型语言模型&#xff0c;它在很多自然语言处理任务中表现出色。 ChatGPT4继承了GPT-3的基本架构和能力&…

清风数学建模笔记-聚类算法

K-maens算法&#xff1a; 算法的原理&#xff1a; 在论文中时&#xff0c;可以把一些可以流程化的算法的流程图加上去 优点&#xff1a; 缺点&#xff1a; 点容易受异常值的影响&#xff0c;且受影响较大 k-means算法&#xff1a; 使用SPSS进行聚类分析&#xff1a; S默认使用…

CCNP课程实验-07-OSPF-Trouble-Shooting

目录 实验条件网络拓朴 环境配置开始排错错点1&#xff1a;R1-R2之间认证不匹配错误2&#xff1a;hello包的时间配置不匹配错误3&#xff1a;R2的e0/1接口区域配置不正确错误4&#xff1a;R4的e0/1接口没有配置进OSPF错误5&#xff1a;R2的区域1没有配置成特殊区域错误6&#x…