yolox相关

yolox

  • YOLOX
  • YOLOX-DarkNet53
    • yolov3作为baseline
    • 输入端
      • Strong data augmentation
        • Mosaic数据增强
        • MixUp数据增强
        • 注意
    • Backbone
    • Neck
    • Prediction层
      • Decoupled head
        • Decoupled Head 细节
      • Anchor-free
        • Anchor Based方式
        • Anchor Free方式
          • 标签分配
            • 初步筛选
            • 精细化筛选 SimOTA
            • SimOTA
  • Other Backbones
    • Yolox-s、l、m、x系列

参考:
B站论文详解
YOLOX解读与感想
江大白 深入浅出Yolo系列之Yolox核心基础完整讲解

windows10搭建YOLOx环境 训练+测试+评估
江大白 深入浅出Yolox之自有数据集训练超详细教程

YOLOX

yolox主要提出解耦Head、anchor-free和SimOTA
Yolox-s是在Yolov5-s的基础上,进行的改进

YOLOX-DarkNet53

Yolox-Darknet53是在Yolov3的基础上,进行的改进

yolov3作为baseline

用BCE的loss训练分类和objectness置信度 的分支 ,用IOU的loss训练Regesison。对IOU的改进可以大大提高yolo系列网络收敛的速度,成为改进yolov3 的标配。
会使用一些mosaic和RandomHorizontalFlip的augmentation的方式
FPN自顶向下,将高层的特征信息,通过上采样的方式进行传递融合,得到进行预测的特征图。
而在Yolov4、Yolov5、甚至Yolox-s、l等版本中,都是采用FPN+PAN的形式,这里需要注意。

Yolov3_spp网络
Yolov3_spp网络
Yolox-Darknet53网络结构
Yolox-Darknet53
对Yolox-Darknet53网络结构进行拆分,变为四个板块:
① 输入端:Strong augmentation数据增强
② BackBone主干网络:主干网络没有什么变化,还是Darknet53。
③ Neck:没有什么变化,Yolov3 baseline的Neck层还是FPN结构。
④ Prediction:Decoupled Head、End-to-End YOLO、Anchor-free、Multi positives。

输入端

Strong data augmentation

加入了 Mosaic 和 MixUp,和yolov5一样。

Mosaic数据增强

随机缩放、随机裁剪、随机排布

MixUp数据增强

将Image_1和Image_2,加权融合

注意

在最后的15个epoch关掉。
由于采取了更强的数据增强方式,使用强大的数据增强后,发现ImageNet预训练没有用了,所以所有的模型都是从头训练。

Backbone

在这里插入图片描述
Yolox-Darknet53的Backbone主干网络,和原本的Yolov3 baseline的主干网络都是一样的

Neck

在这里插入图片描述
Yolox-Darknet53和Yolov3 baseline的Neck结构,也是一样的,都是采用FPN的结构进行融合
FPN自顶向下,将高层的特征信息,通过上采样的方式进行传递融合,得到进行预测的特征图。
FPN

而在Yolov4、Yolov5、甚至后面讲到的Yolox-s、l等版本中,都是采用FPN+PAN的形式,这里需要注意。
PAN

Prediction层

输出层中,主要从四个方面进行讲解:Decoupled Head、Anchor Free、标签分配、Loss计算。
在这里插入图片描述

Decoupled head

随着yolo系列的backbone和特征金字塔(FPN,PAN)不断演变,他们都是耦合。实验表明,耦合探测头可能会损害性能
Decoupled head对于端到端版本的YOLO至关重要,才能进行anchor free。
在这里插入图片描述

对于每一层FPN特征。包含一个1×1 conv层以减小通道尺寸(将特征通道减少到256),然后是两个分别具有两个3×3 conv层的并行分支(分别用于分类和回归),IoU分支添加到回归分支上。

yolov3~v5就是把FPN的输出放到head里面输出,这个矩阵的大小是HW(C+4+1)

