YOLOX优点介绍与解析,详细易懂。

这篇具有很好参考价值的文章主要介绍了YOLOX优点介绍与解析,详细易懂。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

优点1:主干网络(CSPDarknet)加入Fcous结构

主干网络加入Fcous结构,将图片宽高信息缩小,减小参数量,提升网络计算速度

Fcous结构:将输入的图片先经过Fcos结构对图片进行每隔一个像素取出一个值,得到四个特征层,然后再进行concat。从而图片宽高的信息缩小,通道数增加。在原始信息丢失较少的情况下,减小了参数量(由于fcous替代了两层卷积与一层bottleneck)

YOLOX优点介绍与解析,详细易懂。

图 1 Fcous示意

优点2:主干网络的激活函数替换为silu激活函数

silu函数相比于rule非线性能力更强,解决了rule当有负数输入输出为0,发生梯度弥散的缺点。同时继承了relu收敛更快的优点。

silu函数=x*sigmoid(x),是relu与sigmoid的结合。可以看做是一个平滑的Relu,对比来看,silu解决了relu具有负数输入输出为0的缺点,不会发生梯度弥散的问题。

(上层神经元通过加权求和,得到输出值,然后被作用一个激活函数,得到下一层的输入值。引入激活函数的目的是为了增加神经网络的非线性拟合能力。)

(被fcous处理后的feature map会被用silu激活函数的,残差卷积层进行卷积,卷积后进入

CSPLayer。)

YOLOX优点介绍与解析,详细易懂。

图 2 silu激活函数

优点3:主干网络沿用CSP结构

CSPLayer:内部的主要特征提取利用残差结构,但csplayer将feature map分为两部分,一部分进入残差块,与瓶颈结构,特征提取,另一部分与特征提取后的feature map进行concat操作从而进行信息融合。(需要注意从代码上,part1与part2是一样的输入)

YOLOX优点介绍与解析,详细易懂。

YOLOX优点介绍与解析,详细易懂。

图 3 CSPLayer结构与源码

优点4:主干倒数第二层为SPPbottleneck(空间金字塔池化)

这里的SPPneck主要通过不同大小的池化核,对图像进行池化,增大网络感受野,提取更多的特征

YOLOX优点介绍与解析,详细易懂。

图 4  空间金字塔池化公式

YOLOX优点介绍与解析,详细易懂。

图 5 SPPneck(空间金字塔池化)

总而言之,主干网络卷积层的主要作用是特征提取与特征融合,相比于之前的YOLO版本,更换激活函数带来了一些非线性能力的提升。在主干网络中加入SPPneck增大了网络感受野。

优点5:特征利用层(FPN层)

YOLOX优点介绍与解析,详细易懂。

在特征利用部分,YoloX提取多特征层进行目标检测,一共提取三个特征层。

三个特征层位于主干部分CSPdarknet的不同位置,分别位于中间层,中下层,底层,当输入为(640,640,3)的时候,三个特征层的shape分别为feat1=(80,80,256)、feat2=(40,40,512)、feat3=(20,20,1024)。

第一条的路径:主干卷积(20,20,1024)特征图上采样,与主干卷积(40,40,512)特征图进行concat和卷积下采样,融合信息与进一步特征提取得到merge_01。

第二条路径:merge_01通过1x1卷积降通道上采样与主干(80,80,256)concat和卷积下采样得到(80,80,256)大小的merge_02输出到YOLOHead_01(个人理解该层的特征偏向(80,80)的特征图)

第三条路径:merge02下采样与merge01进行concat与卷积下采样操作得到(40,40,512)的(40,40,512)大小的merge_03输出到YOLOHead_02(个人理解该层的特征偏向(40,40)的特征图)

第四条路径:merge_03下采样与主干卷积到(20,20,1024)的特征图进行concat与卷积下采样操作,得到(20,20,1024)的merge_04输出到YOLOHead_03(个人理解该层的特征偏向(20,20)的特征图)

总结:FPN层对3个维度的特征图进行了融合,但是每个输出都有一定的侧重,为了对不同尺度的目标有更好的检测效果。

优点6:YOLOHead(解耦头)

YOLOV3中最后的回归框与置信度在1*1的卷积中一起实现,而在YOLOX通过解耦头,分别将置信度与回归框分别实现,在预测时合为一体。

YOLOX优点介绍与解析,详细易懂。

  1. Reg(h,w,4)用于判断每一个特征点的回归参数,回归参数调整后可以获得预测框。
  2. Obj(h,w,1)用于判断每一个特征点是否包含物体。
  3. Cls(h,w,num_classes)用于判断每一个特征点所包含的物体种类。
  4. 通道数即为需要预测的个数,每个通道代表一个结果。
  5. YOLOX优点介绍与解析,详细易懂。

将三个预测结果进行堆叠,每个特征层获得的结果为:

Out(h,w,4+1+num_classses)前四个参数用于判断每一个特征点的回归参数,回归参数调整后可以获得预测框;第五个参数用于判断每一个特征点是否包含物体;最后num_classes个参数用于判断每一个特征点所包含的物体种类。

