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网络
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自顶向下,将高层的特征信息,通过上采样的方式进行传递融合,得到进行预测的特征图。
而在Yolov4、Yolov5、甚至后面讲到的Yolox-s、l等版本中,都是采用FPN+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激活函数处理后,变为202080大小。
(2)obj_output:主要判断目标框是前景还是背景,因此经过Sigmoid处理好,变为20201大小。
(3)reg_output:主要对目标框的坐标信息(x,y,w,h)进行预测,因此大小为20204。
最后三个output,经过Concat融合到一起,得到2020*85的特征信息。
Decoupled Head②输出特征信息,并进行Concate,得到404085特征信息。
Decoupled Head③输出特征信息,并进行Concate,得到808085特征信息。
再对①②③三个信息,进行Reshape操作,并进行总体的Concat,得到840085的预测信息。
并经过一次Transpose,变为858400大小的二维向量信息。
这里的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个预测框,所对应锚框的大小,为1616。
最下面的分支,最后有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的方式。
官方数据集结果
相关文章:

yolox相关
yolox YOLOXYOLOX-DarkNet53yolov3作为baseline输入端Strong data augmentationMosaic数据增强MixUp数据增强注意 BackboneNeckPrediction层Decoupled headDecoupled Head 细节 Anchor-freeAnchor Based方式Anchor Free方式标签分配初步筛选精细化筛选 SimOTASimOTA Other Back…...

递归专题训练详解(回溯,剪枝,深度优先)
1.汉诺塔问题 在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制: (1) 每次只能移动…...

JavaScript系列从入门到精通系列第七篇:JavaScrip当中的运算符,主要涉及JavaScript当中的六大数据类型的四则运算
文章目录 前言 一:算数运算符 1:Number类型的四则运算 2:其他数据类型的四则运算 (一):加法运算 (二):减法运算 3:乘法运算 4:除法运算 5:取模运算 前言 运算符也叫操作符。…...

计算机网络 实验二 交换机的基本配置
实验二 交换机的基本配置 实验目的 • 掌握交换机的配置方式及切换命令; • 掌握交换机端口的基本配置; • 掌握交换机mac地址的查看与管理方法。 实验设备 以太网交换机一台服务器一台PC机五台配置电缆、网线若干 网络拓扑及IP地址分配 给计算…...
Tor网络的全面解析
一、Tor网络概述 Tor网络,即“洋葱路由器”(The Onion Router),是一种用于保护用户隐私、避免网络监控的开源软件,可以实现匿名访问互联网。 Tor网络通过多重加密和随机转发,将用户的流量从多个节点中进行…...

