目标检测-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、YOLOv8均为anchor-free算法,同时一些anchor-based算法也诞生了anchor-free版本,如YOLOv5u、YOLOv7u


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

一、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.hqwc.cn/news/344384.html

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

相关文章

Java入门IDEA基础语法

1:Java入门 1.1 Java简介 Java是什么: Java是一门非常优秀的计算机语言 语言:人与人交流沟通的表达方式 计算机语言:人与计算机之间进行信息交流沟通的一种特殊语言 Java之父:詹姆斯高斯林(James Gosli…

2-Linux-应用-部署icwp-Linux虚拟机【Django+Vue+Nginx+uwsgi+Linux】

本文概述 本文章讲述基于Linux CentOS 7系统(虚拟机),部署DjangoVue开发的前后端分离项目。 项目源码不开放,但是操作步骤可以借鉴。 该文章将项目部署在Linux虚拟机上,暂不使用Docker 相关指令尽量展示执行路径&am…

[机缘参悟-125] :实修 - “心性、自性”与“知识、技能”的区别,学习、修、悟的区别?

目录 一、“知识、技能” 1.1 什么是知识技能 1.2 知识、技能的位置 1.3 知识、技能的学习方法 二、"明心见性" 2.1 什么是"明心见性" 2.2 "明心见性"解读 2.2.1 何其自性,本自清净; 2.2.2 何其自性,…

简易机器学习笔记(十一)opencv 简易使用-人脸识别、分类任务

前言 前段时间摸了下机器学习,然后我发现其实openCV还是一个很浩瀚的库的,现在也正在写一篇有关yolo的博客,不过感觉理论偏多,所以在学yolo之前先摸一下opencv,简单先写个项目感受感受opencv。 流程 openCV实际上已…

TypeScript学习笔记、鸿蒙开发学习笔记

变量定义方式 # 变量声明 let msg: string douzi console.log(msg) let num: number 20 console.log(num) let end: boolean true console.log("end" end) let a: any 10 a douzi console.log(a) let p {name:"douzi",age:20} console.log(p.name)…

重磅!OpenAI正式发布,自定义ChatGPT商店!

1月11日凌晨,OpenAI在官网正式发布了,自定义GPT商店,可以帮助用户找到目前最好用、流行的自定义ChatGPT助手。 在2024年第一季度,OpenAI将启动GPT 开发者收入计划。首先,美国地区的开发者将根据用户对其 GPT 的使用情…

【数据库原理】(24)数据库安全性策略

数据库安全性是数据库管理系统(DBMS)中一个至关重要的方面。它指的是保护数据库免受非授权访问和恶意操作,包括数据泄露、修改、破坏等。 多层安全模型 在典型的计算机系统安全模型中,安全措施被设置在不同层级: 应用…

函数式编程 - 组合compose的使用方法

函数式编程中有一个比较重要的概念就是函数组合(compose),组合多个函数,同时返回一个新的函数。调用时,组合函数按顺序从右向左执行。右边函数调用后,返回的结果,作为左边函数的参数传入,严格保…

Netty开篇——NIO章上(三)

Java NIO基本介绍 java non-blocking I/O 称为NIO(也叫New IO)。JDK4开始提供,同步非阻塞相关内容在 java.nio 包及子包下,对java.io 包中的很多类进行改写。三大核心: Channel(通道),Buffer(缓冲区),Selector(选择器)NIO是面向缓冲区或者面向块编程的。…

最佳实践:如何在 SoapUI 中进行 REST 服务的测试

SoapUI 频繁地被选择为 SOAP 和 REST API 的自动化测试利器,得益于其友好的用户界面,测试人员毫不费力便可校验 REST 和 SOAP 协议的 Web 服务。它尤其适用于那些需要进行复杂测试的场合。 1、设置接口 我利用了 Swagger 去设置了一批即将投入使用的接…

蓝桥杯省赛无忧 STL 课件13 list

01 list的定义和结构 以下是一个示例&#xff0c;展示如何使用listt容器: #include<bits/stdc.h> using namespace std; int main(){list<int> mylist;//在链表尾部插入元素mylist.push_back(1);mylist.push_back(2);mylist.push_back(3);//在链表头部插入元素 my…

第二证券:A股指数反弹 飞行汽车概念骤然升温

1月11日&#xff0c;A股三大指数集体反弹&#xff0c;成交量温文放大&#xff0c;北向资金午后跑步出场。盘面上&#xff0c;工作板块个股出现普涨态势。翱翔轿车、鸿蒙概念股全天走强&#xff1b;午后新能源龙头放量拉升&#xff0c;带动创业板指快速走高。 到收盘&#xff0…