将检测头解耦相对于YOLOV3检测头直接融合out输出而言,无疑会增加运算的复杂度,但是作者最终使用 1个1x1 的卷积先进行降维,并在分类和回归分支里各使用了 2个3x3 卷积,最终调整到仅仅增加一点点参数。解耦操作从逻辑上,对一个任务的精度而言有着绝对优势,缺点是在于增加运算的复杂程度。如何平衡性能与速度则是解耦方法是否优秀的关键。

优点7:网格点操作与解码操作

YOLOX优点介绍与解析,详细易懂。

解码目标:由yolox中的decoupled_head输出后concat的形状为((numcls+5)*8400)的网格点图。

经过concat与维度转换的网格点,每一行都是代表着一个预测框信息的(numcls、中心点与宽高、判断该预测点是否有物体的obj)的anchorpoint

解码主要解码中心点坐标,以及宽高(x,y,h,w)。

解码中心点坐标是通过torch.meshgrid生成网格数据为网格点的行列索引,将中心点的偏移量x,y加上索引号再乘上缩放倍数。即可解码还原到原图。具体操作为:outputs[..., :2] = (outputs[..., :2] + grids) * strides

解码宽高w,h则是通过output输出宽高部分直接乘以步长再求对数获得。具体操作为:

outputs[..., 2:4] = torch.exp(outputs[..., 2:4]) * strides

优点8:SimOTA(动态样本匹配)

SimOTA主要的作用是为每个正样本(网络输出预测框)分配一个GT框,让正样本去拟合该GT框。从而替代之前的anchor方案去拟合anchor,从而实现anchor free

一、通过中心先验(GT框)确定fixed center area的范围fixed center area中的anchorpoint即为初筛正样本。

  1. 首先将3个维度特征图合成的网格点中的所有anchorpoint进行反算到原图(得到一堆框)。
  2. 再将这些框的中心点与GT框相对原图的坐标。可以得到在GT框内的anchorpoint的序号。
  3. 此时每个gt的中心点向外扩展2.5*expanded_strides距离得到fixed center area,与anchor进行比较,再找到在fixed center area内的anchorpoint即得到初筛的正样本。这里通过一个mask的方式将GT框内部的anchorpoint保留置为true其余为false。以方便下一步骤的计算。

二、将所mask内的anchorpoint都与对应的GT框进行cost代价矩阵计算。同时计算iou,获得dynamic_k(Cost代价矩阵由:cls_loss和rge_loss组成:cij​=Lijcls​+λLijreg+100000*~is_in_boxes_and_center。)

  1. 首先取出每个GT框对应的前10个iou值,将这些iou值加在一起求和取整。则获得了该GT框的dynamic_k。这个值的作用是动态的为每个GT框分配多少个anchorpoint。在训练初期可能dynamic_k为1(由于训练初期iou较小)
  2. 根据dynamic_k动态给GT框分配anchorpoint个数。取出前dynamic_k个cost值最低的anchorpoint进行下一步操作。另外在计算这些cost时不在中心区域(fixed center area)里的anchorpoint会被乘上一个十万的系数提高cost值。
  3. 如果出现一个anchorpoint分配给了两个GT框,就会对该anchorpoint的两个GT框cost值进行比较,anchorpoint会被分配给cost更低的框。
  4. 把去重后每个GT框取到的anchorpoint做对应的损失计算。

优点9:损失计算

1.Reg部分,利用真实框和预测框计算IOU损失,作为Reg部分的Loss组成。

2.Obj部分,所有真实框对应的特征点都是正样本,剩余的特征点均为负样本,根据正负样本和特征点的是否包含物体的预测结果计算交叉熵损失,作为Obj部分的Loss组成。

3.Cls部分,计算交叉熵损失,作为Cls部分的Loss组成。

4.损失公式如下:

YOLOX优点介绍与解析,详细易懂。

其中Lcls代表分类损失;

Lreg代表定位损失;

Lobj代表obj损失;

λ代表定位损失的平衡系数源码中设置是5.0;

Npos代表被分为正样的Anchor Point数;

感谢对本文有所帮助的人们!!

睿智的目标检测53——Pytorch搭建YoloX目标检测平台_Bubbliiiing的博客-CSDN博客

YOLOX之函数dynamic_k_matching解析 - 知乎 dynamic_k_match源码解析

yolox Head-Decoupled head源码解读_Mr.Q的博客-CSDN博客_yolox的head部分 yolo_head.py源码解析文章来源地址https://www.toymoban.com/news/detail-410299.html

