正负样本分配策略simOTA

news2024/12/26 0:33:45

simOTA是YOLOX中提出的
正负样本分配策略(OTA, SimOTA,TAS)
OTA源于2021年cvpr的论文,使训练和验证的标签有着更好的对应关系。
yolov5没有用到,只有一种loss:

from utils.loss import ComputeLoss
compute_loss = ComputeLoss(model)  # init loss class

yolov7用到了,对应的loss:

from utils.loss import ComputeLoss, ComputeLossOTA

这里说yolov5改成simota以后可以提高6个百分点。https://www.iotword.com/4182.html

一、YOLOX整体介绍可看文章:
https://zhuanlan.zhihu.com/p/392221567
改进点:
1、Decoupled head(预测分支解耦)。
作者实验发现耦合检测头可能会损害性能。共有两点改进:
①将预测分支解耦极大的改善收敛速度。
②相比较于非解耦的端到端方式,解耦能带来4.2%AP提升。
图2:yolov3 head与decoupled head结构图
模型结构:
在这里插入图片描述

yolov3中,针对coco80类的检测任务,每一个anchor会对应产生hw85维度的预测结果,其中obj(区分是前景背景)占用1个通道,reg(坐标)占用4个通道,cls(预测是80类中的哪一个类)占用80个通道。
而YOLOX首先使用11卷积将原本不同channel数的特征图先统一到256(主要目的是降维),然后使用两个平行分支,两个分别两个使用33卷积,同时regression分支里还添加了IoU分支。
2、强大的数据增强。

