目标检测-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集大成者,在工业上具有重大意义

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HackTheBox - Medium - Linux - Shared

Shared Shared 是一台中等难度的 Linux 机器,它具有通向立足点的 Cookie SQL 注入,然后通过对 Golang 二进制文件进行逆向工程并利用两个 CVE 来获得 root shell 来提升权限。 外部信息收集 端口扫描 循例nmap Web枚举 查看证书 看到这个扫了一下vhos…

骑砍战团MOD开发(36)-千人千面

骑砍1战团mod开发-千人千面_哔哩哔哩_bilibili骑砍1战团mod开发-千人千面, 视频播放量 5、弹幕量 0、点赞数 0、投硬币枚数 0、收藏人数 1、转发人数 0, 视频作者 霸王奉先, 作者简介 csdn:blog.csdn.net/qq_35829452project:gitcode.net/users/qq_35829452,相关视频…

【解决方案】 无法将“pip“项识别为 cmdlet、函数、脚本文件

在当今的软件开发和运维领域,Python已经成为了一个不可或缺的工具。而pip,作为Python的包管理工具,更是Python生态系统中不可或缺的一部分。然而,有时候我们可能会遇到一个令人困扰的问题:无法将“pip”项识别为cmdlet…

【思扬赠书 | 第2期】语义解析为何作为连接自然语言与机器智能的桥梁?

⛳️ 写在前面参与规则!!! ✅参与方式:关注博主、点赞、收藏、评论,任意评论(每人最多评论三次) ⛳️本次送书1~4本【取决于阅读量,阅读量越多,送的越多】 文章目录 01 …

汽车中的ECU、VCU、MCU、HCU

一、ECU是汽车电脑,刷汽车电脑可以提高动力,也可以减低动力,看需求。 简单原理如下。 1.汽车发动机运转由汽车电脑(即ECU)控制。 2.ECU控制发动机的进气量,喷油量,点火时间等,从而…

用PDETool计算磁场

学习FEM和磁场,Matlab中的PDETool可以直观的展示数学的结果。 在PDETool中计算磁场的步骤如下: 1.启动matalb,输入命令pdetool 2.画三个矩形 3.在工具栏的下拉列表中选Magnetostatics 4.设置区域电密 在PDE菜单中,选择PDEmode…

AI大模型引领未来智慧科研暨ChatGPT在地学、GIS、气象、农业、生态、环境应用

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮,可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…

8年测试总结,正确的自动化测试实施-单元/接口/Web自动化...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 今天给大家分享自…

苹果电脑Markdown写作工具:ulysses mac软件介绍

ulysses for mac是一款Markdown写作工具,支持Markdown拼写检查、语音识别、iCloud同步、版本管理等功能,并且可以导出为 PDF、word、RTF、TXT、Markdown、HTML 和 ePub等文件格式。 ulysses for mac软件介绍 适用于Mac,iPad和iPhone的终极写…

【码银送书第十一期】《自然语言生成SQL与知识图谱问答实战》

语义解析技术可以提高人机交互的效率和准确性,在自然语言处理、数据分析、智能客服、智能家居等领域都有广泛的应用前景。特别是在大数据时代,语义解析能够帮助企业更快速地从大量的数据中获取有用的信息,从而提高决策效率。 01 语义解析的应…

数据库:如何取消mysql的密码

因为调试MySQL数据接口,总是需要输入密码很烦,所以决定取消mysql的root密码, 网上推荐的有两种方法: 1、mysql命令 SET PASSWORD FOR rootlocalhostPASSWORD(); 2、运行 mysqladmin 命令 mysqladmin -u root -p password …

中国IT产经新闻:新能源汽车发展前景与燃油车的利弊之争

随着科技的进步和环保意识的提高,新能源汽车在全球范围内逐渐受到重视。然而,在新能源汽车迅速发展的同时,燃油车仍然占据着主导地位。本文将从新能源与燃油车的利弊、新能源汽车的发展前景两个方面进行分析,以期为读者提供全面的…

无线信号强度测试板/射频产品量产测试神器

目录 一、测试板特点 二、应用场景 三、芯片特点 四、测试板接口图 …

Freertos:

裸机编程通过中断实现不同任务的切换,实际上RTOS中通过不断更换CPU的使用权达到多任务运行的目的。FreeRTOS 中任务存在四种任务状态,分别为运行态、就绪态、阻塞态和挂起态。任务一般通过函数 vTaskSuspend()和函数 vTaskResums()进入和退出挂起态&…

为什么流不关闭会导致内存泄漏

引言 经常有人告诉你流用完要记得关,不然会导致内存泄漏,但你是否考虑过下面这些问题: 为什么流不关会导致内存泄漏?JVM不是有垃圾回收机制吗?这些引用我用完不就变垃圾了为什么不会被回收呢?流未关闭除了导致内存泄…

分布式(5)

目录 22.什么是Paxos算法?如何实现? 24.全局唯一ID有哪些实现方案? 25.数据库方式实现方案?有什么缺陷? 22.什么是Paxos算法?如何实现? Paxos算法是Lamport宗师提出的一种基于消息传递的分布…

【2024系统架构设计】 系统架构设计师第二版-通信系统架构设计理论与实践

目录 一 通信系统网络架构 二 网络构建的关键技术 三 网络构建和设计方法 四 案例分析 注:本节内容可作为知识储备,做一个基本的了解即可。

sonarqube配置本地扫描代码

一、本地maven设置setting文件&#xff1a; 1&#xff09;添加pluginGroup <pluginGroups><pluginGroup>org.sonarsource.scanner.maven</pluginGroup></pluginGroups> 2&#xff09;添加profile&#xff1a; <profile><id>sonar</i…

抓包神技--DPDK

DPDK&#xff0c;全称Data Plane Development Kit&#xff0c;是一个高性能的数据包处理工具集。估计有不少朋友使用过或者之前了解过&#xff0c;它通过绕过Linux内核协议栈&#xff0c;直接在用户空间进行数据包处理&#xff0c;大大提高了数据包处理的效率和吞吐量。 DPDK主…

Google Breakpad使用方法

源码下载地址&#xff1a;https://chromium.googlesource.com/breakpad/breakpad 依赖头文件下载地址&#xff1a; https://chromium.googlesource.com/linux-syscall-support Breakpad由三个主要组件&#xff1a; client 是一个库, 以library的形式内置在应用中&#xff0c…