PAA介绍

2023-11-17

ECCV 2020 的一篇文章

论文地址:https://arxiv.org/abs/2007.08103


目录

一、简介(摘要)

整个策略流程为:

二、相关背景介绍

三、提出的方法

3.1 概率Anchor分配算法

3.2 测试阶段加入预测IoU值作为定位质量评估

3.3 评分投票


一、简介(摘要)

       PAA表示(Probabilistic Anchor Assignment),仍然是anchor分配机制(这几年目标检测的一个热点方向)。近年来已经证实anchor分配策略可以很大影响一个模型的性能。

本文提出的策略可以根据模型的学习状态自适应地将锚点分配给对应gt的正样本和负样本,从而使模型能够以概率的方式对分配进行推理。

整个策略流程为:

  • 首先根据当前模型计算所有anchor的得分,这个得分可以反映出检测框分类和定位的质量,可以看作是模型认为这个anchor是否跟object相关
  • 然后根据这些得分拟合出一个概率分布(可以区分是正负样本两种模式),然后再根据这个概率分布来找到正样本概率高的样本,以此划分正负样本,这样就将anchor分配问题转换成一个最大似然估计问题
  • 最后再用这些正负样本对模型进行训练。

此外,本文还研究了训练阶段和测试推理阶段的gap(训练的时候要同时优化分类和定位,但是测试的时候只根据分类得分来选择bbox),并且提出了在测试阶段加入预测IoU来衡量定位的精度,最后用分类得分乘IoU的预测值来当NMS的依据,弥补训练和测试的gap,如下图所示(Post-Processing=后处理,表示推理阶段)。这种方法在RetinaNet的baseline上只额外增加了一层卷积层,因此十分高效。

最后,还提出了一种得分投票的方法来提高精度

已在mmdetection里实现,详见configs/paa/

二、相关背景介绍

已有的一些anchor分配策略一般考虑anchor跟gt的IoU,如果IoU超过给定的阈值,那么就被指定为正样本。但是这种策略没有考虑到相交区域里的实际内容,可能里面包含了很多带噪声的背景、其他object以及只包含了对应object里少量有意义的部分。

在本文提出以前已经有一些工作提出了新的anchor分配策略,本文进一步拓展了相关思想,提出了一种新的anchor分配策略PAA(PAA具体操作见简介)。思路是分配过程要跟模型相关,不同的模型产生的正样本也不同;哪怕没有一个anchor跟gt的iou高,也要分配一些anchor作为正样本进行训练,即,只要模型推理出这个anchor跟gt相关,没必要看iou高不高;另外只要满足条件,都可以成为正样本,没必要限制固定的数量;最重要的是,需要评估这些anchor的质量来反映模型的状态。

三、提出的方法

3.1 概率Anchor分配算法

本文的目的是为了设计出一个Anchor分配策略, 要求是实现三个功能:

  • 要能根据模型能否找到能用于分配anchor给对应object的证据的概率来衡量这个anchor的质量
  • anchor划分为正负样本应该是自适应的,动态的,所以不能有什么IoU阈值这样的超参数
  • 分配策略总体是概率分布的可能性最大化,类似极大似然的思想,这样分配过程就带有概率性

具体来说,定义一个anchor的质量分数,用来反映出这个anchor对于离它最近的gt的bbox预测输出的质量,可以简单设计为定位得分乘分类得分,其中定位得分是IoU

注:文中w.r.t =with regard to 的缩写,意思是“关于”

然后对这个评分进行相关操作后拓展成一个评分损失函数:

我们把这个anchor对于给定GT的得分看成是从一个分布中采样得到的,然后用最大似然的方法来估计这个分布的参数。由于要将anchor分为正样本和负样本,因此我们用GMM(高斯混合模型),用两个高斯分布来建模这个anchor的得分分布。

只要给定一组anchor的得分,就可以用EM(期望值最大化)来估计上面这个高斯分布的参数。

得到概率分布后,进行区分正负样本的方法有很多种,如下图所示,都行。

具体算法伪代码如下图所示:

为了计算anchor的分数,首先把anchor分配给IoU最高的那个gt(第3行)。为了让EM算法更加高效,我们从每个特征level上选择了top k个anchor(5-11行),然后进行EM的估计(12行),top k之外的anchor被分配为负样本(16行)。

