YOLOX: Exceeding YOLO Series in 2021(2021.8)


文章目录

  • Abstract
  • Introduction
    • 介绍前人的工作
    • 提出问题
    • 解决
  • YOLOX
    • YOLOX-DarkNet53
    • Implementation details
    • YOLOv3 baseline
    • Decoupled head
    • Strong data augmentation
    • Anchor-free
    • Multi positives
    • SimOTA
    • End-to-end YOLO
    • Other Backbones
    • Modified CSPNet in YOLOv5
    • Tiny and Nano detectors
    • Model size and data augmentation
  • Comparison with the SOTA
  • 1st Place on Streaming Perception Challenge(WAD at CVPR 2021)
  • Conclusion

论文链接
源代码

Abstract

在本报告中,我们对YOLO系列进行了一些改进,形成了一种新的高性能探测器- YOLOX。我们将YOLO检测器转换为无锚点方式,并进行其他先进的检测技术,即解耦头和领先的标签分配策略SimOTA,以在大范围的模型中实现最先进的结果

对于只有0.91M参数和1.08G FLOPs的YOLO- Nano,我们在COCO上获得25.3%的AP,比NanoDet高出1.8%;对于工业中应用最广泛的探测器之一YOLOv3,我们将其在COCO上的AP提高到47.3%,比目前的最佳实践高出3.0% AP;对于参数数量与YOLOv4- CSP、YOLOv5-L大致相同的YOLOX-L,我们在Tesla V100上以68.9 FPS的速度在COCO上实现了50.0%的AP,比YOLOv5-L高出1.8% AP。此外,我们使用单个YOLOX-L模型获得了流感知挑战赛(CVPR 2021自动驾驶研讨会)的第一名

我们希望这份报告能在实际场景中为开发人员和研究人员提供有用的经验,同时我们也提供了支持ONNX、TensorRT、NCNN和Openvino的部署版本

Introduction

介绍前人的工作

随着目标检测技术的发展,YOLO系列一直在追求实时应用中速度和精度的最佳权衡,他们提取了当时可用的最先进的检测技术(例如,YOLOv2的锚点,YOLOv3的残差网络),并优化了最佳实践的实现

提出问题

尽管如此,在过去两年中,目标检测学术界的主要进展集中在无锚点检测器,先进标签分配策略和端到端(无nms)检测器,而这些还没有被整合到YOLO家族中,如yolo4和YOLOv5仍然是基于锚点的检测器,使用手工制定的训练分配规则

解决

这就是把我们带到这里的原因,通过经验丰富的优化,我们为YOLO系列提供这些最新的进步,我们选择YOLOv3作为起点(我们将YOLOv3- spp设置为默认的YOLOv3)

如图1所示,我们在640 × 640分辨率的COCO上将YOLOv3的AP提高到47.3% (YOLOv3 - darknet53),大大超过了目前YOLOv3的最佳实践(44.3% AP, ultralytics version2)
更重要的是,当切换到采用先进的CSPNet骨干网和额外的PAN头的先进YOLOv5架构时,YOLOX-L在640 × 640分辨率的COCO上达到50.0%的AP,比对应的YOLOv5- L高出1.8%的AP
我们还在小尺寸模型上测试了我们的设计策略(右图)。YOLOX-Tiny和YOLOX-Nano(仅0.91M参数和1.08G FLOPs)分别比对应的YOLOv4-Tiny和NanoDet3分别高出10%和1.8%的AP

YOLOX

YOLOX-DarkNet53

我们选择YOLOv3与Darknet53作为我们的baseline(即参照物)

Implementation details

我们的训练设置从baseline到最终模型基本上是一致的。我们在COCO train2017上对模型进行了总共300次的训练,其中有5次warmup。我们使用随机梯度下降(SGD)进行训练。我们使用的学习率为lr×BatchSize/64(线性缩放),初始lr = 0.01,余弦lr调度。权重衰减为0.0005,SGD动量为0.9。典型的8 gpu设备的批处理大小默认为128,本报告中的FPS和延迟都是在单个Tesla V100上以fp16精度和batch=1测量的

YOLOv3 baseline

我们的baseline采用了DarkNet53骨干网和SPP层的架构,在一些论文中称为YOLOv3-SPP。与原始实现相比,我们略微改变了一些训练策略,增加了EMA权值更新、余弦调度、IoU损失和IoU感知分支。我们将BCE Loss用于训练类和对象分支,IoU Loss用于训练区域分支

