目标检测-One Stage-YOLOx

文章目录

  • 前言
  • 一、YOLOx的网络结构和流程
    • 1.YOLOx的不同版本
    • 2.Yolox-Darknet53
      • YOLOv3 baseline
      • Yolox-Darknet53
    • 3.Yolox-s/Yolox-m/Yolox-l/Yolox-x
    • 4.Yolox-Nano/Yolox-Tiny
  • 二、YOLOx的创新点
  • 总结


前言

根据前文CenterNet、YOLOv4等可以看出学界和工业界都在积极探索使用各种tricks(anchor-free、各种组件、数据增强技术等等)来改进One Stage网络的表现,2021年旷视科技结合先进的改进技巧,产出了多种改进模型,在多种情况下达到速度和精度的SOTA。

值得一提的是,YOLOx使得YOLO系列回归到了anchor-free(YOLOv1是anchor-free的),后续YOLOv6、YOLOv7、YOLOv8均为anchor-free算法


提示:以下是本篇文章正文内容,下面内容可供参考

一、YOLOx的网络结构和流程

1.YOLOx的不同版本

YOLOx给出了以下版本:
(1)标准网络结构:Yolox-Darknet53Yolox-sYolox-mYolox-lYolox-x
(2)轻量级网络结构:Yolox-NanoYolox-Tiny

ps:

  1. 选择Yolov3_spp的改进版作为Yolov3 baseline,在此基础上添加各种trick,比如Decoupled Head、SimOTA等,得到了Yolox-Darknet53版本
  2. 以Yolov5的四个版本作为baseline,采用有效的trick,逐一进行改进,得到Yolox-s、Yolox-m、Yolox-l、Yolox-x四个版本
  3. 设计了Yolox-Nano、Yolox-Tiny轻量级网络,并测试了一些trick的适用性

2.Yolox-Darknet53

YOLOv3 baseline

  • 采用了YOLOv3-SPP网络(在YOLOv3 backbone后面加入了SPP层)。
  • 采用了新的训练策略:EMA权值更新、cosine学习率机制、IoU损失、IoU感知分支
  • 数据增强:仅使用RandomHorizontalFlip(翻转)、ColorJitter(对比度、亮度等)、多尺度数据增强,移除了RandomResizedCrop(随机裁剪),因为发现其和planned mosaic augmentation功能上有重叠。

基于上述训练技巧,基线模型在COCO val上取得了38.5%AP指标

ps:和CenterNet不同的是,Yolox分为cls、reg以及obj分支,其中

  • cls代表分类任务,主要负责预测图像中物体的类别,使用BCE损失
  • reg代表回归任务,主要负责预测物体的位置和尺寸信息,使用IoU损失
  • obj代表目标存在性任务(IoU感知分支),即模型需要判断边框中是否存在目标物体(置信度),使用BCE损失
    在这里插入图片描述

Yolox-Darknet53

Yolox-Darknet53在YOLOv3 baseline基础上再次采用了以下五种tricks:

  • Decoupled head:检测头由Head修改为Decoupled Head,提升了收敛速度和精度,但同时会增加复杂度
    在这里插入图片描述
  • Strong data augmentation:使用了Mosaic和MixUp,同时在使用强大的数据增强后,发现ImageNet预训练不再有益,因此从头开始训练所有模型
  • Anchor-free:类似CenterNet的思想
  • Multi positives:类似CenterNet的anchor-free仅为每个对象选择一个正样本(中心位置),同时忽略其他高质量预测,然而,优化这些高质量的预测也可以带来有益的梯度,缓解训练期间正/负采样的极端不平衡,因此YOLOx将中心3×3区域都分配为正样本
  • SimOTA:一种标签匹配方法,标签分配是近年来目标检测领域的另一个重要进展。所谓标签匹配实质上就是将预测框和真实(gt)框进行匹配,简单做法是基于阈值,如IoU,但这种做法比较粗糙。

将精度推至47.3 AP
在这里插入图片描述

ps:YOLOv3-ultralytics是YOLOv3的最佳实践,采用了数据增强等tricks,具体改进看源码

SimOTA详解

ps:OTA来源于旷世科技另一篇文章《Ota: Optimal transport assignment for object detection》,SimOTA是OTA的简化,求近似解