3.2 测试阶段加入预测IoU值作为定位质量评估

测试的时候,只需要加入一个额外的卷积层,用sigmoid进行激活,预测得到合理范围内的IoU的预测,训练目标现在变成:

实验证明可以提高精度。

3.3 评分投票

在后处理阶段提出了一个trick:在NMS之后,对每个留下来的预测框b,根据其中si计算得到的分数si将b更新为b_hat

候,只需要加入一个额外的卷积层,用sigmoid进行激活,预测得到合理范围内的IoU的预测,训练目标现在变成:

实验证明可以提高精度。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PAA介绍 的相关文章

  • 在 Pandas 中,如何从基于另一个数据框的数据框中删除行?

    我有 2 个数据框 一个名为 USERS 另一个名为 EXCLUDE 他们都有一个名为 电子邮件 的字段 基本上 我想删除 USERS 中包含 EXCLUDE 中包含电子邮件的每一行 我该怎么做 您可以使用boolean indexing
  • 如何在 Jupyter Notebook 中运行 Python 异步代码?

    我有一些 asyncio 代码在 Python 解释器 CPython 3 6 2 中运行良好 我现在想在具有 IPython 内核的 Jupyter 笔记本中运行它 我可以运行它 import asyncio asyncio get ev
  • 使用 Python 创建 MIDI

    本质上 我正在尝试从头开始创建 MIDI 并将它们放到网上 我对不同的语言持开放态度 但更喜欢使用Python 两种语言之一 如果这有什么区别的话 并且想知道我应该使用哪个库 提前致谢 看起来这就是您正在寻找的 适用于 Python 的简单
  • NumPy linalg.eig

    我有这个烦人的问题 但我还没有弄清楚 我有一个矩阵 我想找到特征向量 所以我写 val vec np linalg eig mymatrix 然后我得到了 vec 我的问题是 当我小组中的其他人对相同的矩阵 mymatrix 做同样的事情时
  • 无故运行测试时 PyCharm 抛出“AttributeError: 'module' object has no attribute”

    因此 我有一个 Django REST Framework 项目 有一天它无法在 PyCharm 中运行测试 从命令行我可以使用它们来运行它们paver or the manage py直接地 曾经有一段时间 当我们没有在文件顶部导入类的超
  • 字符串中的注释和注释中的字符串

    我正在尝试使用 Python 和 Regex 计算 C 代码中包含的注释中的字符数 但没有成功 我可以先删除字符串以删除字符串中的注释 但这也会删除注释中的字符串 结果会很糟糕 是否有机会通过使用正则表达式来询问不匹配注释中的字符串 反之亦
  • 使用 NLTK 在 Python 中获取大量名词(或形容词);或 Python Mad Libs

    Like 这个问题 https stackoverflow com questions 7439555 noun adjective etc word lists or dictionaries common words 我有兴趣按词性获取
  • PyTorch 给出 cuda 运行时错误

    我对我的代码做了一些小小的修改 以便它不使用 DataParallel and DistributedDataParallel 代码如下 import argparse import os import shutil import time
  • 如何在Python中高效地添加稀疏矩阵

    我想知道如何在Python中有效地添加稀疏矩阵 我有一个程序 可以将大任务分解为子任务 并将它们分配到多个 CPU 上 每个子任务都会产生一个结果 一个 scipy 稀疏矩阵 格式为 lil matrix 稀疏矩阵尺寸为 100000x50
  • 在相同任务上,Keras 比 TensorFlow 慢

    我正在使用 Python 运行斩首 DCNN 本例中为 Inception V3 来获取图像特征 我使用的是 Anaconda Py3 6 和 Windows7 使用 TensorFlow 时 我将会话保存在变量中 感谢 jdehesa 并
  • Alembic:如何迁移模型中的自定义类型?

    My User模型是 class User UserMixin db Model tablename users noinspection PyShadowingBuiltins uuid Column uuid GUID default
  • 揭秘sharedctypes性能

    在 python 中 可以在多个进程之间共享 ctypes 对象 然而我注意到分配这些对象似乎非常昂贵 考虑以下代码 from multiprocessing import sharedctypes as sct import ctypes
  • 如何从 JSON 响应重定向?

    所以我尝试使用 Flask 和 Javascript 上传器 Dropzone 上传文件并在上传完成后重定向 文件上传正常 但在烧瓶中使用传统的重定向 return redirect http somesite com 不执行任何操作 页面
  • 如何在 Django 中使用基于类的视图创建注册视图?

    当我开始使用 Django 时 我几乎使用 FBV 基于函数的视图 来处理所有事情 包括注册新用户 但当我更深入地研究项目时 我意识到基于类的视图通常更适合大型项目 因为它们更干净且可维护 但这并不是说 FBV 不是 无论如何 我将整个项目
  • GradientTape 根据损失函数是否被 tf.function 修饰给出不同的梯度

    我发现计算的梯度取决于 tf function 装饰器的相互作用 如下所示 首先 我为二元分类创建一些合成数据 tf random set seed 42 np random seed 42 x tf random normal 2 1 y
  • 使用 NLP 进行地址分割

    我目前正在开发一个项目 该项目应识别地址的每个部分 例如来自 str Jack London 121 Corvallis ARAD ap 1603 973130 输出应如下所示 street name Jack London no 121
  • Python对象初始化性能

    我只是做了一些快速的性能测试 我注意到一般情况下初始化列表比显式初始化列表慢大约四到六倍 这些可能是错误的术语 我不确定这里的行话 例如 gt gt gt import timeit gt gt gt print timeit timeit
  • Python问题:打开和关闭文件返回语法错误

    大家好 我发现了这个有用的 python 脚本 它允许我从网站获取一些天气数据 我将创建一个文件和其中的数据集 有些东西不起作用 它返回此错误 File
  • 通过 Web 界面执行 python 单元测试

    是否可以通过 Web 界面执行单元测试 如果可以 如何执行 EDIT 现在我想要结果 对于测试 我希望它们是自动化的 可能每次我对代码进行更改时 抱歉我忘了说得更清楚 EDIT 这个答案此时已经过时了 Use Jenkins https j
  • 使用 Python 将对象列表转为 JSON

    我在转换时遇到问题Object实例到 JSON ob Object list name scaping myObj base url u number page for ob in list name json string json du

