当前位置: 首页 > news >正文

目标检测——PP-YOLO算法解读

PP-YOLO系列,均是基于百度自研PaddlePaddle深度学习框架发布的算法,2020年基于YOLOv3改进发布PP-YOLO,2021年发布PP-YOLOv2和移动端检测算法PP-PicoDet,2022年发布PP-YOLOE和PP-YOLOE-R。由于均是一个系列,所以放一起解读,方便对比前后改进地方。


PP-YOLO系列算法解读:

  • PP-YOLO算法解读
  • PP-YOLOv2算法解读
  • PP-PicoDet算法解读
  • PP-YOLOE算法解读
  • PP-YOLOE-R算法解读

YOLO系列算法解读:

  • YOLOv1通俗易懂版解读
  • SSD算法解读
  • YOLOv2算法解读
  • YOLOv3算法解读
  • YOLOv4算法解读
  • YOLOv5算法解读

文章目录

  • 1、算法概述
  • 2、PP-YOLO细节
    • 2.1 Selection of Tricks
  • 3、实验
    • 3.1 消融实验
    • 3.2 与其他检测算法比较


PP-YOLO(2020.7.23)

论文:PP-YOLO: An Effective and Efficient Implementation of Object Detector
作者:Xiang Long, Kaipeng Deng, Guanzhong Wang, Yang Zhang, Qingqing Dang, Yuan Gao, Hui Shen, Jianguo Ren, Shumin Han, Errui Ding, Shilei Wen
链接:https://arxiv.org/abs/2007.12099
代码:https://github.com/PaddlePaddle/PaddleDetection


1、算法概述

直接从论文摘要可以看出,PP-YOLO的目标是想实现一种可以直接应用于实际应用场景的检测精度和检测速度相对平衡的目标检测器,而不是提出一种新的检测模型。鉴于YOLOv3在实际中得到了广泛的应用,所以PP-YOLO的作者基于YOLOv3开发新型目标检测器。作者主要尝试结合现有的各种几乎不增加模型参数和FLOPs数量的技巧(看到这里有点像YOLOv4利用BoF改进啊!!!),以达到在保证速度几乎不变的情况下尽可能提高检测器精度的目的。由于本文中所有的实验都是基于百度的PaddlePaddle框架进行的,所以算法被命名为PP-YOLO。通过结合多种技巧,PP-YOLO在COCO上达到45.2%mAP和72.9FPS。上图:
在这里插入图片描述
与YOLOv4不同,PP-YOLO没有探索不同的骨干网络和数据增强方法,也没有使用NAS查询超参数。对于骨干网,作者直接使用最常见的ResNet作为PP-YOLO的骨干网。对于数据增强,直接使用最基本的MixUp。一个原因是ResNet的使用更加广泛,各种深度学习框架都针对ResNet系列进行了深度优化,在实际部署中会更加方便,在实践中会有更好的推断速度。另一个原因是主干的替换和数据增强是相对独立的因素,几乎与所讨论的技巧无关。


2、PP-YOLO细节

检测算法分为backbone、neck和head三个部分,PP-YOLO基于YOLOv3进行改进,改进地方可以直接从文中网络框图看出,下面分别进行阐述:
在这里插入图片描述
从图中可以看出,主要改进点在neck和head部分。有紫色三角块,黄色方块和红色星星作为改进插入点。
紫色三角块代表DropBlock
黄色方块代表CoordConv
红色星星代表SPP

Backbone部分:
PP-YOLO将YOLOv3的DarkNet-53替换成ResNet50-vd-dcn。由于直接替换成ResNet50-vd会掉点,所以将最后一个stage的3x3卷积替换成了DCN(Deformable Convolutional Networks,可变形卷积)。用来做预测的特征图为C3,C4,C5。

Neck部分:
拿Backbone输出的C3,C4,C5特征图应用FPN,其中FPN经过DropBlock、CoordConv和SPP改进。

Head部分:
和YOLOv3一样,分三个特征图输出,每个特征图每个网格设置3个anchor,每个网格位置输出3x(k+5),对于NxN大小的特征图输出为NxNx3x(k+5)的tensor。唯一改进的地方为在最后预测层3x3卷积中加入CoordConv。