SimOTA将标签匹配转换为运输问题,自动的去匹配输出和标记之间的关联,流程如下:

  1. 网络的输出为85*8400,也就是有8400个预选框,根据初步筛选规则得到1000个正样本预选框
    • 规则1:寻找预选框中心点落在ground truth框范围的所有预选框
    • 规则2:以ground truth框中心点为基准,设置边长为5的正方形,挑选在正方形内的预选框
  2. 假定有3个目标框,针对筛选出的1000个候选检测框,和3个ground truth框计算Loss函数
    • 类别损失:pair_wise_cls_loss,维度:[3,1000]
    • 位置损失:pair_wise_iou_loss,维度:[3,1000]
  3. 两个损失函数加权相加,得到总代价cost矩阵,维度:[3,1000]
  4. 设置候选框数量,假定设置为10,则会给每个目标框挑选10个iou最大的候选框,记录为topk_ious矩阵,则topk_ious的维度为[3,10]
  5. 将topk_ious按第2维求和取整,可以得到每个目标框应该分配的预选框数量

在这里插入图片描述
得到每个目标框应该分配的预选框数量后,具体的选择规则是根据cost矩阵,选择cost值最低的一些候选框
在这里插入图片描述

  1. 过滤共用的候选框:当同一个候选框对应多个目标框时,选择cost更小的候选框,即得到最终的匹配结果

在这里插入图片描述

以下是Yolox-Darknet53的网络结构,可以看出:

  • BackBone和Neck和Yolov3 baseline一致
  • Head变为了3个Decoupled head,每个Decoupled head都是Anchor-free的多分支形式(cls、obj、reg)
    在这里插入图片描述

3.Yolox-s/Yolox-m/Yolox-l/Yolox-x

在对Yolov3 baseline进行不断优化,获得不错效果的基础上。作者又对Yolov5系列的Yolov5s、Yolov5m、Yolov5l、Yolov5x四个网络结构,也使用上述5个trick进行改进。

(1)输入端:在Mosa数据增强的基础上,增加了Mixup数据增强效果;
(2)Backbone:激活函数采用SiLU函数;
(3)Neck:激活函数采用SiLU函数;
(4)输出端:检测头改为Decoupled Head、采用anchor free、multi positives、SimOTA的方式。

以下是Yolox-s的网络结构图
在这里插入图片描述

4.Yolox-Nano/Yolox-Tiny

针对边缘设备部署需求,构建了两个轻量级网络:

  • 针对Yolov4-Tiny,构建了Yolox-Tiny网络结构。
  • 针对FCOS 风格的NanoDet,构建了Yolox-Nano网络结构。

二、YOLOx的创新点

  • 结合最新最先进的一些tricks改进了YOLO系列网络,达到了速度和精度上新的SOTA
  • 将YOLO系列网络重新引入anchor-free方向,使得模型更加简单易训

总结

YOLOx是继YOLOv4之后新的tricks集大成者,在工业上具有重大意义

在这里插入图片描述

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

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

相关文章

【Proteus仿真】【Arduino单片机】汽车车窗除霜系统设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器,使用LCD1602显示模块、光线传感器、DS18B20温度传感器、PCF8691 ADC模块、继电器加热模块等。 主要功能: 系统运行后,LCD…

Linux系统与windows系统设置定时任务的具体操作方法,如数据库自动备份等

设置定时备份 要设置数据库定时备份,你可以使用操作系统的定时任务功能来自动执行 backup.sh 脚本(此脚本可关注文末公众号回复04获取)。不同的操作系统有不同的方法来设置定时任务,但一般来说,你可以按照以下步骤进行操作: 打开…

python_selenium零基础爬虫学习案例_知网文献信息

案例最终效果说明: 去做这个案例的话是因为看到那个博主的分享,最后通过努力,我基本实现了进行主题、关键词、更新时间的三个筛选条件去获取数据,并且遍历数据将其导出到一个CSV文件中,代码是很简单的,没有…

.NET Framework 与 .NET Core 与 .NET Standard 之间的差异

介绍 在本文中,我们将探讨 .NET Framework、.NET Core 和 .NET Standard 之间的差异。 .NET Framework 与 .NET Core .NET框架.NET核心 历史 .NET Framework 是 .NET 的第一个实现。 .NET Core 是 .NET 的最新实现。 开源 .NET Framework 的某些组件是开源的。 .N…

【python可视化大屏】使用python实现可拖拽数据可视化大屏

介绍: 我在前几期分享了关于爬取weibo评论的爬虫,同时也分享了如何去进行数据可视化的操作。但是之前的可视化都是单独的,没有办法在一个界面上展示的。这样一来呢,大家在看的时候其实是很不方便的,就是没有办法一目了…

vue项目完整搭建与启动

vue项目完整搭建与启动 一,安装node环境二,安装vue脚手架(vue-cli)1.cnpm(淘宝镜像安装)2.npm安装3.yarn安装 三,创建vue项目四,cmd切换目录方式1方式2 一,安装node环境 1.下载地址…

uniapp微信小程序投票系统实战 (SpringBoot2+vue3.2+element plus ) -我创建的投票列表实现

