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

2024-03-19 14:28
文章标签 算法 目标 检测 yolo 解读 pp

本文主要是介绍目标检测——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算法解读

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算法解读的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/826282

相关文章

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

MySQL中的MVCC底层原理解读

《MySQL中的MVCC底层原理解读》本文详细介绍了MySQL中的多版本并发控制(MVCC)机制,包括版本链、ReadView以及在不同事务隔离级别下MVCC的工作原理,通过一个具体的示例演示了在可重... 目录简介ReadView版本链演示过程总结简介MVCC(Multi-Version Concurr

关于Gateway路由匹配规则解读

《关于Gateway路由匹配规则解读》本文详细介绍了SpringCloudGateway的路由匹配规则,包括基本概念、常用属性、实际应用以及注意事项,路由匹配规则决定了请求如何被转发到目标服务,是Ga... 目录Gateway路由匹配规则一、基本概念二、常用属性三、实际应用四、注意事项总结Gateway路由

解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)

《解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)》该文章介绍了使用Redis的阻塞队列和Stream流的消息队列来优化秒杀系统的方案,通过将秒杀流程拆分为两条流水线,使用Redi... 目录Redis秒杀优化方案(阻塞队列+Stream流的消息队列)什么是消息队列?消费者组的工作方式每

解读静态资源访问static-locations和static-path-pattern

《解读静态资源访问static-locations和static-path-pattern》本文主要介绍了SpringBoot中静态资源的配置和访问方式,包括静态资源的默认前缀、默认地址、目录结构、访... 目录静态资源访问static-locations和static-path-pattern静态资源配置

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

MySQL中时区参数time_zone解读

《MySQL中时区参数time_zone解读》MySQL时区参数time_zone用于控制系统函数和字段的DEFAULTCURRENT_TIMESTAMP属性,修改时区可能会影响timestamp类型... 目录前言1.时区参数影响2.如何设置3.字段类型选择总结前言mysql 时区参数 time_zon

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

MySQL中的锁和MVCC机制解读

《MySQL中的锁和MVCC机制解读》MySQL事务、锁和MVCC机制是确保数据库操作原子性、一致性和隔离性的关键,事务必须遵循ACID原则,锁的类型包括表级锁、行级锁和意向锁,MVCC通过非锁定读和... 目录mysql的锁和MVCC机制事务的概念与ACID特性锁的类型及其工作机制锁的粒度与性能影响多版本

Redis过期键删除策略解读

《Redis过期键删除策略解读》Redis通过惰性删除策略和定期删除策略来管理过期键,惰性删除策略在键被访问时检查是否过期并删除,节省CPU开销但可能导致过期键滞留,定期删除策略定期扫描并删除过期键,... 目录1.Redis使用两种不同的策略来删除过期键,分别是惰性删除策略和定期删除策略1.1惰性删除策略