添加Mosaic和MixUp,但在最后15epochs时关闭(笔者认为最后15轮关闭的原因可能是怕数据增强过度)
Mosaic最先在U版的yolov3中使用,现在已经广泛用于各大目标检测器。U版yolov3代码网址:https://github.com/ultralytics/yolov3
MixUp用在目标检测中大概的方式是:两张图以一定的比例对rgb值进行混合,同时需要模型预测出原本两张图中所有的目标。目前MixUp在各大竞赛、各类目标检测中属于稳定提点的策略。
作者颠覆性发现:使用强大的数据增强后,ImageNet预训练模型无益,所有后续模型都是随机初始化权重。
同时论文最后提到,在训练比较小的模型时候,例如YOLOX-S, YOLOX-Tiny,YOLOX-Nano网络,剔除mixup,弱化mosaic效果,表现要比使用好。
3、Anchor-free
anchor的问题:
①使用anchor时,为了调优模型,需要对数据聚类分析,确定最优锚点,缺乏泛化性。
②anchor机制增加了检测头复杂度,增加了每幅图像预测数量(针对coco数据集,yolov3使用416416图像推理, 会产生3(1313+2626+52*52)85=10647个预测结果)。
使用ancho-freer可以减少调整参数数量,减少涉及的使用技巧
从原有一个特征图预测3组anchor减少成只预测1组,直接预测4个值(左上角xy坐标和box高宽)。减少了参数量和GFLOPs,使速度更快,且表现更好。
作者在正样本选择方式做过以下几个尝试:
①只将物体中心点所在的位置认为是正样本,一个gt最多只会有一个正样本。AP达到42.9%。
②Multi positives。(笔者感觉这就是暴力美学,策略简单直接)将中心3
3区域都认为是正样本,即从上述策略每个gt有1个正样本增长到9个正样本。且AP提升到45%,已经超越U版yolov3的44.3%AP。
③SimOTA
这里不得不提到OTA(Optimal Transport Assignment,Paper: https://arxiv.org/abs/2103.14259),这里简单解释一下,后续计划出个专栏来解释OTA。在目标检测中,有时候经常会出现一些模棱两可的anchor,如图3,即某一个anchor,按照正样本匹配规则,会匹配到两个gt,而retinanet这样基于IoU分配是会把anchor分配给IoU最大的gt,而OTA作者认为,将模糊的anchor分配给任何gt或背景都会对其他gt的梯度造成不利影响,因此,对模糊anchor样本的分配是特殊的,除了局部视图之外还需要其他信息。因此,更好的分配策略应该摆脱对每个gt对象进行最优分配的惯例,而转向全局最优的思想,换句话说,为图像中的所有gt对象找到全局的高置信度分配。(和DeTR中使用使用匈牙利算法一对一分配有点类似)
二、详解SimOTA
参考:https://zhuanlan.zhihu.com/p/394392992
https://zhuanlan.zhihu.com/p/549382358

巧妙之处:

1、simOTA能够做到自动的分析每个gt要拥有多少个正样本。
2、能自动决定每个gt要从哪个特征图来检测。
3、相比较OTA,simOTA运算速度更快。
4、相比较OTA,避免额外超参数。
代码结构:
核心代码位于yolox/models/yolo_head.py中。
整体代码逻辑:
1、确定正样本候选区域。
2、计算anchor与gt的iou。
3、在候选区域内计算cost。
4、使用iou确定每个gt的dynamic_k。
5、为每个gt取cost排名最小的前dynamic_k个anchor作为正样本,其余为负样本。
6、使用正负样本计算loss。
在这里插入图片描述OTA虽然实现了很好的性能涨点,但其训练成本很高. YOLOX发现OTA中的Sinkhorn-Knopp算法在训练300epoch的情况下会增加25%的训练时间,为此YOLOX提出了SimOTA,使用手工设定的规则替代Sinkhorn-Knopp算法,缩短了因此增加的训练时间.
如上所述,SimOTA和OTA的区别主要在于最后一步,即使用Sinkhorn-Knopp算法求得最小cost的传输计划
. 对此,SimOTA使用下述方法替代Sinkhorn-Knopp算法求得传输计划
在已求得cost矩阵和每个GT所需的Anchor数量k的情况下,针对每个GT,根据cost挑选出k个cost最小的Anchor. (参考下图,下图为示例,只为了表达大概意思. IoU数量也和10对不上)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图像识别快速实现

文本的跑通了,接下来玩玩图片场景 1. 引入模型 再另起类test_qdrant_img.py,转化图片用到的模型和文本不太一样,我们这里使用ResNet-50模型 import unittest from qdrant_client.http.models import Distance, VectorParams from qdrant_cl…

im6ull学习总结(三-2)文字显示中文字符

承接上篇文章 中文字符的点阵显示 使用点阵字库时,中文字符的显示原理跟 ASCII 字符是一样的。要注意的地方在于中文的编码:在 C 源文件中它的编码方式是 GB2312 还是 UTF-8?编译出的可执行程序,其中的汉字编码方式是 GB2312 还…

Java 第23章 反射 本章作业

文章目录 反射修改私有成员变量反射和File 反射修改私有成员变量 public class Homework01 {public static void main(String[] args) throws IllegalAccessException, InstantiationException, NoSuchFieldException, NoSuchMethodException, InvocationTargetException {/***…

c盘扩容时,d盘无法删除卷问题

C盘扩容时,磁盘管理中D盘右键无法删除卷的原因 首先,D盘下文件夹为空,但是显示可用空间不是100%,经过排查,发现是虚拟内存设置在了D盘导致无法删除卷,这里只需要将虚拟内存放到其他盘,如E盘即可…

bootstrap5实现的在线商城网站Parlo

一、需求分析 在线商城网站是指基于互联网技术搭建的电子商务平台,通过网站提供商品和服务的展示、销售和交易功能。它的主要作用包括以下几个方面: 商品展示和销售:在线商城网站是商家展示商品的平台,可以通过图片、文字、视频等…

阿里巴巴开源异构数据源离线/全量/增量同步工具 - DataX

😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~ 🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Mi…

web component - 使用HTML Templates和Shadow DOM构建现代UI组件

Web Component是一种用于构建可重用的UI组件的技术。它使用标准化的浏览器API,包括Custom Elements、Shadow DOM和HTML Templates来实现组件化开发方式。这些API都是现代浏览器原生支持的,因此不需要引入第三方库或框架即可使用。 在这篇博客中&#xf…

如何学习TS?

文章目录 一. 8种内置基础类型.ts二. void、never、any、unknown类型void类型never类型any类型unknown类型总结:void和any在项目中是比较常见的,never和unknown不常用。 三. 数组和函数类型定义.ts四. 元组与交叉类型使用元组数组一般有同类型的值组成&a…

页面间动画之放大缩小视图

目录 1、Exchange类型的共享元素转场 2、Static类型的共享元素转场 3、场景示例 在不同页面间,有使用相同的元素(例如同一幅图)的场景,可以使用共享元素转场动画衔接。为了突出不同页面间相同元素的关联性,可为它们…

管理文件传输的工具CopyQueue mac功能特点

CopyQueue for mac是用于管理文件传输的工具,可以有效地复制多个文件,并且比OS X的速度更快,暂停和恢复文件传输,日程任务和更多,使用和管理起来都非常的简单方便。如果你要复制很多文件,CopyQueue更快更高…

pytest conftest定义一个fixtrue获取测试环境地址

方便全局切换地址 pytest.fixture() def config():data {测试环境: {A环境: 127.0.0.1,B环境: 127.0.0.2,C环境: 127.0.0.3,D环境: 127.0.0.4},}return data.get(测试环境, {}).get(A环境)import pytestdef test_case001(config):url http://str(config):8080/api/user/logi…

从零开始了解大数据(七):总结

系列文章目录 从零开始了解大数据(一):数据分析入门篇-CSDN博客 从零开始了解大数据(二):Hadoop篇-CSDN博客 从零开始了解大数据(三):HDFS分布式文件系统篇-CSDN博客 从零开始了解大数据(四):MapReduce篇-CSDN博客 从零开始了解大…

基于rk3568 Android H265推流SRS低延迟网页播放方案

在音视频领域,融合推流,低码流,低延迟,浏览器H5化是一个降低成本,提升用户体验的重要手段。同时适配现有直播的生态也是一个必要条件。 在满足上述要求的情况下,我做了以下实践,取得了良好的效果…

每天五分钟计算机视觉:揭秘迁移学习

本文重点 随着人工智能的迅速发展,深度学习已经成为了许多领域的关键技术。然而,深度学习模型的训练需要大量的标注数据,这在很多情况下是不现实的。迁移学习作为一种有效的方法,可以在已有的数据和模型上进行训练,然后将其应用于新的任务。这种方法大大降低了对新任务的…

opencv期末练习题(2)附带解析

图像插值与缩放 %matplotlib inline import cv2 import matplotlib.pyplot as plt def imshow(img,grayFalse,bgr_modeFalse):if gray:img cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)plt.imshow(img,cmap"gray")else:if not bgr_mode:img cv2.cvtColor(img,cv2.COLOR_B…

2023机器人行业总结,2024机器人崛起元年(具身智能)

2023总结: 1.Chatgpt引爆了通用人工智能,最大的受益者或是机器人,2023年最热门的创业赛道便是人形机器人,优必选更是成为人形机器人上市第一股, 可以说2023年是机器人开启智能化的元年,而2024则将成为机器…

Java网络编程之IP,端口号,通信协议(UDP,TCP)

目录 1.软件架构2.网络编程三要素3.IP1.IPV42.IPV6 4.端口号5.协议1.UDP协议1.单播2.组播3.广播 2.TCP协议1.三次握手2.四次挥手 1.软件架构 ①C/S:客户端/服务器 在用户本地需要下载安装客户端程序,在远程有一个服务器端程序。 优点:画面精美…

三千多个厂商默认帐号、默认密码(建议收藏)

晚上好,我的网工朋友。 做网工这行,多少都会遇上各种各样的厂商设备,遇上一些新设备,虽然没有更改密码,但不知道初始默认账号和密码是啥。 今天就给你整理了一波,三千多个厂商默认帐号、默认密码&#xf…

Java学习,一文掌握Java之SpringBoot框架学习文集(2)

🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。 🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。 🎉欢迎 👍点赞✍评论…

LLVM(简介)

历史 LLVM(low level virtual machine)起源于伊利诺伊大学的一个编译器实验项目,目前已经发展成一个集编译器和工具链为一体的商业开源项目,因此其英文名称的含义被扩大,不再仅仅是字面意思。其创始人为 Chris Lattner。LLVM项目遵循的开源许…