到了这里,关于YOLOX优点介绍与解析,详细易懂。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Sora六大优点全解析:OpenAI文本生成视频模型引领影像创作新潮流

    Sora六大优点全解析:OpenAI文本生成视频模型引领影像创作新潮流

    OpenAI,这个一直走在人工智能前沿的巨头,在不久前发布了他们的首个文本转视频模型——Sora!就是那个能将你的文字想象转化为栩栩如生视频的神器。现在,让我们一起揭开Sora的神秘面纱,看看第一部AI短剧离我们还有多远吧! 想象一下,你脑海中的一段故事、一个场景

    2024年03月21日
    浏览(47)
  • C#中await /async 的使用场景,优点,使用方法介绍

    C#中await /async 的使用场景,优点,使用方法介绍

      async/await  是 C# 中异步编程的关键特性,它使得异步代码编写更为简单和直观。下面深入详细描述了  async/await  的使用场景、优点以及一些高级使用方法,并提供了相应的实例源代码。 I/O 操作:  异步编程特别适用于涉及 I/O 操作(如文件读写、网络请求等)的场景。在

    2024年02月05日
    浏览(10)
  • Chrome 浏览器获取网址映射 IP 地址 DNS 解析过程详细介绍

    Chrome 浏览器获取网址映射 IP 地址 DNS 解析过程详细介绍

    步骤 说明 ① 浏览器输入:http://www.baidu.com ② 查找浏览器自身 DNS 缓存:chrome://net-internals/#dns ③ Windows 系统:查找系统 hosts 文件、Linux 系统:查找 /etc/hosts 文件 ④ 浏览器就会发起一个 DNS 系统调用(向本地域名服务器发起域名解析请求) ⑤ 本地域名服务器 LDNS 替我们的浏

    2024年02月05日
    浏览(245)
  • Chrome 谷歌浏览器获取网址映射 IP 地址 DNS 域名解析过程介绍(详细教程)

    Chrome 谷歌浏览器获取网址映射 IP 地址 DNS 域名解析过程介绍(详细教程)

    步骤 说明 ① 浏览器输入:http://www.baidu.com ② 查找浏览器自身 DNS 缓存:chrome://net-internals/#dns ③ Windows 系统:查找系统 hosts 文件、Linux 系统:查找 /etc/hosts 文件 ④ 浏览器就会发起一个 DNS 系统调用(向本地域名服务器发起域名解析请求) ⑤ 本地域名服务器 LDNS 替我们的浏

    2024年02月03日
    浏览(54)
  • 【音视频 | Ogg】libogg库详细介绍以及使用——附带libogg库解析.opus文件的C源码

    【音视频 | Ogg】libogg库详细介绍以及使用——附带libogg库解析.opus文件的C源码

    😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭 🤣本文内容🤣:🍭介绍libogg库,并给出ligogg库使用的例子🍭 😎金句分享😎:🍭子曰:不患人之不己知,患不知人也。——《论语·学而篇》。意思是,

    2024年02月05日
    浏览(14)
  • 热词科普--关于前后端分离的易懂解析

    热词科普--关于前后端分离的易懂解析

    目录 一、什么是前后端分离? 二、为什么要前后端分离? 未分离时期:  工作方式: 半分离时期: 三、前后端分离的优点 四、前后端分离的缺点 五、什么场景下可以考虑前后端分离 六、基于Vue + Springboot的前后端分离 Spring Boot 简述 Vue 简述 项目案例   前后端分离 是一种

    2024年04月23日
    浏览(447)
  • 【SQL Server】数据库开发指南(七)MS-SQL存储过程全面解析:种类、优点和创建方法详解

    本系列博文还在更新中,收录在专栏:#MS-SQL Server 专栏中。 本系列文章列表如下: 【SQL Server】 Linux 运维下对 SQL Server 进行安装、升级、回滚、卸载操作 【SQL Server】数据库开发指南(一)数据库设计的核心概念和基本步骤 【SQL Server】数据库开发指南(二)MSSQL数据库开发对

    2024年02月07日
    浏览(60)
  • YOLOv3目标检测算法——通俗易懂的解析

    YOLOv3目标检测算法——通俗易懂的解析

    前两篇文章我们讲了下关于 YOLOv1 和 YOLOv2 的原理,有不懂的小伙伴可以回到前面再看看: YOLOv1目标检测算法——通俗易懂的解析 YOLOv2目标检测算法——通俗易懂的解析   作者出于道德问题从 YOLOv3 开始将不再更新 YOLO 系列算法,俄罗斯的一位大佬Alexey Bochkovskiy接过了 YO

    2024年02月08日
    浏览(8)
  • Sutherland–Hodgman 算法介绍(简单易懂)

    Sutherland–Hodgman 算法介绍(简单易懂)

    目录 一、算法介绍 二、算法描述 三、计算细节补充 四、算法总结   我们使用 Sutherland–Hodgman算法 来裁剪多边形的边,一般是给你一个多边形顶点序列( P1,P2,P3,P4,… Pn) 让你裁剪,最终裁剪掉 裁剪多边形 的 外部 部分( 下图黑框就是裁剪多边形 )。 像这样: 裁剪多边形示意

    2024年01月16日
    浏览(45)
  • PyTorch 简单易懂的 Embedding 和 EmbeddingBag - 解析与实践

    目录 torch.nn子模块Sparse Layers详解 nn.Embedding 用途 主要参数 注意事项 使用示例 从预训练权重创建嵌入 nn.EmbeddingBag 功能和用途 主要参数 使用示例 从预训练权重创建 总结 torch.nn.Embedding 是 PyTorch 中一个重要的模块,用于创建一个简单的查找表,它存储固定字典和大小的嵌入

    2024年01月25日
    浏览(15)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包