数据集笔记:2015上海地铁一卡通数据
数据地址:上海地铁数据_免费高速下载|百度网盘-分享无限制 (baidu.com) 数据介绍 上海2015年几天的地铁一卡通出入站信息 卡号、交易日期、交易时间、公交线路/地铁站点中文名称、行业名称(公交、地铁、出租、轮渡、PR停车场)、交易金额、交易性质(非优惠、优惠、…...

【小沐学C++】C++ 基于Premake构建工程项目(Windows)
文章目录 1、简介2、下载和安装2.1 下载2.3 快速入门 3、使用3.1 支持的工程文件Project Files3.2 构建设置Build Settings3.3 链接Linking3.4 配置Configurations3.5 平台Platforms3.6 过滤Filters3.7 预设值Tokens 4、测试4.1 测试1:入门例子4.2 测试2:…...

Linux shell编程学习笔记2:我是谁 | who am i ?
〇、更新记录 20230926 补充例子2 一、前言 由于Linux系统的shell有许多种:sh、bash、cshell、tcsh、zsh……这些shell以sh为基础对象,在保持兼容性时又各有有创建,形成自己的功能特点,要想让我们编写的shell代码正确、可靠运行…...
移动端和PC端对比【组件库+调试vconsole +单位postcss-pxtorem+构建vite/webpack+可视化echarts/antv】
目录 组件库 移动端 vue vant PC端 react antd vue element 调试:vconsole vs dev tools中的控制台(Console) vconsole:在真机上调试 postcss-pxtorem:移动端不同的像素密度 构建工具 webpack 原理 Ba…...

maven多模块依赖包程序包xxx不存在
背景 rpc-common 被 rpc-server、rpc-client依赖 项目地址 https://github.com/pjmike/springboot-rpc-demo mvn clean install 打包时报错 报错信息 程序包xxxx不存在 找不到符号 原因分析 原因还不清楚,网友们帮解答一下 解决 主pom.xml 添加 <packaging…...

iOS17.0.2更新修复iPhone 15系列机型数据迁移问题,附新机快速数据迁移办法!
iPhone 15 系列机型已于今日正式发售,为解决iPhone15这些机型出现的数据迁移问题,苹果紧急发布了 iOS 17.0.2 更新,内部版本号为 21A350。 需要注意的是, iOS 17.0.2 更新仅适用于 iPhone 15、iPhone 15 Plus、iPhone 15 Pro 和 …...
面试题库(八):docker和linux
docker docker的原理?dockerfile里面用过什么命令?用过docker?dockerfile写过吗,常用命令,说下分层原理docker 部署有什么好处?docker 的底层原理是什么?namespace 和 cgroups,一个隔离环境,一个控制资源配额。那隔离环境主要隔离什么环境?docker镜像和容器有什么区别…...

深入理解传输层协议:TCP与UDP的比较与应用
目录 前言什么是TCP/UDPTCP/UDP应用TCP和UDP的对比总结 前言 传输层是TCP/IP协议栈中的第四层,它为应用程序提供服务,定义了主机应用程序之间端到端的连通性。在本文章,我们将深入探讨传输层协议,特别是TCP和UDP协议的原理和区别…...
Python-表白小程序练习
测试代码 在结果导向的今天,切勿眼高于顶,不论用任何方法能转换、拿出实际成果东西才是关键,即使一个制作很简易的程序,你想将其最终生成可运行的版本也是需要下一番功夫的。不要努力成为一个嘴炮成功者,要努力成为一个有价值的人…...
浅谈ChatGPT附免费体验地址
首先,让我来介绍一下ChatGPT是什么。ChatGPT是由OpenAI开发的大型语言模型,它代表着自然语言处理领域的最新进展。这个模型是通过大量的数据和先进的深度学习技术训练而成,具备了强大的语言理解和生成能力。 那么,ChatGPT能做些什…...

队列的使用以及模拟实现(C++版本)
🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻强烈推荐优质专栏: 🍔🍟🌯C的世界(持续更新中) 🐻推荐专栏1: 🍔🍟🌯C语言初阶 🐻推荐专栏2: 🍔…...

RV1126笔记四十一:RV1126移植LIVE555
若该文为原创文章,转载请注明原文出处。 RV1126的SDK有提供了一个librtsp.a封装好的RTSP推流库,但不开源,还有个确定延时长,所以想自己写一个RTSP的推流,但不想太麻烦,所以使用Live555。 记录下移植过程和测试结果。 live555需要用到的包有 openssl 和live555 一、 编…...

stable diffusion模型评价框架
GhostReview:全球第一套AI绘画ckpt评测框架代码 - 知乎大家好,我是_GhostInShell_,是全球AI绘画模型网站Civitai的All Time Highest Rated (全球历史最高评价) 第二名的GhostMix的作者。在上一篇文章,我主要探讨自己关于ckpt的发展方向的观点…...

电脑开机慢问题的简单处理
电脑用久了,开机时间要10-20分钟特别慢,一下介绍两种简单有效处理方式,这两种方式经测试不会影响原系统软件的使用: 方式一:禁用非必要启动项【效果不是很明显】 利用360里面的优化加速禁用启动项【禁用启动项还有其…...
SpringMVC-Rest风格
一、简介 REST(Representational State Transfer),表现形式状态转换,它是一种软件架构风格 当我们想表示一个网络资源的时候,可以使用两种方式: 传统风格资源描述形式 http://localhost/user/getById?id1 查询id为1的用户信息…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...

基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...

回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...