锋哥原创的uniapp微信小程序投票系统实战: uniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )_哔哩哔哩_bilibiliuniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )共计21条视频…

GitLab clone 地址 不对

1丶问题描述 2丶解决方案 解决方案: 找到挂载到宿主机配置文件:gitlab.rb vi gitlab.rb 改成自己的ip 重启容器 docker restart gitlab 如果发现容器一直重启,可采用粗暴的方法,直接干掉当前容器,重新运行一个 …

SpringMVC-异常处理及常用组件

异常处理器 1.基于配置的异常处理 springmvc提供了一个处理控制器方法执行过程中所出现的异常的接口: HandlerExceptionResolver HandlerExceptionResolver接口的实现类有: DefaultHandlerExceptionResolver和SimpleMappingExceptionResolver springmvc提供了自定义的异常处…

Apache Doris (六十二): Spark Doris Connector - (2)-使用

🏡 个人主页:IT贫道-CSDN博客 🚩 私聊博主:私聊博主加WX好友,获取更多资料哦~ 🔔 博主个人B栈地址:豹哥教你学编程的个人空间-豹哥教你学编程个人主页-哔哩哔哩视频 目录 1. 将编译jar包加入本地Maven仓库

全版本Windows RCE漏洞复现CVE-2023-36025

漏洞简介 CVE-2023-36025是微软于11月补丁日发布的安全更新中修复Windows SmartScreen安全功能绕过漏洞。攻击者可以通过诱导用户单击特制的URL来利用该漏洞,对目标系统进行攻击。成功利用该漏洞的攻击者能够绕过Windows Defender SmartScreen检查及其相关提示。该漏…

2024年【R2移动式压力容器充装】考试资料及R2移动式压力容器充装理论考试

题库来源:安全生产模拟考试一点通公众号小程序 R2移动式压力容器充装考试资料根据新R2移动式压力容器充装考试大纲要求,安全生产模拟考试一点通将R2移动式压力容器充装模拟考试试题进行汇编,组成一套R2移动式压力容器充装全真模拟考试试题&a…

Node.js和npm

目录 01_Node.js01.什么是 Node.js目标讲解小结 02.fs模块-读写文件目标讲解小结 03.path模块-路径处理目标讲解小结 04.案例-压缩前端html目标讲解小结 05.认识URL中的端口号目标讲解小结 06.http模块-创建Web服务目标讲解小结 07.案例-浏览时钟目标讲解小结 02_Node.js模块化…

02-python的基础语法-01python字面量/注释/数据类型/数据类型转换

字面量 在代码中,被写下来的固定的值,被称为字面量。 python中哪些值是可以被写出来的呢?又该如何写呢? 字符串:又称文本,是由任意数量的字符如中文,英文,各类符号,数字组成。 这…

ES-极客学习第二部分ES 入门

基本概念 索引、文档、节点、分片和API json 文档 文档的元数据 需要通过Kibana导入Sample Data的电商数据。具体参考“2.2节-Kibana的安装与界面快速浏览” 索引 kibana 管理ES索引 在系统中找到kibana配置文件(我这里是etc/kibana/kibana.yml) vim /…

esp32UART串口外设(Arduino)

通用异步接收器/发送器 (UART) 介绍 通用异步接收器/发送器 (UART) 是一种硬件功能,它使用广泛采用的异步串行通信接口(如 RS232、RS422 和 RS485)处理通信(即时序要求和数据成帧&…

Vue-9、Vue事件修饰符

1、prevent 阻止默认事件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>事件修饰符</title><!--引入vue--><script type"text/javascript" src"https://cdn.jsdeliv…

用html和css实现一个加载页面【究极简单】

要创建一个简单的加载页面&#xff0c;你可以使用 HTML 和 CSS 来设计。以下是一个基本的加载页面示例&#xff1a; HTML 文件 (index.html): <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"…

JavaScript中解锁Map和Set的力量

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;《爱蹦跶的大A阿》 &#x1f525;当前正在更新专栏&#xff1a;《VUE》 、《JavaScript保姆级教程》、《krpano》 ​ ​ ✨ 前言 ES6带来了Map和Set两个新的数据结构 - 它们分别用于存放键值对和唯一值。Map和Set提供了更…

深入浅出Go语言:匿名函数的原理和实践案例

深入浅出Go语言&#xff1a;匿名函数的原理和实践案例 引言匿名函数的基础实际应用案例一实际应用案例二性能考虑最佳实践与常见错误结语 引言 在Go语言的世界里&#xff0c;有一个功能强大且灵活的编程元素值得每位开发者深入了解——匿名函数。作为Go语言核心特性之一&#…