对于数据增强,我们只执行RandomHorizontalFlip, ColorJitter和multi-scale,而放弃RandomResizedCrop策略,因为我们发现RandomResizedCrop与计划的mosaic增强有点重叠

有了这些改进,我们的baseline在COCO val上达到38.5%的AP,如表2所示

Decoupled head

在目标检测中,分类任务和回归任务之间的冲突是一个众所周知的问题。因此,解耦头部分类和定位被广泛应用于大多数一阶段和二阶段检测器中。然而,随着YOLO系列的主干和特征金字塔(如FPN、PAN)的不断演化,它们的检测头仍然保持耦合,如图2所示

对于每一层FPN特征,我们首先采用1 × 1的conv层将特征通道减少到256个,然后添加两个并行分支,每个分支有两个3 × 3的conv层,分别用于分类和回归任务,并在回归分支上添加IoU分支

我们的两个分析实验表明,耦合检测头可能会损害性能:1)将YOLO的头部替换为解耦的头部,大大提高了收敛速度,如图3所示
2)解耦头对于端到端版本的YOLO至关重要

从表1可以看出,耦合封头的端到端特性降低了4.2% AP,而解耦封头的端到端特性降低到0.8% AP

Strong data augmentation

我们将Mosaic和MixUp添加到我们的增强策略中,以提高YOLOX的性能,结果见表2,提示了2.4的AP

Anchor-free

YOLOv4和YOLOv5都遵循了YOLOv3原有的基于锚点的管道。然而,锚点机制有许多已知的问题
首先,为了达到最优的检测性能,需要在训练前进行聚类分析,确定一组最优的锚点。这些聚集的锚点是特定于领域的,泛化程度较低
其次,锚定机制增加了检测头的复杂性,以及每个图像的预测数量。在一些边缘AI系统中,在设备之间移动如此大量的预测(例如,从NPU到CPU)可能会成为整体延迟方面的潜在瓶颈

无锚机制显著减少了需要启发式调优的设计参数的数量和涉及的许多技巧(例如,Anchor Clustering , Grid Sensitive),以获得良好的性能,使检测器,特别是其训练和解码阶段,相当简单

将YOLO切换到无锚的方式非常简单。我们将每个位置的预测从3个减少到1个,并使它们直接预测4个值,即网格左上角的两个偏移量,以及预测框的高度和宽度,我们将每个对象的中心位置指定为正样本,并预先定义刻度范围,以指定每个对象的FPN级别

Multi positives

为了与YOLOv3的分配规则保持一致,上述无锚版本为每个对象均值只选择一个阳性样本(中心位置),而忽略其他高质量的预测。然而,优化这些高质量的预测也可能带来有益的梯度,这可能会缓解训练过程中正/负抽样的极端不平衡
我们简单地将中心3×3区域赋值为阳性,在FCOS中也称为“中心采样”。如表2所示,检测器的性能提高到45.0% AP,已经超过了当前的最佳实践ultralytics-YOLOv3 (44.3% AP)

SimOTA

高级标签分配是近年来目标检测的又一重要进展。基于我们自己的研究OTA,我们总结了高级标签分配的四个关键见解:1).损失/质量意识,2).中心先验,3).每个基本真理的正锚点的动态数量(简称为动态top-k), 4).全局视图。OTA满足上述所有四条规则,因此我们选择它作为候选标签分配策略

具体而言,OTA从全局角度分析标签分配问题,并将分配过程表述为一个最优运输(Optimal Transport, OT)问题,从而产生当前分配策略之间的SOTA性能。然而,在实践中,我们发现使用Sinkhorn-Knopp算法求解OTA问题会带来25%的额外训练时间,这对于训练300个epoch来说是相当昂贵的。因此,我们将其简化为动态top-k策略,称为SimOTA,以获得近似解

SimOTA不仅减少了训练时间,而且避免了Sinkhorn-Knopp算法中额外的求解器超参数。如表2所示,SimOTA将检测器的AP从45.0%提高到47.3%,比SOTA ultralytics-YOLOv3高3.0% AP,显示了高级分配策略的强大

关于OTA的详细介绍

End-to-end YOLO

我们遵循通过消除启发式nms,使目标检测变得更简单
添加两个额外的转换层、一对一的标签分配和停止梯度。这使得检测器能够以端到端方式执行,但会略微降低性能和推理速度,如表2所示。因此,我们将其作为一个可选模块,不涉及我们的最终模型

Other Backbones