2.1 Selection of Tricks

  • Larger Batch Size: 大的batchsize可以增加训练稳定性得到更好的结果。将batchsize由64变成192。
  • EMA: 在训练模型时,保持训练参数的移动平均线通常是有益的。
  • DropBlock: 只在FPN中应用DropBlock。
  • IoU Loss: 与YOLOv4不同的是,作者并没有直接用IoU损失代替l1损失,而是增加了一个分支来计算IoU损失。由于作者发现各种IoU损失的改善效果相似,所以选择了最基本的IoU损失。
  • IoU Aware: 在YOLOv3中,分类概率和objectness得分相乘作为最终检测目标的置信度得分,但是这没有考虑定位精度。为了解决这一问题,增加了IoU预测分支来衡量定位的准确性。在训练过程中,采用IoU感知损失训练IoU预测分支。在推理过程中,将预测的IoU乘以分类概率和objectness得分,计算出最终的检测置信度,该置信度与定位精度更相关。然后将最终检测置信度用作后续NMS的输入。虽然IoU感知分支会增加额外的计算成本。但是,只增加了0.01%的参数个数和0.0001%的flop,几乎可以忽略不计。
  • Grid Sensitive: 借鉴YOLOv4的改进
  • Matrix NMS: 受到了soft-NMS的启发,并行的方式实现NMS,更快。
  • CoordConv: 它的工作原理是通过使用额外的坐标通道让卷积访问自己的输入坐标。CoordConv允许网络学习完全的变换不变性或不同程度的变换依赖性。考虑到CoordConv将在卷积层中增加两个输入通道,因此将增加一些参数和FLOPs。为了尽可能减少效率的损失,作者没有改变骨干中的卷积层,只将FPN中的1x1卷积层和检测头中的第1个卷积层替换为CoordConv。
  • SPP: 和YOLOv4一样,也引入了SPP层增大感受野。
  • Better Pretrain Model: 使用蒸馏的ResNet50-vd模型作为预训练模型。

3、实验

3.1 消融实验

作者对以上改进做了消融实验,如下表所示:
在这里插入图片描述
值得注意的是:作者在YOLOv3的基础上直接替换主干为ResNet50-vd-dcn后,mAP提升,推理速度也加快了。每个trick都有涨点,其中B->C涨点最多。

3.2 与其他检测算法比较

PP-YOLO与现如今最新检测算法在COCO数据集上的mAP比较如下表所示。可以看出PP-YOLO无论是mAP指标或者是FPS指标都是非常优秀的。
在这里插入图片描述

相关文章:

目标检测——PP-YOLO算法解读

PP-YOLO系列,均是基于百度自研PaddlePaddle深度学习框架发布的算法,2020年基于YOLOv3改进发布PP-YOLO,2021年发布PP-YOLOv2和移动端检测算法PP-PicoDet,2022年发布PP-YOLOE和PP-YOLOE-R。由于均是一个系列,所以放一起解…...

多特征变量序列预测(11) 基于Pytorch的TCN-GRU预测模型

往期精彩内容: 时序预测:LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较-CSDN博客 风速预测(一)数据集介绍和预处理-CSDN博客 风速预测(二)基于Pytorch的EMD-LSTM模型-CSDN博客 风速预测&#xff…...

Lvs+keepalived+nginx搭建高可用负载均衡集群

环境配置 master主机192.168.199.149,虚拟IP192.168.199.148 back备机192.168.199.150 真实服务器1 192.168.199.155 真实服务器2 192.168.199.156 关闭防火墙和selinux master配置(149) 添加虚拟IP ip addr add 192.168.199.148/24 …...

WPF —— 控件模版和数据模版

1:控件模版简介: 自定义控件模版:自己添加的样式、标签,控件模版也是属于资源的一种, 每一个控件模版都有一唯一的 key,在控件上通过template属性进行绑定 什么场景下使用自定义控件模版,当项目里面多个地方…...

如何动态修改spring中定时任务的调度策略(1)

在我们日常开发中经常会调度工具来处理一下需要定时执行的任务,比如定时导出报表数据给业务方发送邮件。你在工作中是如何这种定时调度? 如何实现调度任务 使用java技术栈的老铁来说,现成定时调度的解决方案应该有很多,总结来说…...

idea import的maven类报红

idea 报红/显示红色的原因 一般报红,显示红色,是因为 idea 在此路径下,找不到这个类。 找到是哪个 jar 包的类导致 idea 报红 点击报红的路径的上一层,进入jar 包。比如: import com.aaa.bbb.ccc.DddDto;这个 impo…...

React——class组件中setState修改state