在这里插入图片描述
上图右面的Prediction中,我们可以看到,有三个Decoupled Head分支。
但是需要注意的是:将检测头解耦,会增加运算的复杂度。
因此作者经过速度和性能上的权衡,最终使用 1个1x1 的卷积先进行降维,并在后面两个分支里,各使用了 2个3x3 卷积,最终调整到仅仅增加一点点的网络参数。

Decoupled Head 细节

在这里插入图片描述
将Yolox-Darknet53中,Decoupled Head①提取出来,经过前面的Neck层,这里Decouple Head①输入的长宽为2020。
从图上可以看出,Concat前总共有三个分支:
(1)cls_output:主要对目标框的类别,预测分数。因为COCO数据集总共有80个类别,且主要是N个二分类判断,因此经过Sigmoid激活函数处理后,变为20
2080大小。
(2)obj_output:主要判断目标框是前景还是背景,因此经过Sigmoid处理好,变为20
201大小。
(3)reg_output:主要对目标框的坐标信息(x,y,w,h)进行预测,因此大小为20
204。
最后三个output,经过Concat融合到一起,得到20
20*85的特征信息。

Decoupled Head②输出特征信息,并进行Concate,得到404085特征信息。
Decoupled Head③输出特征信息,并进行Concate,得到808085特征信息。
再对①②③三个信息,进行Reshape操作,并进行总体的Concat,得到840085的预测信息。
并经过一次Transpose,变为85
8400大小的二维向量信息。
这里的8400,指的是预测框的数量,而85是每个预测框的信息(reg,obj,cls)。

有了预测框的信息,下面了解如何将这些预测框和标注的框,即groundtruth进行关联,从而计算Loss函数,更新网络参数

Anchor-free

Anchor Based方式

Yolov3、Yolov4、Yolov5中,通常都是采用Anchor Based的方式,来提取目标框,进而和标注的groundtruth进行比对,判断两者的差距。
比如输入图像,经过Backbone、Neck层,最终将特征信息,传送到输出的Feature Map中。这时,就要设置一些Anchor规则,将预测框和标注框进行关联。从而在训练中,计算两者的差距,即损失函数,再更新网络参数。
比如在yolov3_spp,最后的三个Feature Map上,基于每个单元格,都有三个不同尺寸大小的锚框。

Anchor Free方式

锚定机制增加了检测头的复杂性,以及每个图像的预测数量。
减少了设计参数的数量
每个位置的预测从三个变成一个,同时输出四个值:网格左上角的两个偏移量以及预测框的高度和宽度。
直接把每个物体的中心点当做正样本。预先定义比例范围,以指定每个对象的FPN级别

yolox把原来的yolo的anchor-based框架改成了anchor-free框架。
在这里插入图片描述
最后黄色的858400,不是类似于Yolov3中的Feature Map,而是特征向量。当输入为640640时,最终输出得到的特征向量是85*8400。

在这里插入图片描述
将前面Backbone中,下采样的大小信息引入进来。最上面的分支,下采样了5次,2的5次方为32。并且Decoupled Head①的输出,为202085大小。
在这里插入图片描述
因此如上图所示:
最后8400个预测框中,其中有400个框,所对应锚框的大小,为3232。
同样的原理,中间的分支,最后有1600个预测框,所对应锚框的大小,为16
16。
最下面的分支,最后有6400个预测框,所对应锚框的大小,为8*8。

当有了8400个预测框的信息,每张图片也有标注的目标框的信息。
这时的锚框,就相当于桥梁。
这时需要做的,就是将8400个锚框,和图片上所有的目标框进行关联,挑选出正样本锚框。
而相应的,正样本锚框所对应的位置,就可以将正样本预测框,挑选出来。

这里采用的关联方式,就是标签分配。

标签分配

当有了8400个Anchor锚框后,这里的每一个锚框,都对应85*8400特征向量中的预测框信息。
不过需要知道,这些预测框只有少部分是正样本,绝大多数是负样本。
需要利用锚框和实际目标框的关系,挑选出一部分适合的正样本锚框。

