正负样本分配策略(OTA, SimOTA,TAS)

news2024/9/24 19:16:27

文章目录

  • OTA
  • SimOTA
  • TAL
  • ATSS

OTA

论文:《OTA: Optimal Transport Assignment for Object Detection》
代码:Megvii-BaseDetection/OTA


标签分配算法
目标CNN-based的目标检测器是预测 pre-defined anchors 的类别 (cls) 以及偏移量 (reg) 。
为了训练目标检测器,需要为每个anchor 分配 cls 和 reg 目标,这个过程称为标签分配或者正采样。
一些经典的标签分配方法:

  • RetinaNet、Faster-RCNN: 使用 pre-defined anchors 与 groudtruth 的 IoU 阈值来区分正负样本。
  • YOLOV5: 为了增加正样本数量,使用 pre-defined anchors 与 groudtruth 的 宽高比进行正采样。
  • FCOS:处于groundtruth的中心区域的anchors作为正样本。

OTA的提出背景
使用人工规则的分配方法,无法考虑尺寸、形状或边界遮挡的差异性。
虽然有一些改进工作,如ATSS动态分配方法,可以为每个目标动态的选择正样本。
但是上述方法都一个缺陷:没有全局性的考虑,比如当处理模糊标签时 (一个anchor可能对应多个目标),对其分配任何一个标签都可能对网络学习产生负面影响。
OTA就是解决上述问题,以获得全局最优的分配策略。


OTA思想
为了得到全局最优的分配策略,OTA方法提出将标签分配问题当作 Optimal Transport (OT) 问题。

具体来讲:
将每个gt当作可以提供一定数量labels的supplier,而每个anchor可以看作是需要唯一label 的 demander,如果某个anchor从 gt 那儿获得足够的 label,那么这个 anchor 就是此 gt 的一个正样本。
因为有很多anchor是负样本,所以还需引入另一个background供应商,专门为anchor提供 negative 标签,

问题目标是 supplier如何分配 label 给demander,可以让 cost 最低。其中 cost 的定义为:
对于每个anchor-gt pair,cost 为 pair-wise cls loss 和 pair-wise reg loss的加权和。
对于每个anchor-background pair,cost 为 pair-wise cls loss这一项。
在这里插入图片描述


Optimal Transport的求解过程
假设第 i \mathrm{i} i 个 supplier 拥有 s i \mathrm{s}_{\mathrm{i}} si 个货物,第 j \mathrm{j} j 个 demander 需要 d j \mathrm{d}_{\mathrm{j}} dj 个货物。
货物从 supplier i运到demander j \mathrm{j} j 的成本为 c i j \mathrm{c}_{\mathrm{ij}} cij
目标是找到最佳运输方案 π ∗ = π i , j ∣ i = 1 , 2 , … , m , j = 1 , 2 , … n \pi^*=\pi_{\mathrm{i}, \mathrm{j}} \mid \mathrm{i}=1,2, \ldots, \mathrm{m}, \mathrm{j}=1,2, \ldots \mathrm{n} π=πi,ji=1,2,,m,j=1,2,n ,可以让总的运输 cost 最低:
min ⁡ π ∑ i = 1 m ∑ j = 1 n c i j π i j  s.t.  ∑ i = 1 m π i j = d j , ∑ j = 1 n π i j = s i , ∑ i = 1 m s i = ∑ j = 1 n d j π i j ≥ 0 , i = 1 , 2 , … , m , j = 1 , 2 , … , n \begin{gathered} \min _\pi \sum_{\mathrm{i}=1}^{\mathrm{m}} \sum_{\mathrm{j}=1}^{\mathrm{n}} \mathrm{c}_{\mathrm{ij}} \pi_{\mathrm{ij}} \\ \text { s.t. } \sum_{\mathrm{i}=1}^{\mathrm{m}} \pi_{\mathrm{ij}}=\mathrm{d}_{\mathrm{j}}, \sum_{\mathrm{j}=1}^{\mathrm{n}} \pi_{\mathrm{ij}}=\mathrm{s}_{\mathrm{i}}, \sum_{\mathrm{i}=1}^{\mathrm{m}} \mathrm{s}_{\mathrm{i}}=\sum_{\mathrm{j}=1}^{\mathrm{n}} \mathrm{d}_{\mathrm{j}} \\ \pi_{\mathrm{ij}} \geq 0, \mathrm{i}=1,2, \ldots, \mathrm{m}, \mathrm{j}=1,2, \ldots, \mathrm{n} \end{gathered} πmini=1mj=1ncijπij s.t. i=1mπij=dj,j=1nπij=si,i=1msi=j=1ndjπij0,i=1,2,,m,j=1,2,,n
上述问题可以使用 Sinkhorn-Knopp 算法来求解。


