目标检测——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

相关文章

解读GC日志中的各项指标用法

《解读GC日志中的各项指标用法》:本文主要介绍GC日志中的各项指标用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基础 GC 日志格式(以 G1 为例)1. Minor GC 日志2. Full GC 日志二、关键指标解析1. GC 类型与触发原因2. 堆

Java设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

MySQL之InnoDB存储页的独立表空间解读

《MySQL之InnoDB存储页的独立表空间解读》:本文主要介绍MySQL之InnoDB存储页的独立表空间,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、独立表空间【1】表空间大小【2】区【3】组【4】段【5】区的类型【6】XDES Entry区结构【

C++ 检测文件大小和文件传输的方法示例详解

《C++检测文件大小和文件传输的方法示例详解》文章介绍了在C/C++中获取文件大小的三种方法,推荐使用stat()函数,并详细说明了如何设计一次性发送压缩包的结构体及传输流程,包含CRC校验和自动解... 目录检测文件的大小✅ 方法一:使用 stat() 函数(推荐)✅ 用法示例:✅ 方法二:使用 fsee

MySQL主从复制与读写分离的用法解读

《MySQL主从复制与读写分离的用法解读》:本文主要介绍MySQL主从复制与读写分离的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、主从复制mysql主从复制原理实验案例二、读写分离实验案例安装并配置mycat 软件设置mycat读写分离验证mycat读

Python的端到端测试框架SeleniumBase使用解读

《Python的端到端测试框架SeleniumBase使用解读》:本文主要介绍Python的端到端测试框架SeleniumBase使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录SeleniumBase详细介绍及用法指南什么是 SeleniumBase?SeleniumBase

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

Nacos注册中心和配置中心的底层原理全面解读

《Nacos注册中心和配置中心的底层原理全面解读》:本文主要介绍Nacos注册中心和配置中心的底层原理的全面解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录临时实例和永久实例为什么 Nacos 要将服务实例分为临时实例和永久实例?1.x 版本和2.x版本的区别

C++类和对象之默认成员函数的使用解读

《C++类和对象之默认成员函数的使用解读》:本文主要介绍C++类和对象之默认成员函数的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、默认成员函数有哪些二、各默认成员函数详解默认构造函数析构函数拷贝构造函数拷贝赋值运算符三、默认成员函数的注意事项总结一