随机推荐

  • geoda空间自相关分析_【方法笔记4】Geoda空间计量1 空间自相关

    以黑龙江省为例 1 导入shp格式地图 打开目标地图 点击第二行第4个数据按钮可以查看地图数据变量 2 数据合并 即将研究的各地级市数据与导入地图 捆绑 首先找到地图数据中可以唯一表征每个地级市的变量 如 其次将个人研究变量与上述可对各地级
  • Kubernetes 存活、就绪和启动探针

    Kubernetes主要有三中探针 存活 Liveness 就绪 Readiness 和启动 Startup 探针 kubelet 使用存活探针来确定什么时候要重启容器 例如 存活探针可以探测到应用死锁 应用程序在运行 但是无法继续执行后面
  • auth.log 频繁出现Cron: pam_unix (cron:session): session opened/closed for user root by (uid=0)

    This is my week of playing around with mail servers and I have been keeping an eye on the logs on a regular basis I noti
  • 面试题:说说你对闭包的理解?

    闭包 一个函数和它的词法环境的引用捆绑在一起这样的组合就形成了闭包 比如一个函数A return出去了一个函数B 那么这个函数B可以在外部访问函数A内部的变量 此时在就形成了一个函数B的变量背包 A函数执行结束 这个变量也不会被销毁 并且这
  • gzip: stdin: not in gzip format tar: Child returned status 1 tar: Error is not recoverable: exiting

    gzip stdin not in gzip format tar Child returned status 1 tar Error is not recoverable exiting now 可能是下载链接不是资源链接 而是页面
  • Android 构建配置文件(config.gradle)

    1 新建config gradle 在自己的项目根目录下一个文件夹下创建一个config gradle文件名的文件 和settings gradble同目录 把自己需要用到的库跟版本号写在dependencies 标签括号内 ext and
  • springboot前后端分离之node.js环境搭建

    参考自链接 https www cnblogs com zhouyu2017 p 6485265 html Node js安装及环境配置之Windows篇 一 安装环境 1 本机系统 Windows 10 Pro 64位 2 Node js
  • Nacos 单机模式部署(Windows系统)

    Nacos 下载地址 Nacos 是阿里巴巴推出来的一个项目 这是一个更易于构建云原生应用的动态服务发现 配置管理和服务管理平台 Nacos 致力于帮助您发现 配置和管理微服务 Nacos 提供了一组简单易用的特性集 帮助您快速实现动态服务
  • 区块链学习5:智能合约Smart contract原理及发展历程科普知识

    前往老猿Python博文目录 一 智能合约的定义 通俗来说 智能合约就是一种在计算机系统上 当一定条件满足的情况下可被自动执行的合约 智能合约体现为一段代码及其运行环境 例如银行信用卡的自动还款就是一种典型的智能合约 我们来看看智能合约概念
  • 三维形体投影面积

    三维形体投影面积 在 n x n 的网格 grid 中 我们放置了一些与 x y z 三轴对齐的 1 x 1 x 1 立方体 每个值 v grid i j 表示 v 个正方体叠放在单元格 i j 上 现在 我们查看这些立方体在 xy yz
  • Java格式化字符串

    String类的静态format 方法用于创建格式化的字符串 format 方法有两种重载形式 1 public static String format String format Object args 该方法使用指定的格式字符串和参数
  • Java无向图链表、邻接表实现以及深度优先遍历广度优先遍历

    概述 图的存储形式中链表是通过数组加LinkedList 不一定是LinkedList 可以自己写链 也可以选择其他的集合数据结构 邻接表采用的是二维数组的结构 链表存储形式的相关实现 数据存储结构与基础操作 初始化数据存储结构 priva
  • mysql5.7小版本升级-windows

    mysql5 7小版本升级 windows 应用场景 mysql 5 7 20升级到当前最新的5 7 31 Windows环境 官网下载链接 https dev mysql com downloads mysql 5 7 html 注意 操
  • 区间预测

    区间预测 MATLAB实现GARCH分位数时间序列预测 目录 区间预测 MATLAB实现GARCH分位数时间序列预测 效果一览 基本介绍 模型描述 程序设计 研究总结 参考文献 效果一览 基本介绍 GARCH代表广义自回归条件异方差 它是一
  • 2015~2019年教育大数据会议期刊汇总及论文总结(不再更新)

    以下论文大部分与个性化导学相关 1 数据挖掘会议 AAAI AAAI 17 Question dif culty prediction for reading problems in standard tests AAAI 18 Medic
  • ftp服务器密码为空,ftp服务器无密码设置密码

    ftp服务器无密码设置密码 内容精选 换一换 华为云帮助中心 为用户提供产品简介 价格说明 购买指南 用户指南 API参考 最佳实践 常见问题 视频帮助等技术文档 帮助您快速上手使用华为云服务 如果在创建弹性云服务器时未设置密码 或密码丢失
  • 可以自定义公式的计算器_超多的计算器 总有一个用得上

    本期为大家分享几款计算器 这几款计算器足以满足你所有需求 功能强大 你值得拥有 01 Symbolab Practice 你的私人数学导师 以步骤展示任何数学问题解决步骤 数学计算Symbolab计算器将能为你解决 1 代数 等式 不等式
  • 单链表(数组模拟:静态链表)

    单链表 实现一个单链表 链表初始为空 支持三种操作 向链表头插入一个数 删除第 kk 个插入的数后面的数 在第 kk 个插入的数后插入一个数 现在要对该链表进行 MM 次操作 进行完所有操作后 从头到尾输出整个链表 注意 题目中第 kk 个
  • MySQL 临时表与内存表的区别

    文章目录 1 临时表 2 内存表 3 区别 4 小结 在 MySQL 中 Temporary Table 临时表 和 Memory Table 内存表 是两种不同的表类型 它们有一些重要的区别和用途 1 临时表 临时表 Temporary
  • PAA介绍

    ECCV 2020 的一篇文章 论文地址 https arxiv org abs 2007 08103 目录 一 简介 摘要 整个策略流程为 二 相关背景介绍 三 提出的方法 3 1 概率Anchor分配算法 3 2 测试阶段加入预测IoU