OT for Label Assignment
回到标签分配问题,对于一张图片,假设有 m \mathrm{m} m g t \mathrm{gt} gt 目标和 n \mathrm{n} n 个 anchors:

  • 毎个gt 拥有 k \mathrm{k} k 个positive labels,即 s i = k ; i = 1 , 2 , . . , m \mathrm{s}_{\mathrm{i}}=\mathrm{k} ; \mathrm{i}=1,2, . ., \mathrm{m} si=k;i=1,2,..,m
  • 毎个anchor 需要一个 label, 即 d j = 1 ; j = 1 , 2 , … , n \mathrm{d}_{\mathrm{j}}=1 ; \mathrm{j}=1,2, \ldots, \mathrm{n} dj=1;j=1,2,,n
    将一个 positive label 从 g t i \mathrm{gt}_{\mathrm{i}} gti 运到 anchor a i \mathrm{a}_{\mathrm{i}} ai 的成本为 c i j f g \mathrm{c}_{\mathrm{ij}}^{\mathrm{fg}} cijfg, 其可以表示为:
    c i j f g = L c l s ( P j c l s ( θ ) , G i c l s ) + α L r e g ( P j b o x ( θ ) , G i b o x ) c_{\mathrm{ij}}^{\mathrm{fg}}=\mathrm{L}_{\mathrm{cls}}\left(\mathrm{P}_{\mathrm{j}}^{\mathrm{cls}}(\theta), \mathrm{G}_{\mathrm{i}}^{\mathrm{cls}}\right)+\alpha \mathrm{L}_{\mathrm{reg}}\left(\mathrm{P}_{\mathrm{j}}^{\mathrm{box}}(\theta), \mathrm{G}_{\mathrm{i}}^{\mathrm{box}}\right) cijfg=Lcls(Pjcls(θ),Gicls)+αLreg(Pjbox(θ),Gibox)
    式中:
    P j c l s \mathrm{P}_{\mathrm{j}}^{\mathrm{cls}} Pjcls P j box  \mathrm{P}_{\mathrm{j}}^{\text {box }} Pjbox  分别表示对 anchor a j \mathrm{a}_{\mathrm{j}} aj 预测的 cls score 和 bbox;
    G i c l s \mathrm{G}_{\mathrm{i}}^{\mathrm{cls}} Gicls G i b o x \mathrm{G}_{\mathrm{i}}^{\mathrm{box}} Gibox 分别表示对 g t j \mathrm{gt} \mathrm{j} gtj 的 cls 和 bbox;
    L c l s \mathrm{L}_{\mathrm{cls}} Lcls L b o x \mathrm{L}_{\mathrm{box}} Lbox 分别表示 cross entorpy loss 和 IoU Loss;
    α \alpha α 是 2 个loss的平衡系数
    此外很多anchor是负样本,所以还有一个background supplier,将一个negative label 从background supplier 运到 anchor a j a_j aj 的成本为 c j b g c_j^{\mathrm{bg}} cjbg ,其可以表示为:
    c j b g = L c l s ( P j c l s ( θ ) , ϕ ) \mathrm{c}_{\mathrm{j}}^{\mathrm{bg}}=\mathrm{L}_{\mathrm{cls}}\left(\mathrm{P}_{\mathrm{j}}^{\mathrm{cls}}(\theta), \phi\right) cjbg=Lcls(Pjcls(θ),ϕ)
    可以计算出negative lables的总数为: n − m × k \mathrm{n}-\mathrm{m} \times \mathrm{k} nm×k ,所以 s i \mathrm{s}_{\mathrm{i}} si 更新为:
    s i = { k i ≤ m n − m × k  otherwise  \mathrm{s}_{\mathrm{i}}= \begin{cases}\mathrm{k} & \mathrm{i} \leq \mathrm{m} \\ \mathrm{n}-\mathrm{m} \times \mathrm{k} & \text { otherwise }\end{cases} si={knm×kim otherwise 

SimOTA


SimOTA的简要介绍
SimOTA可以理解为是一种匹配策略的方法,可以看成是一个最优传输的问题。举一个通俗易懂的例 子就是,有2个分配基地与6个周围城市,现在需要考虑一个最优的配送方式来确保分配东西到这几个 城市的运输成本是最低的。而对于目标检测来说,这个最优传输问题也就是一个最优分配问题,如何 实现把这些anchor point分配给gt的代价 (cost) 是最低的。这个代价就是iou损失,分类损失等内容。
在论文中, cost的公式为:
c i j = L i j c l s + λ L i j r e g \mathrm{c}_{\mathrm{ij}}=\mathrm{L}_{\mathrm{ij}}^{\mathrm{cls}}+\lambda \mathrm{L}_{\mathrm{ij}}^{\mathrm{reg}} cij=Lijcls+λLijreg
也就是说,对于一张特征图上的所有anchor point来说,整个匹配的策略代价是所有特征点与每一个gt box所产生的分类损失与回归损失之和。但是实际代码中的cost计算公式是稍微不一样的:

cost = (
            pair_wise_cls_loss
            + 3.0 * pair_wise_ious_loss
            + 100000.0 * (~is_in_boxes_and_center)
        )
  • pair_wise_cls_loss就是每个样本与每个GT之间的分类损失 L i j c l s L_{ij}^{cls} Lijcls
  • pair_wise_ious_loss是每个样本与每个GT之间的回归损失 L i j r e g \mathrm{L}_{\mathrm{ij}}^{\mathrm{reg}} Lijreg
  • is_in_boxes_and_center代表那些落入GT Bbox与fixed center area交集内的样本,即上图中橙色 勾对应的样本,然后这里进行了取反 表示不在GT Bbox与fixed center area交集内的样本 (非 橙色样本),即上图中黑色勾对应的样本。接着又乘以100000.0,也就是说对于GT Bbox与fixed center area交集外的样本cost加上了一个非常大的数,这样在最小化cost过程中会优先选择GT Bbox与fixed center area交集内的样本。

SimOTA的流程
SimOTA具体的做法是首先计算每个目标Cost最低的10特征点,然后把这十个特征点对应的预测框与真实框的IOU加起来求得最终的k。这一部分就是对框进行筛选。

首先进行初步的框筛选:

  • 根据中心点判断:寻找anchor box中心点,落在gt_box矩形范围内的anchors
  • 根据目标框来预测:以gt中心点为基准,设置边长为5的正方形,挑选正方形内所有的锚框。

经过初步筛选后则可以精细化筛选:

  • 初筛正样本信息提取
  • Loss函数计算
  • cost成本计算
  • SimOTA求解

SimOTA的详细实现流程

  1. 首先需要对anchor point进行一个预筛选。在SimOTA中,首先会对gt boxs位置范围内的所有anchor point进行框选,其次在gt boxs位置范围内设定一个5x5大小的box,称之为fixed center area,如下图所示。这些被gt box与fixed center area框选出来的anchor point就是预筛选的目标。
    在这里插入图片描述

  2. 针对这些设计多个gt box所获取的anchor point,现在假设有3个gt box的范围中涵盖了1000个anchor point。那么,现在需要做的就是分别对每一个anchor point计算其相对与每一个gt box的分类损失cls_loss、位置损失iou_loss。从而根据分类损失cls_loss、位置损失iou_loss获取cost矩阵以及iou矩阵
    在这里插入图片描述

  3. 现在就可以根据所获得的iou矩阵来选择出n_candidate_k个iou最大的候选框,topk_ious(n_candidate_k是取10和Anchor Point数量之间的最小值)。需要需要注意,这里的iou矩阵只是为了确定dynamic_k,也就是动态的选择为每一个gt box赋予多少个正样本。
    在这里插入图片描述
    当获取到每个gt box最高的前k个iou数值时,这里会对他们进行一个求和处理。这里获取出来的值是处于[0, n_candidate_k]之间的。如果是浮点数值,则对其进行向下取整处理。所获取的最后数值dynamic_k,就是每个针对每个gt box分配的anchor point数。
    其中对iou矩阵进行topk,可以获取与每一个gt box的iou最大的前k的iou值与索引的,只是这里只需要返回最大的数值而不需要要返回索引。

  4. 现在对每个gt box进行动态的缺点分配的anchor point数之后,就根据cost矩阵来确定。这里会对每一个gt box来分配cost值最低的dynamic_k个anchor point。对于代码中的公式也可以知道,只有位于当前gt box的fixed center area内区域的anchor point所对应的cost才会比较低,其余的gt box内的剩余地方因为分配的权重过大,所以cost必定很大,而不再gt box的cost就更大了。
    在这里插入图片描述根据cost值的挑选出来的几个最低anchor point,可以再构建一个Anchor Point分配矩阵,记录每个GT对应哪些正样本,对应正样本的位置标1,其他位置标0。如上图所示。

  5. 对于重复预测框对应不同的gt目标框,即第五列所对应的候选框,被目标检测框1和2,都进行关联。对这两个位置,还要使用cost值进行对比,选择较小的值,再进一步筛选。确保一个gt只分配给一个anchor point。

  6. 根据以上流程就能找到所有的正样本以及正样本对应的GT了,那么剩下的Anchor Point全部归为负样本。对筛选预测框进行loss计算,要注意的是这里的iou_loss和cls_loss,只针对目标框和筛选出的正样本预测框进行计算,而obj_loss还是针对所有的anchor point(包含所有的正样本与负样本)
     Loss  = 1   N p o s ( L c l s + λ L r e g + L o b j ) \text { Loss }=\frac{1}{\mathrm{~N}_{\mathrm{pos}}}\left(\mathrm{L}_{\mathrm{cls}}+\lambda \mathrm{L}_{\mathrm{reg}}+\mathrm{L}_{\mathrm{obj}}\right)  Loss = Npos1(Lcls+λLreg+Lobj)
    其中: L c l s \mathrm{L}_{\mathrm{cls}} Lcls 代表分类损失; L r e g \mathrm{L}_{\mathrm{reg}} Lreg 代表定位损失; L o b j \mathrm{L}_{\mathrm{obj}} Lobj 代表obb损失; λ \lambda λ 代表定位损失的平衡系数, 源码中设置是5.0; N p o s \mathrm{N}_{\mathrm{pos}} Npos 代表被分为正样的Anchor Point数。

TAL

论文: 《TOOD: Task-aligned One-stage Object Detection》
代码:fcjian/TOOD


TAL(Task Aligned Learning)的提出背景
物体检测方法的2个局限性:
分类和定位的独立性。分类和定位一般用的是2个独立的分支,这样使得2个任务之间缺乏交互,在预测的时候就会出现:得分高的预测位置不准,位置准的预测得分不高。
任务无关的样本分配:对于分类最优的anchor和对于定位最优的anchor往往并不是同一个。


TAL(Task Aligned Learning)概述

TOOD提出任务对齐头(Task-aligned head, T-head)和新的任务对齐学习(Task-aligned Learning, TAL)来更明确地对齐两个任务;
TAL的操作流程:

  • 首先,T-head对FPN特征进行预测。
  • 然后,计算每个定位点的任务对齐度量,TAL根据此度量为T-head生成学习信号。
  • 最后,T-head对分类和定位的分布进行相应的调整。其中,最对齐的锚通过概率图prob (probability map)获得更高的分类得分,通过学习偏移获得更准确的锚框预测。
    在这里插入图片描述

TAL的具体实现

Task Alignment Learning: 为了进一步指导T-Head做出与任务对齐的预测提出 T A L T A L TAL
它包括一个分配策略和新损失的函数;
分配策略
(1)Task-aligned Sample Assignment:
对齐良好的针点应能联合精确定位预测出较高的分类分数;
不对齐的针应具有较低的分类评分,并随后予以抑制。
(2)Anchor alignment metric: 分类得分和loU的高阶组合来衡量任务对齐程度,
t = s o × u β t=s^o\times u^\beta t=so×uβ
其中: s s s 和u分别表示分类分数和IOU值
(3)Training sample assignment:选择t值最大的 m m m 个针点为正样本,而使用其余的锚点作为负样本; 损失函数
L c l s − p o s = ∑ i = 1 N p o s B C E ( s i , t ^ i ) L_{c l s_{-} p o s}=\sum_{i=1}^{N_{p o s}} B C E\left(s_i, \hat{t}_i\right) Lclspos=i=1NposBCE(si,t^i)
t ∧ t^{\wedge} t 是对 t t t 的归一化

ATSS

论文:《Bridging the Gap Between Anchor-based and Anchor-free Detection via Adaptive Training Sample Selection》
代码:sfzhang15/ATSS

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

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

相关文章

go 结构体 - 值类型、引用类型 - 结构体转json类型 - 指针类型的种类 - 结构体方法 - 继承 - 多态(interface接口) - 练习

目录 一、结构体 1、python 与 go面向对象的实现: 2、初用GO中的结构体:(实例化一个值类型的数据(结构体)) 输出结果不同的三种方式 3、实例化一个引用类型的数据(结构体) 4、…

esp32 wifi无线透传

wifi无线透传 目录 wifi无线透传[TOC](目录) 一、Esp32代码1.1 下载烧写 二、星空内网穿透配置2.1 平台注册2.2 充值2元(用于实名认证)2.3 实名认证2.4 创建隧道2.5 下载软件2.6 配置文件2.7 启动服务 因为常见的无线传输视频或图片,只能在局域网内中实现&#xff0…

【并发专题】手写MyReentantLock

分析 ReentantLock的特点如下: 首先是继承自AQS的可中断可以设置超时时间可以切换公平锁/非公平锁支持多个条件变量支持可重入 事实上,上面的很多东西AQS已经帮忙实现了,所以想要复刻一个不是很难。仔细观察一下源码,我们需要重…

Text-to-SQL小白入门(一)

摘要 本文主要介绍了Text-to-SQL研究的定义、意义、研究方法以及未来展望,主要是对Text-to-SQL领域进行一个初步的认识和了解,适合初学者入门了解。 1 引言 作为Text-to-SQL领域的小白,学习该领域的最好方式就是看最新的综述文章&#xff…

Junit4入门之什么是单元测试?

干了一年多的后端了,从来没有了解过单元测试。虽然我知道测试不仅仅是测试们的任务,后端也要进行自测来保证自己的代码的可用性,但我一直都只是用postman来实施的,调用调通了即可。虽然我也知道Junit是用于测试的软件,…

几种常用到的 Hybrid App 框架方案

移动操作系统在经历了诸神混战之后,BlackBerry OS、Symbian OS、Windows Phone等早期的移动操作系统逐渐因失去竞争力而退出。目前,市场上主要只剩下安卓和iOS两大阵营,使得iOS和安卓工程师成为抢手资源。然而,由于两者系统的差异…

学了python的心得体会200字,学python心得体会1000字

大家好,本文将围绕学了python的心得体会200字展开说明,学python心得体会1000字是一个很多人都想弄明白的事情,想搞清楚学python心得体会800字需要先了解以下几个事情。 一、个人学期总结 本学期在missdu的带领下,进行了python的学…

Jenkins通过OpenSSH发布WinServer2016

上一篇文章> Jenkins集成SonarQube代码质量检测 一、实验环境 jenkins环境 jenkins入门与安装 容器为docker 主机IP系统版本jenkins10.10.10.10rhel7.5 二、OpenSSH安装 1、下载 官网地址:https://learn.microsoft.com/zh-cn/windows-server/administration/op…

Spring Boot的创建和运行

目录 1.Spring Boot的优点 2.Spring Boot项目创建 2.1使用Idea创建 2.2网页版创建 3.项目目录介绍和运行 3.1运行项目 3.2输出 4.注意事项 4.1正确路径 4.2小结:约定大于配置 1.Spring Boot的优点 ●快速集成框架,Spring Boot 提供了启动添…

解决:Uncaught (in promise) SyntaxError: “[object Object]“ is not valid JSON 问题的过程

1、问题描述: 其一、报错为: Uncaught (in promise) SyntaxError: "[object Object]" is not valid JSON 中文为: 未捕获(承诺中)语法错误:“[object Object]”不是有效的 JSON 其二、问题描…

阿丹千问vue页面升级-使用Markdown形式展示回答--markdown-it库

阿丹: 在之前开发的阿丹千问 发现回复的文章格式使用 Markdown的格式。所以想使用Markdown的方式来给页面来个升级。 下面就是升级以及开发的过程。 升级思路 使用vue中的markdown-it库 在Vue页面中使用Markdown文档 安装markdown-it: 在Vue项目中…

《HeadFirst设计模式(第二版)》第一章源码

代码文件目录结构: FlyBehavior.java package Chapter1_StrategyPattern.ch1_3_behavior.behaviors.fly;public interface FlyBehavior {void fly(); } FlyNoWay.java package Chapter1_StrategyPattern.ch1_3_behavior.behaviors.fly;public class FlyNoWay imp…

使用Jetpack Compose构建时间轴组件的逐步指南

使用Jetpack Compose构建时间轴组件的逐步指南 最近,我们开发一个时间轴组件,显示用户与客户之间的对话。每个对话节点应具有自己的颜色,取决于消息的状态,并且连接消息的线条形成颜色之间的渐变过渡。 我们慷慨地估计了未来的工…

C++学习day--18 空指针和函数指针、引用

1、void 类型指针 void > 空类型 void* > 空类型指针, 只存储地址的值,丢失类型,无法访问,要访问其值,我们必须对这个指 针做出正确的类型转换,然后再间接引用指针 。 所有其它类型的指针都可以隐…

基于C语言 --- 自己写一个扫雷小游戏

C语言程序设计笔记---020 初阶扫雷小游戏(开源)1、arr_main2.c程序大纲2、arr_game2.h3、arr_game2.c3.1、 自定义初化函数 InitBoard( ) 和 自定义显示函数 DisPlayBoard( )3.2、 自定义布置雷函数 SetMine( )3.4、 自定义排查雷函数 FindMine( ) 4、结束语 初阶扫雷小游戏(开…

Redis安装部署(基于windows平台)

redis简介 键值对存储数据库是NoSQL数据库的一种类型,也是最简单的NoSQL数据库。顾名思义,键值对存储数据库中的数据是以键值对的形式来存储的。常见的键值对存储数据库有Redis、Tokyo Cabinet/Tyrant、Voldemort以及Oracle BDB数据库。 Remote Diction…

1.4 信息安全管理

数据参考:CISP官方 目录 信息安全管理基础信息安全管理体系信息安全管理实践 一、信息安全管理基础 1、信息 信息是一种资产,与其他重要的业务资产一样,对组织业务必不可少,因此需要得到适当的保护。 2、信息的价值 企业…

数据结构和算法入门(时间/空间复杂度介绍--java版)

数据结构和算法入门(时间/空间复杂度介绍–java版) write in front 作者: 向大佬学习 专栏: 数据结构(java版) 作者简介:大二学生 希望能学习其同学和大佬的经验! 本篇博客简介&…

定时任务调度 xxl-job

框架地址 https://gitee.com/jiaruiguo/xxl-job.git项目说明 调度管理系统 xxl-job-admin 定时任务实现系统 普通系统: xxl-job-executor-sample-frameless 微服务系统:xxl-job-executor-sample-springboot 配置说明 工程名:xxl-job-execut…