如何挑选正样本锚框,涉及到两个关键点:初步筛选、SimOTA

初步筛选

指出了yolov3里的问题,仅为每个对象选择一个正样本(中心位置),同时忽略其他高质量预测框,但是这些高质量预测框是有助于网络收敛的。
Multi positives:将中心3×3区域指定为正(落在这个区域所有的预测框),在FCOS中也称为“中心采样”

初步筛选的方式主要有两种:根据中心点来判断、根据目标框来判断
根据中心点来判断:寻找anchor_box中心点,落在groundtruth_boxes矩形范围的所有anchors。groundtruth的矩形框范围确定了,再根据范围去选择适合的锚框。
根据目标框来判断:以groundtruth中心点为基准,设置边长为5的正方形,挑选在正方形内的所有锚框。groundtruth正方形范围确定了,再根据范围去挑选锚框。

经过上面两种挑选的方式,就完成初步筛选了,挑选出一部分候选的anchor,进入下一步的精细化筛选。

精细化筛选 SimOTA

主要分为四个阶段:
a.初筛正样本信息提取
b.Loss函数计算
c.cost成本计算
d.SimOTA求解

SimOTA

label assignment 标签分配四个关键
1). loss/quality aware,
2). center prior,
3). dynamic number of positive anchors for each ground-truth (abbreviated as dynamic top-k),
4). global view.
满足这四个条件就会有比较好的 label assignment

流程如下:
设置候选框数量
通过cost挑选候选框
过滤共用的候选框
Loss计算(可以看到:检测框位置的iou_loss,Yolox中使用传统的iou_loss,和giou_loss两种,可以进行选择。而obj_loss和cls_loss,都是采用BCE_loss的方式。)

Other Backbones

除了DarkNet53之外还测试了其他不同尺寸的主干上的YOLOX

YOLOv5中改进的CSPNet
Tiny and Nano detectors
模型大小和数据扩充

Yolox-s、l、m、x系列

Yolov5s的网络结构
在这里插入图片描述
Yolox-s的网络结构
在这里插入图片描述
Yolox-s:
(1)输入端:在Mosac数据增强的基础上,增加了Mixup数据增强效果;
(2)Backbone:激活函数采用SiLU函数;
(3)Neck:激活函数采用SiLU函数;
(4)输出端:检测头改为Decoupled Head、采用anchor free、multi positives、SimOTA的方式。



官方数据集结果
在这里插入图片描述

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

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

相关文章

「UG/NX」Block UI 从列表选择部件SelectPartFromList

✨博客主页何曾参静谧的博客📌文章专栏「UG/NX」BlockUI集合📚全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C+&#

DDS信号发生器波形发生器VHDL

名称:DDS信号发生器波形发生器 软件:Quartus 语言:VHDL 要求: 在EDA平台中使用VHDL语言为工具,设计一个常见信号发生电路,要求: 1. 能够产生锯齿波,方波,三角波&…

【开发篇】十二、缓存框架JetCache

文章目录 0、介绍1、JetCache远程缓存2、JetCache本地缓存3、标准配置文件4、JetCache方法缓存注解--Cached5、Cached4、CacheUpdate5、CacheInvalidate6、CacheRefresh7、缓存统计报告 上篇完成了Spring Cache底层技术的各种切换,但各个技术有各自的优缺点&#xf…

STM32G070RBT6-MCU温度测量(ADC)