除了DarkNet53之外,我们还在其他不同尺寸的骨干上测试了YOLOX,其中YOLOX对所有相应的对应部件都取得了一致的改进

Modified CSPNet in YOLOv5

为了进行公平的比较,我们采用了完全相同的YOLOv5的主干,包括修改后的CSPNet、SiLU激活和PAN头。YOLOX- S、YOLOX- m、YOLOX- l、YOLOX- x型号也遵循其缩放规则。与表3中的YOLOv5相比,我们的模型得到了一致的改善,AP提高了~ 3.0%至~ 1.0%,只有边际时间增加(来自解耦的头部)

Tiny and Nano detectors

我们进一步将模型缩小为YOLOX-Tiny,与YOLOv4-Tiny进行比较。对于移动设备,我们采用深度卷积构建了一个只有0.91M pa参数和1.08G FLOPs的YOLOX-Nano模型。如表4所示,YOLOX在更小的模型尺寸下表现良好

Model size and data augmentation

我们发现,不同尺寸的模型,合适的增强策略是不同的

Comparison with the SOTA

如表6所示,该表中模型的推理速度通常是不受控制的,因为速度随软件和硬件的不同而变化

1st Place on Streaming Perception Challenge(WAD at CVPR 2021)

WAD 2021上的流感知挑战是通过最近提出的度量:流精度 来对准确性和延迟进行联合评估
streaming accuracy
这个指标背后的关键见解是在每个时刻联合评估整个感知堆栈的输出,迫使堆栈考虑在计算发生时应该忽略的流数据量。我们发现在30fps数据流上度量的最佳折衷点是一个推理时间≤33ms的强大模型。因此,我们采用YOLOX-L模型和TensorRT来制作我们的最终模型,以获得第一名的挑战

Conclusion

在本报告中,我们介绍了YOLO系列的一些经验更新,它形成了一个高性能的anchor-free检测器,称为YOLOX。配备了一些最新的先进检测技术,即解耦头部,无锚点和先进的标签分配策略,YOLOX在所有模型尺寸上都比其他同类产品在速度和准确性之间取得了更好的平衡
值得注意的是,我们将YOLOv3的架构提升到了47.3%的AP,超过了目前最佳实践的3.0% AP

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

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

相关文章

Vscode Vim自动切换

在VsCode里安装了Vim插件,由于Vim插件存在Normal和Insert两种模式,会需要经常性的按shift切换中英文,太过麻烦,本文介绍一下如何通过im-select来解决。 首先先确保自己的电脑里装有英文语言包,win10系统下可以使用Win…

【小白专用】VSCode下载和安装与配置PHP开发环境(详细版) 23.11.08

1. 下载VSCode2. 解决VSCode下载速度特别慢3. 安装VSCode 一、VSCode介绍 VSCode 是一款由微软开发且跨平台的免费源代码编辑器;该软件支持语法高亮、代码自动补全、代码重构、查看定义功能,并且内置了命令行工具和 Git 版本控制系统。 二、官方下载地址…

qframework 架构 (作者:凉鞋)使用笔记

