YOLO系列目标检测算法——PP-YOLOv2

news2024/11/26 13:22:04

YOLO系列目标检测算法目录 - 文章链接

  • YOLO系列目标检测算法总结对比- 文章链接
  • YOLOv1- 文章链接
  • YOLOv2- 文章链接
  • YOLOv3- 文章链接
  • YOLOv4- 文章链接
  • Scaled-YOLOv4- 文章链接
  • YOLOv5- 文章链接
  • YOLOv6- 文章链接
  • YOLOv7- 文章链接
  • PP-YOLO- 文章链接
  • PP-YOLOv2- 文章链接
  • YOLOR- 文章链接
  • YOLOS- 文章链接
  • YOLOX- 文章链接
  • PP-YOLOE- 文章链接

本文总结:

  1. 在PP-YOLO的基础上,通过各种改进技巧提升其性能,相比于PP-YOLO,mAP由45.9%提升到49.5%,速度从68.9FPS提升到106.5FPS;
  2. 改进的地方:Neck部分使用PAN、在Neck中使用Mish激活函数、使用更大的输入尺寸、改进IoU Aware Branch损失函数等等;

深度学习知识点总结

专栏链接:
https://blog.csdn.net/qq_39707285/article/details/124005405

此专栏主要总结深度学习中的知识点,从各大数据集比赛开始,介绍历年冠军算法;同时总结深度学习中重要的知识点,包括损失函数、优化器、各种经典算法、各种算法的优化策略Bag of Freebies (BoF)等。


本章目录

  • 1. 回顾PP-YOLO
    • 1.1 预处理
    • 1.2 基本模型
    • 1.3 训练策略
  • 2. 改进技巧
    • 2.1 PAN(Path Aggregation Network)
    • 2.2 Mish Activation Function
    • 2.3 Larger Input Size
    • 2.4 IoU Aware Branch
  • 3. 各类改进技巧实验
    • 3.1 有提升的技巧
    • 3.2 不work的trick
  • 4. 结论


**YOLO系列目标检测算法-PP-YOLOv2**
2021.4.21 PP-YOLOv2:《PP-YOLOv2: A Practical Object Detector》

1. 回顾PP-YOLO

1.1 预处理

  使用Mixup,50%概率随机RandomColorDistortion、RandomExpand、RandCrop和RandomFlip,然后RGB通道像素标准化,最后输入尺寸变化 [320, 352, 384,416, 448, 480, 512, 544, 576, 608]。

1.2 基本模型

  本文继续沿用PP-YOLO的基本模型,PP-YOLO中的backbone是YOLOv3的加强版本,使用ResNet50-vd作为backbone,之后使用总共10个trick进行改进,在提高性能的同时且几乎没有增加推理时间,这10个trick包括Deformable Conv、SSLD、CoordConv、DropBlock和SPP等,具体可以看PP-YOLO这篇文章。

1.3 训练策略

  训练时在8个GPU上batchsize设置为96,优化器为SGD,首先迭代500K次,学习率从0-0.005线性增加,当在第400K和450K次时,学习率除以10。同时采用梯度剪切的方法来稳定训练过程。

2. 改进技巧

在这里插入图片描述

2.1 PAN(Path Aggregation Network)

  检测不同尺度的目标是目标检测中的一个基本挑战。在实践中,开发了一个neck,用于构建所有尺度上的高级语义特征映射。

  在PP-YOLO中,采用FPN来组成自底向上的路径。最近,好多FPN变体已被提出来提高金字塔的表示能力,例如,BiFPN、PAN、RFP等等。本文按照PAN的设计来聚合自上而下的信息,具体结构如图2所示。

2.2 Mish Activation Function

在这里插入图片描述

  Mish激活函数提出后已经广泛应用到多个目标检测其中,例如YOLOv4和YOLOv5中的backbone中。本文采用的PP-YOLO的backbone在ImageNet数据集上已经预训练过了,且分类准确率很高,所以就不在backbone上使用Mish,而在neck中使用Mish。

2.3 Larger Input Size

  增大输入图片尺寸,相当于增加目标的面积,从而有更多的信息,因此,性能将会得到提高。然而,大的输入尺寸会占用更多的内存。为此,需要减少batchsize,本文将batchsize从每个GPU的24张图像减少到每个GPU的12张图像,并将最大的输入大小从608扩展到768。输入大小从[320,352,384,416,448,480,512,544,576,608,640,672,704,736,768]中均匀地抽取。

2.4 IoU Aware Branch

  在PP-YOLO中,IoU感知损失以软权重格式计算,与初衷不一致。因此,本文应用了一种软标签格式。以下是IoU Aware loss的计算方式:
l o s s = − t ∗ l o g ( σ ( p ) − ( 1 − t ) ∗ l o g ( 1 − σ ( p ) ) loss=-t*log(\sigma(p)-(1-t)*log(1-\sigma(p)) loss=tlog(σ(p)(1t)log(1σ(p))

  其中 t t t表示锚与其匹配的GT边界框之间的IoU, p p p为IoU Aware Branch的原始输出, σ ( ⋅ ) \sigma(·) σ()代表sigmoid激活函数。注意,只计算了阳性样本的IoU感知损失。通过替换损耗函数,IoU感知分支比以前更好。

3. 各类改进技巧实验

本节以一种增量的方式展示每个模块的性能提升,结果如下表所示:
在这里插入图片描述

3.1 有提升的技巧

  • A
    首先,遵循PP-YOLO的原始设计来构建PP-YOLO的backbone。由于在CPU上大量的预处理会减慢训练速度,所以将每个GPU的图像从24减少到12,减少batchsize的理大小使mAP下降了0.2%。
  • A ⟶ \longrightarrow B
    对PP-YOLO有积极影响的第一个改进是PAN,为了稳定训练过程,在PAN模块中添加了几个skip连接,详细细节如结构图2所示。可以看到,PAN和FPN是一组对称的结构,当使用Mish时,它将性能从45.1%mAP提高到47.1% mAP。虽然模型B比模型A稍慢,但如此显著的增益促使在最终的模型中采用PAN。
  • B ⟶ \longrightarrow C
    由于评估期间YOLOv4和YOLOv5的输入大小为640,因此本文将训练和评估的输入大小增加到640,以建立一个公平的比较。性能提高0.6% mAP。
  • C ⟶ \longrightarrow D
    不断增加输入大小应该更有利。但是,不可能将更大的输入大小和更大的batchsize一起使用。用每个GPU12张图像和更大的输入大小来训练模型D,它增加了0.6%,比更大的batchsize带来更多的收益。因此,在最后的实践中选择了较大的输入大小。输入大小从[320,352,384,416,448,480,512,544,576,608,640,672,704,736,768]中均匀地抽取。
  • D ⟶ \longrightarrow E
    在训练阶段,改进后的IoU感知损失比以前表现得更好,在前一个版本中,在训练期间的数百次迭代中,IoU感知损失的值会下降到1e-5。在对IoU感知损失进行修正后,其值与IoU损失值在同一数量级上,这是合理的。使用该策略后,模型E的mAP增加到49.1%,没有任何效率损失。

3.2 不work的trick

  • Cosine学习率衰减
    不同于线性步进学习率的衰减,cosine学习速率衰减是学习速率的指数衰减,因此,学习速率的变化是平滑的,这有利于训练过程。虽然cosine学习率衰减在COCO minitrain上取得了更好的性能,但它对初始学习率、步数和结束学习率等超参数很敏感。尝试了几组超参数。然而,最终并没有观察到对2017年COCO train的积极影响。

  • backbobne参数冻结
    当对下游任务上的ImageNet预训练参数进行微调时,在前两个阶段冻结参数是一种常见的做法。由于本文预先训练的ResNet50-vd比其他的更强大(Top1准确率82.4%,Top1准确率79.3%),更有动力采用这种策略。在COCO minitrain上,参数冻结带来了1个mAP增益,而在COCO2017 train上,mAP降低了0.8%。不一致现象的一个可能的原因是两个训练集的大小不同,COCO minitrain是2017年COCO train的五分之一。在一个小数据集上训练的参数的泛化能力可能比预先训练的参数更差。

  • SiLU激活函数
    尝试在neck部使用SiLU代替Mish,这增加了COCO minitrain数据集mAP的0.3%,但下降了2017 COCO train数据集mAP的0.5%,这个不确定原因。

4. 结论

  1. 本文对PP-YOLO进行了一些更新,它形成了一个名为PPYOLOv2的高性能目标检测器;
  2. 与其他目标检测器,如YOLOv4和YOLOv5相比,PP-YOLOv2在速度和精度之间取得了更好的平衡;
  3. 在本文中,探讨了一系列技巧,并展示了如何将这些技巧结合在PP-YOLO检测器上,并证明了它们的有效性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/88561.html

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

相关文章

>python可视化神器altair

python可视化神器一.些简单图形的绘制(一).柱状图1. 然后我们还可以设置高亮柱状图的某一根柱子,其他柱子设置为一样的颜色:2. 翻转图片,同时添加图片标注,在图上加上数据3.在图形上添加线条4. 组合图,柱状图折线图(二…

[R语言]手把手教你如何绘图(万字)

目录 概况 常用高级图形 条形图 csv文件导入 csv文件导出 R语言sep函数 seq函数 with函数 直方图和密度估计图 盒型图 boxplot() 正态QQ图 散点图 pairs()散点矩阵图 曲线图 curve() 三维图 动态三维图 低级图形函数 abline() lines() legand()增加图例 …

String类——字符序列类(1)

目录 前言 String类 1.该类的由来 2.String类对象的创建 (1)头文件 (2)类对象的创建 其他用法: (3)String类对象遍历 1:数组方式遍历 2.范围for遍历: …

【Python】【期末复习题】【2022秋】

文章目录一、单选题(20分)二、判断题(10分)三、填空题(10分)四、问答题(共30分,6题,每题5分)五、程序题(3题,每题10分,共3…

React.js 简介以及一些基本概念

React 是什么 React 跟angular.js 和Vue.js 一样是构建用户界面的js库 2011 年 由Facebook 工程师Jordan Walke创建 在 2013 开源 React 的优势 原生js的痛点 原生的Javascript 操作DOM繁琐,效率低(DOM-API 操作UI)使用Javascript 直接操作DOM&#xf…

scala语法(三)(有java基础速学)

面向对象编程(中) scala的包 Scala中包名和源码所在的系统文件目录结构要可以不一致,但是编译后的字节码文件路径和包名会保持一致 scala 自动引入的包 Scala中,以下三个包的内容会隐式引用到每个程序上。 import java.lang._…

[附源码]Python计算机毕业设计二手交易平台Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

如何管理客商主数据,附要点和QA

客商主数据(客户、供应商、既是客户也是供应商)是企业最常用的主数据类型之一。要实现上下游的打通,方便企业内部相关业务的运转以及信息流通,做好客商主数据的管理至关重要。 什么是客商主数据 客商主数据是一类复杂的主数据&a…

一文搞懂Vue Diff算法

为什么需要diff算法? 对于一个容器(比如我们常用的#app)而言,它的内容一般有三种情况: 1.字符串类型,即是文本。 2.子节点数组,即含有一个或者多个子节点 3.null,即没有子节点 在…

【软件开发】前后端分离架构下JWT实现用户鉴权

前后端分离架构下JWT实现用户鉴权在【计算机网络】JWT(JSON Web Token)初识 中,我们讲解了 JWT 的基础知识。Token 验证的方式一般是用在前后端分离的软件开发项目中,所以本篇文章将会从前端和后端的角度去考虑 JWT 的实现。前端 …

H5和小程序的区别

近年来,由于社交电商的火爆程度,相较于传统的电商淘宝、京东、天猫这种第三方平台,其余平台的发展也势不可挡。并且第三方平台的竞争过大,成本过高,抢流量越来越难之后,越来越多的商家企业开始转战H5微商城…

基于知识图谱的多模内容创作技术

导读:由于大数据时代的发展,知识呈指数级增长,而知识图谱技术又在近年来逐步火热,因此诞生了利用知识图谱技术进行智能创作的新想法。本文将分享基于知识图谱的多模内容创作技术及应用。主要包括以下四大部分: 百度知识…

Network Configuration Manager固件漏洞管理

固件漏洞可能会使您的企业和客户的敏感数据面临风险,导致黑客容易进入、销售额下降、声誉损失和处罚。为了避免这些事故,识别这些固件漏洞并定期采取纠正措施非常重要。 使用 Network Configuration Manager,你现在可以识别网络设备中的潜在…

【数据结构-JAVA】包装类 泛型

目录 1. 包装类 1.1 基本数据类型和对应的包装类 1.2 装箱和拆箱 1.3 一道面试题 2. 泛型 2.1 什么是泛型 3. 泛型是如何编译的 3.1 擦除机制 4. 泛型的上界 5. 泛型方法 1. 包装类 在 Java 中,由于基本类型不是继承自 Object,为了在泛型代码中可以…

为什么 FIQ 比 IRQ 的响应速度更快?

目录 1、FIQ在异常向量表位于最末 2、FIQ模式有5个私有寄存器 3、FIQ的优先级高于IRQ 1、FIQ在异常向量表位于最末 一般来说,处理器跳转到异常向量表以后,会根据当前的异常源类型,执行下一次的跳转指令,但是FIQ在异常向量表的…

尚医通:项目搭建-提交到Git(六)

(1)前后端概念介绍 (2)搭建项目后端环境 (3)提交到Git仓库 (1)前后端概念介绍 (2)搭建项目后端环境 项目模块构建 hospital-manage:医院接口模拟…

微服务框架 SpringCloud微服务架构 分布式缓存 44 Redis 分片集群 44.5 RedisTemplate访问分片集群

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 分布式缓存 文章目录微服务框架分布式缓存44 Redis 分片集群44.5 RedisTemplate访问分片集群44.5.1 RedisTemplate访问分片集群44 Redis 分片…

手把手教你使用SpringBoot做一个员工管理系统【代码篇·上】

手把手教你使用SpringBoot做一个员工管理系统【代码篇上】1.登录功能2.登录拦截器的实现3.展示员工列表1.登录功能 首先把登录页面的表单提交地址写一个controller <form class"form-signin" th:action"{/user/login}">表单的name属性不可少&#…

13、腾讯云轻量应用服务器挂载文件系统

前言&#xff1a;腾讯云轻量应用服务器腾讯云文件存储&#xff08;Cloud File Storage&#xff0c;CFS&#xff09;系统的使用小记 轻量应用服务器系统版本是windows server 2012r 一、必要概念 1.1 轻量应用服务器 轻量应用服务器&#xff08;TencentCloud Lighthouse&#x…

【MySQL】浅谈事务与隔离级别

文章目录1. 事务概述2. 事务的特性3. 事务的隔离级别1. 事务概述 什么是事务&#xff1f; 在MySQL中的事务&#xff08;Transaction&#xff09;是由存储引擎实现的&#xff0c;在MySQL中&#xff0c;只有InnoDB存储引擎才支持事务。事务处理可以用来维护数据库的完整性&#x…