class组件中通过state去存储当前组件的数据,那怎么对其进行修改呢?就是方法this.setState({ 要修改的部分数据 }) setState() 作用:1 、修改 state 内容;2 、更新 UI 特别注意:react的核心其实是虚拟dom(数…...

搭建基于 Snowflake 的 CI/CD 最佳实践!

Snowflake 提供了可扩展的计算和存储资源,和基于 SQL 的界面 Snowsight,方便用户进行数据操作和分析。然而,如果用户想将自己的 CI/CD 流程与 Snowflake 集成时,会发现一些不便之处(尤其相比其 SnowSight 优秀的查询能…...

数据结构(五)——树的基本概念

五、树 5.1 树的基本概念 5.1.1 树的定义 树是n(n>0)个结点的有限集合,结点数为0的树称为空树 非空树的特性 有且仅有一个根节点没有后继的结点称为“叶子结点”(或终端结点)有后继的结点称为“分支结点”(或非终端结点&a…...

2.28CACHE,虚拟存储器

主存储器,简称主存。CPU可以直接随机地对其进行访问,也可以和高速缓存器及辅助存储器交换数据。 2> 辅助存储器,简称辅存,不能与CPU直接相连,用来存放当前暂时不用的程序和数据 3> 高速缓冲存储器,位于主存和CPU之间,用来…...

深入理解栈和队列(一):栈

个人主页:17_Kevin-CSDN博客 专栏:《数据结构》 一、栈的概念 栈(Stack)是一种特殊的线性表,它遵循后进先出(Last-In-First-Out,LIFO)的原则。栈可以被看作是一个只能在一端进行操作…...

electron-builder 打包问题,下载慢解决方案

目录 问题说明设置下载源 ?解决方案思路下载Electron下载winCodeSign下载nsis下载nsis-resources 总结 问题说明 项目使用了Electron,在第一次打包时会遇见下载慢,导致打包进度几乎停滞不前,甚至可能直接报错 其实这是因为Electr…...

(简单成功)Mac:命令设置别名

案例:给"ls -l"命令,设置别名通过”ll“快速访问 1、在项目根目录底下查看有无.bash_profile文件,注意这个是个隐藏文件,需要使用ls -a命令查看: 没有.bash_profile新建一个文件, 在最后添加一行…...

Grok-1:参数量最大的开源大语言模型

Grok-1:参数量最大的开源大语言模型 项目简介 由马斯克领衔的大型模型企业 xAI 正式公布了一项重要动作:开源了一个拥有 3140 亿参数的混合专家模型(MoE)「Grok-1」,连同其模型权重和网络架构一并公开。 此举将 Gro…...

Python 自然语言处理库之stanza使用详解

概要 在自然语言处理(NLP)领域,Python Stanza 库是一个备受推崇的工具,它提供了强大的功能和易用的接口,帮助开发者处理文本数据、进行语言分析和构建NLP应用。本文将深入探讨 Stanza 库的特性、用法,并通过丰富的示例代码展示其在实际项目中的应用。 Stanza 简介 Stan…...

计算机网络:数据交换方式

计算机网络:数据交换方式 电路交换分组交换报文交换传输对比 本博客介绍计算机之间数据交换的三种方式,分别是电路交换、分组交换以及报文交换。 电路交换 我们首先来看电路交换,在电话问世后不久,人们就发现要让所有的电话机都…...

万用表革新升级,WT588F02BP-14S语音芯片助力智能测量新体验v

万能表功能: 万能表是一款集多功能于一体的电子测量工具,能够精准测量电压、电流、电阻等参数,广泛应用于电气、电子、通信等领域。其操作简便、测量准确,是工程师们进行电路调试、故障排查的得力助手,为提升工作效率…...

Day61:WEB攻防-PHP反序列化原生类TIPSCVE绕过漏洞属性类型特征

知识点: 1、PHP-反序列化-属性类型&显示特征 2、PHP-反序列化-CVE绕过&字符串逃逸 3、PHP-反序列化-原生类生成&利用&配合 补充:如果在 PHP 类中没有实现某个魔术方法,那么该魔术方法在相应的情况下不会被自动触发。PHP 的魔…...

【开源】SpringBoot框架开发不良邮件过滤系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统用户模块2.2 收件箱模块2.3 发件箱模块2.4 垃圾箱模块2.5 回收站模块2.6 邮箱过滤设置模块 三、实体类设计3.1 系统用户3.2 邮件3.3 其他实体 四、系统展示五、核心代码5.1 查询收件箱档案5.2 查询回收站档案5.3 新…...

详细教---用Django封装写好的模型

本次我们要用自己写好的热销词条爬虫代码来演示如何用Django把我们写好的模型封装。 第一步:代码准备 热搜词条搜集代码: import requests from lxml import etreeurl "https://tophub.today/n/KqndgxeLl9" headers{User-Agent: Mozilla/5.…...

【JavaEE】-- HTTP

1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving

地址:LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂,正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10pip3.10) 一:前言二:安装编译依赖二:安装Python3.10三:安装PIP3.10四:安装Paddlepaddle基础框架4.1…...

6.9-QT模拟计算器

源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...

PostgreSQL 与 SQL 基础:为 Fast API 打下数据基础

在构建任何动态、数据驱动的Web API时&#xff0c;一个稳定高效的数据存储方案是不可或缺的。对于使用Python FastAPI的开发者来说&#xff0c;深入理解关系型数据库的工作原理、掌握SQL这门与数据库“对话”的语言&#xff0c;以及学会如何在Python中操作数据库&#xff0c;是…...

使用VMware克隆功能快速搭建集群

自己搭建的虚拟机&#xff0c;后续不管是学习java还是大数据&#xff0c;都需要集群&#xff0c;java需要分布式的微服务&#xff0c;大数据Hadoop的计算集群&#xff0c;如果从头开始搭建虚拟机会比较费时费力&#xff0c;这里分享一下如何使用克隆功能快速搭建一个集群 先把…...

【R语言编程——数据调用】

这里写自定义目录标题 可用库及数据集外部数据导入方法查看数据集信息 在R语言中&#xff0c;有多个库支持调用内置数据集或外部数据&#xff0c;包括studentdata等教学或示例数据集。以下是常见的库和方法&#xff1a; 可用库及数据集 openintro库 该库包含多个教学数据集&a…...