1、借助STM32CubeMX生成系统及外设相关初始化代码。 在以上配置后就可以生成相关初始化代码了。 /* ADC1 init function */ void MX_ADC1_Init(void) {/* USER CODE BEGIN ADC1_Init 0 *//* USER CODE END ADC1_Init 0 */ADC_ChannelConfTypeDef sConfig {0};/* USER COD…

【Linux】—— 详解软硬链接

前言: 本期,我将要给大家讲解的是有关 Linux下软硬链接的相关知识!!! 目录 前言 (一)理解硬链接 1.什么是硬链接 2.创建硬链接 3.硬链接的使用场景 (二)理解软链接…

区块链(6):p2p去中心化介绍

1 互联网中中心化的服务和去中心化服务的概念介绍 目前的互联网公司大都是中心化的 区块链网络大多是去中心化的 去中心化 2 p2p的简单介绍 java 网络编程:socket编程,netty编程,websoket简单介绍 2.1 节点是如何提供服务的(web编程实现)

目标检测:FROD: Robust Object Detection for Free

论文作者:Muhammad,Awais,Weiming,Zhuang,Lingjuan,Lyu,Sung-Ho,Bae 作者单位:Sony AI; Kyung-Hee University 论文链接:http://arxiv.org/abs/2308.01888v1 内容简介: 1)方向:目标检测 2)…

jmeterbeanshell调用jsonpath获取对应值

1.jmeter 新建线程组、Java Request、BeanShell Assertion、View Results Tree 2、在BeanShell Assertion中贴入代码: import org.apache.jmeter.extractor.json.jsonpath.JSONManager; import java.util.List; JSONManager js new JSONManager(); String jsonStr…

Easysearch 压缩功能的显著提升:从 8.7GB 到 1.4GB

引言 在海量数据的存储和处理中,索引膨胀率是一个不可忽视的关键指标。它直接影响了存储成本和查询性能。近期,Easysearch 在这方面取得了显著的进展,其压缩功能的效果远超过了之前的版本。本文将详细介绍这一进展。 Easysearch 各版本压缩性…

广告牌安全监测系统,用科技护航大型广告牌安全

城市的街头巷尾,处处可见高耸的广告牌,它们以各种形式和颜色吸引着行人的目光。然而,作为城市景观的一部分,广告牌的安全性常常被我们所忽视。广告牌量大面大,由于设计、材料、施工方法的缺陷,加上后期的检…

No145.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

多线程学习

并发:交替运行 并行:一起运行 多线程实现方式 继承Thread类 ①自己定义一个类继承Thread public class MyThread extends Thread{public void run(){}} ②重写run方法 public class MyThread extends Thread{public void run(){"重写的内容&…

基于Java的学生选课管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

umi4中的配置问题,我想用umirc.ts中alias配置没起作用。是我的用法不对吗?

在文件中直接配置是不生效的 alias: {: /src,components: /src/components,components: /src/components, },解决: 具体查看官方文档:https://umijs.org/docs/api/config#chainwebpack 配置之后,在页面中引用会有ts警告,原因在于…

云部署家里的服务器

1.固定静态ip 查看ip地址,en开头的 ifconfig查看路由器ip,via开头的 ip route修改配置文件 cd /etc/netplan/ #来到这个文件夹 sudo cp 01-network-manager-all.yaml 01-network-manager-all.yaml.bak #先备…

No142.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

基于微信小程序的新闻发布平台小程序设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能:具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

SpringMVC 学习(八)整合SSM

10. 整合 SSM (1) 新建数据库 CREATE DATABASE SSM;USE SSM;DROP TABLE IF EXISTS BOOKS;CREATE TABLE BOOKS (BOOK_ID INT(10) NOT NULL AUTO_INCREMENT COMMENT 书ID,BOOK_NAME VARCHAR(100) NOT NULL COMMENT 书名,BOOK_COUNTS INT(11) NOT NULL COMMENT 数量,DETAIL VARCH…

科技云报道:大模型的阴面:无法忽视的安全隐忧

科技云报道原创。 在AI大模型的身上,竟也出现了“to be or not to be”问题。 争议是伴随着大模型的能力惊艳四座而来的,争议的核心问题在于安全。安全有两个方面,一个是大模型带来的对人类伦理的思考,一个是大模型本身带来的隐…

私有继承和虚函数私有化能用么?

源起 以前就知道private私有化声明关键字,和virtual虚函数关键字两者并不冲突,可以同时使用。 但是,它所表示的场景没有那么明晰,也觉得难以理解,直到近段时间遇到一个具体场景。 场景 借助ACE遇到的问题进行展示 …