一些准则: 根据VIEW->SYSTEM->MODEL的分层架构 初始架构: app. using FrameworkDesign;namespace ShootingEditor2D(项目的命名空间) {public class ShootingEditor2D (游戏名称): Architecture&l…

C++常用格式化输出转换

在C语言中可以用printf以一定的格式打印字符,C当然也可以。 输入输出及命名空间还不太了解的小伙伴可以看一看C入门讲解第一篇。  在C中,可以用流操作符(stream manipulators)控制数据的输出格式,这些流操作符定义在2…

基于SSM的建筑装修图纸管理平台

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

Flink—— Data Source 介绍

Data Source 简介 Flink 做为一款流式计算框架,它可用来做批处理,即处理静态的数据集、历史的数据集;也可以用来做流处理,即实时的处理些实时数据流,实时的产生数据流结果,只要数据源源不断的过来&#xff…

福州湾107㎡三室两厅两卫,温柔如风的奶油原木风,自由浪漫的灵魂。福州中宅装饰,福州装修

今天要分享的是一套面积107平米的奶油原木风三室两厅的案例。设计师于业主诉求中抽丝剥茧,汲取灵感,以大热的现代风格为主,暖色为主基调,配合原木肌理和巧思的质感细节装饰,最终打造出一种自由与惬意的空间。 01丨业 主…

React路由与导航

目录 前言: 什么是React路由? 导航和页面切换 路由参数和动态路由 路由守卫和权限控制 总结 前言: React是一个流行的JavaScript库,用于构建用户界面。在使用React开发Web应用程序时,路由和导航是必不可少的功能…

大语言模型研究进展综述

1、历史 自20世纪50年代图灵测试被提出以来,研究人员一直在探索和开发能够理解并掌握语言的人工智能技术。 作为重要的研究方向之一,语言模型得到了学术界的广泛研究,从早期的统计语言模型和神经语言模型开始,发展到基于Transform…

1、Sentinel基本应用限流规则(1)

Sentinel基本应用&限流规则 1.1 概述与作用 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。缓存、降级和限流是保护微服务系统运行稳定性的三大利器。 缓存:提升系统访问速度和增大系统能处理的容量 降级:当服务出问题或者影…

osgEarth之添加shp

目录 效果 代码 代码分析 加载模式 效果 代码 #include "stdafx.h" #include <osg/Notify> #include <osgGA/StateSetManipulator> #include <osgViewer/Viewer> #include <osgViewer/ViewerEventHandlers>#include <osgEarth/MapNo…

IP-guard WebServer 远程命令执行漏洞

IP-guard WebServer 远程命令执行漏洞 免责声明漏洞描述漏洞影响漏洞危害网络测绘Fofa: app="ip-guard"漏洞复现1. 构造poc2. 访问文件3. 执行命令免责声明 仅用于技术交流,目的是向相关安全人员展示漏洞利用方式,以便更好地提高网络安全意识和技术水平。 任何人不得…

高速信号PCB布局怎么布?(电子硬件)

对于高速信号&#xff0c;pcb的设计要求会更多&#xff0c;因为高速信号很容易收到其他外在因素的干扰&#xff0c;导致实际设计出来的东西和原本预期的效果相差很多。 所以在高速信号pcb设计中&#xff0c;需要提前考虑好整体的布局布线&#xff0c;良好的布局可以很好的决定布…

AI:67-基于深度学习的脱机手写汉字识别

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌在这个漫长的过程,中途遇到了不少问题,但是…

Django(二、静态文件的配置、链接数据库MySQL)

文章目录 一、静态文件及相关配置1.以登录功能为例2.静态文件3.资源访问4.静态文件资源访问如何解决&#xff1f; 二、静态文件相关配置1. 如何配置静态文件配置&#xff1f;2.接口前缀3. 接口前缀动态匹配4. form表单请求方法补充form表单要注意的点 三、request对象方法reque…

阿里云 :推出通义大模型编码助手产品【通义灵码】

本心、输入输出、结果 文章目录 阿里云 &#xff1a;推出通义大模型编码助手产品【通义灵码】前言通义灵码简介主要功能主要功能点 支持的语言和 IDEjetbrains IDEA 安装计费相关弘扬爱国精神 阿里云 &#xff1a;推出通义大模型编码助手产品【通义灵码】 编辑&#xff1a;简简…

SOLIDWORKS --电磁仿真篇

什么是 SIMULIA? 基于3DEXPERIENCE平台的品牌 多学科多领域的协同仿真与分析优化 三大核心仿真领域 结构仿真 流体仿真 SIMULIA电磁仿真是什么? 完备的求解技术&#xff0c;支持从静场、低频到高频、光波的电磁仿真&#xff0c;支持全波仿真、混合仿真、多物理场仿真和场路…

任务管理器的正确使用教程

快捷键 Ctrlshiftesc&#xff1a;进入任务管理器 我以Win11举例 如何给XX排序 给XX排序&#xff0c;点击空白处可以选择某项降序排列&#xff08;可以找到最占用某项资料的程序&#xff09;&#xff0c;再点击空白处可以选择某项升序排列 文件正在使用&#xff0c;如何解决 …

台式电脑怎么无损备份迁移系统到新硬盘(使用傲梅,免费的就可以)

文章目录 前言一、想要将源硬盘上的系统原封不动地迁移到新硬盘上二、准备工作2.具体步骤 总结 前言 半路接手公司一台台式电脑&#xff0c;C盘&#xff08;120g&#xff09;爆红&#xff0c;仅剩几个G&#xff0c;优化了几次&#xff0c;无果后。准备换一个大一点的增到500g。…

Python实现从Labelme数据集中挑选出含有指定类别的数据集

Python实现从Labelme数据集中挑选出含有指定类别的数据集 前言前提条件相关介绍实验环境Labelme数据集中挑选出含有指定类别的数据集代码实现输出结果 前言 由于本人水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评改正。更多精彩内容&#xff0c;可点击进入Python日常小…