【目标检测】12、TOOD: Task-aligned One-stage Object Detection

2023-11-10


在这里插入图片描述

论文:https://arxiv.org/pdf/2108.07755.pdf

代码:https://github.com/fcjian/TOOD

出处:ICCV2021

一、背景

目标检测一直是计算机视觉中的重要任务。目前的方法大都是并行的实现对目标的分类和定位。分类的目标是学习目标的具有区分力的特征,定位的目标是对目标的边界进行准确的定位。所有这个两个任务有很大的不同,也会导致这两个任务的不对齐。

二、动机

现有的单阶段方法都通过一定的手段来实现两个任务的统一,也就是使用目标的中心点。他们加上目标中心点的 anchor 能够给分类和定位提供更准确的预测。例如 FCOS/ATSS 都使用 centerness 分支来提高在物体中心附近的anchor的分类得分,并且给对应的anchor的定位 loss 更多的权重。但这些方法大都有两个问题:

问题一:分类和定位是被独立对待的

现有单阶段检测方法,将分类和定位分为两个分支,这样可能回导致两个任务的互相交互很少,导致预测的不一致性。如图1所示,ATSS 检测器识别出了一个餐桌,但是对披萨的定位确非常准确。

问题二:Task-agnostic 的样本分配(对任务无差别的样本分配)

大多数 anchor-free 的检测室使用基于几何的分配方法来选择里中心点近的 anchor-point,但 anchor-based 方法通常计算anchor box 和 gt box 的 IoU 来确定 anchor。但是,分类和定位的最优 anchor 通常是不一致的,而且和目标的形状和特征有很大的关系。所以,对不同任务都使用相同的样本分配方法难以对这两个任务起到相同的作用。

如图1中 ATSS(第一行) 的 score 和 IoU,result 列展示出了一个问题,即定位最优的anchor的位置并不一定在目标的中心,而且和最好的分类得分的框不是同一个。所以,定位的准确的框可能会被 NMS 干掉。
在这里插入图片描述
基于此,作者提出了一个 Task-aligned one-stage object detection 方法 TOOD,通过设计一个新的 head 结构来更好的将分类和定位任务对齐。

三、方法

总览:

类似于现有的 one-stage 方法,本文提出的 TOOD 也采用了 “backbone-FPN-head” 的结构,并且为了高效性,TOOD 采用了类似于 ATSS 的anchor生成方法,即在每个位置生成一个anchor,这里的 anchor 在 anchor-free 方法中表示 anchor-point,在 anchor-based 方法中表示 anchor-box。

本文提出了 Task-aligned head (T-head) 和 Task Alignment Learning (TAL) 来解决分类和定位对不齐的问题,如图2所示。T-head 和 TAL 可以合作起来来实现对这个两个任务的对齐。

  • 首先,T-head 在 FPN 输出特征中进行分类和定位
  • 然后,TAL 基于 alignment metric 来计算两者的 alignment signal
  • 最后,T-head 在反向传播的时候再使用 alignment signal 来动态调整分类的得分和定位的位置

在这里插入图片描述

3.1 Task-aligned Head

为了实现一个高效的结构来提升 head 的设计(如图3a),作者:

  • 加强了两个任务的交互
  • 提升的检测器学习对齐与否的能力

T-head 的结构如图3b所示,由一个简单的特征提取器和两个 Task-aligned Predictors 构成。
在这里插入图片描述

  • 为了加强两个任务的交互,作者使用了一个特征提取器来从卷积层中学习 task-interactive 特征,如图3b所示,这样的设计不仅仅可以加强任务的交互,而且可以给这两个任务提供多尺度感受野的多级特征。因此,可以使用单个分支从 FPN 特征中获得丰富的多尺度特征。
  • 之后,将会把计算得到的 task-interactive feature 送入两个TAP 来对齐分类和定位
    在这里插入图片描述

Task-aligned Predictor (TAP):

作者在计算 task-interactive features 的时候,会同事使用分类和定位的特征,这样也会使得每个任务更好的感知对方的状态。然而,由于是单个branch,task-interactive features 会不可避免的引入两个任务的特征冲突,因为两个任务的注意点是不同的。于是,作者提出了一个 layer attention 机制,通过动态计算 task-specific 的特征来进行任务的分解,如图3c所示。

在这里插入图片描述
task-specific 特征对每个任务的计算方式如下:

在这里插入图片描述

  • w k w_k wk 是第 k element of the learned layer attention w ∈ R N w\in R^N wRN

在这里插入图片描述

  • x i n t e r x^{inter} xinter 是对 X i n t e r X^{inter} Xinter 使用 average pooling 后得到的

最终,分类或定位的结果从每个 X t a s k X^{task} Xtask 来得到:

在这里插入图片描述

  • c o n v 1 conv1 conv1:1x1 conv
  • Z t a s k Z^{task} Ztask:将会通过 sigmoid 函数被转换为得分 P ∈ R H × W × 4 P\in R^{H \times W \times 4} PRH×W×4,通过 distance-to-box 转换为 bounding-box B ∈ R H × W × 4 B\in R^{H \times W \times 4} BRH×W×4

在这里插入图片描述
Prediction alignment:

在预测阶段,作者通过这个两个预测(P and B)的空间分布来进一步更精确的对齐这个两个任务

方法:计算 task-interactive feature,且对两个任务的对齐方法是不同的。

  • 分类:如图3c,作者使用空间概率图 M ∈ R H × W × 1 M\in R^{H\times W\times 1} MRH×W×1来调节分类预测,M 是从交互特征图中计算得到的,使得 M 能够学习这两个任务在每个空间位置上的一致性的梯度。
    在这里插入图片描述

  • 定位:作者从交互特征图中学习 spatial offset 图 O ∈ R H × W × 8 O\in R^{H\times W\times 8} ORH×W×8,来对每个位置上的 bbox 进行调整。这些学习到的offset能够使得 aligned anchor point 识别出其周围最好的预测框。
    在这里插入图片描述
    其中c是channel,上式是通过双线性差值实现的,而且这种计算量很小,因为 B 的channel 维度很小。

值得注意的一点是,每个通道的offset的学习都是独立的,也就是说每个 boundary 都能学到自己的 offset。这就能使得4条边界线都能学的准确,因为它们都是独立从离它们近的anchor point 学习到的。所以,本文的方法不仅仅能够对齐分类和定位的任务,还能提升定位准确性。

alignment maps M M M O O O 是从一堆 interactive feature 中学习到的,学习的方式是通过 TAL 学习:

在这里插入图片描述
注意:T-Head是独立于 TAL 的,可以作为一个即插即用的模块来提升单阶段目标检测的性能

3.2 Task Alignment Learning

TAL 在这里被提出来是为了进一步引导 T-Head 来做 task-aligned 的预测

3.2.1 Task-aligned sample assignment

对于实例的 anchor 分配应该满足以下规则:

  • well-aligned 的anchor 应该能够同时预测得到高的分类得分和准确的定位
  • misaligned 的anchor应该有一个低的分类得分,而且逐渐被抑制

基于上述两个目标,作者设计了一个新的 anchor alignment metric 来在 anchor level 衡量 task-alignment 的水平。

并且,alignment metric 被集成在了 sample 分配和 loss function里边,来动态的优化每个 anchor 的预测。

Anchor alignment metric:

我们已知,分类得分和 IoU表示了这两个任务的预测效果,所以,作者使用分类得分和IoU的高阶组合来衡量 task-alignment的程度。

方法:使用下列的方式来对每个实例计算 anchor-level 的对齐程度
在这里插入图片描述

  • s and u 分别为分类得分和 IoU 值
  • α \alpha α and β \beta β 分别为权重

从上边的公式可以看出来,t 可以同时控制得分和iou的优化来实现 task-alignment,可以引导网络动态的关注于高质量的anchor。

Training sample assignment:

对每个实例,作者选取 m 个前 t 大的value作为正样本

3.2.2 Task-aligned Loss

Classification objective:

为了精准的提升 aligned anchor 的分类得分,降低 misaligned anchor 的分类得分,作者在训练过程中使用 t t t 来替换positive anchor 的 binary label。但是这种方法,当这个label(比如 t)随着 α \alpha α β \beta β 的增大而减小的时候。所以,作者使用了 normalized t t t,称为 t ^ \hat t t^,来代替正样本的binary label。

t t t 规范化的原则:

  • 保证能够更好更高效的学习难样本(这类样本通常对应的 t 比较小)
  • 能够较好的保留(基于预测框准确率)不同实例的差别

t ^ \hat t t^ 的获得原则(instance level):

  • t ^ \hat t t^ 的最大值等于最大的 IoU 值

Binary Cross Entropy 对正样本的分类任务计算方式如下:
在这里插入图片描述

  • i i i 是一个实例对应的所有正 anchor 的第 i i i 个 anchor

作者又使用了 focal loss 来弥补正负样本的不平衡:

在这里插入图片描述

  • j j j 是第 j j j 个负 anchor
  • γ \gamma γ 是平衡参数

Localization objective:

well-aligned anchor(比如有较大的 t)预测出来的 bbox 通常会同时具有高的分类得分和准确的定位框,这样的 bbox 通常也会在 NMS 过程中保留下来。

t t t 也可以通过给 loss 来加权来选择高质量的bbox,即也可以衡量bbox的质量,所以在bbox的回归过程中,作者通过聚焦在well-aligned anchor (t 较大)并且抑制 misaligned anchor (t 较小)的方法,来促进任务对齐和回归预测。所以作者对回归任务的 loss 也做了加权,GIoU loss 的加权版本如下:在这里插入图片描述

  • b b b:预测的 bbox
  • b ^ \hat b b^:真实的 bbox

TAL 的整体 loss 为分类和定位 loss 之和

四、效果

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

【目标检测】12、TOOD: Task-aligned One-stage Object Detection 的相关文章

  • 高德地图报错TypeError: undefined is not a constructor

    高德地图在开发聚合和路线规划时报错TypeError undefined is not a constructor evaluating new n Driving map pe found in 经排查 原因是没有引入对应的插件 我们来看
  • IntelliJ IDEA流行的构建工具——Gradle

    IntelliJ IDEA 是java编程语言开发的集成环境 IntelliJ在业界被公认为最好的java开发工具 尤其在智能代码助手 代码自动提示 重构 JavaEE支持 各类版本工具 git svn等 JUnit CVS整合 代码分析
  • 猿如意 Chatgpt的使用规则

    猿如意 Chatgpt 是一种自然语言生成模型 它可以用来自动生成文本内容 使用规则如下 启动猿如意 Chatgpt 模型 输入自然语言文本作为模型的输入 根据模型的输出生成文本内容 可以根据需要修改输入文本或调整模型的参数来得到不同的输出
  • pandas逐行/列 遍历Dataframe的三种方式

    目录 一 pandas DataFrame iterrows 二 pandas DataFrame itertuples 三 pandas DataFrame items pandas 逐行 逐列 遍历数据有以下三种方法 一 pandas
  • Qt学习总结(一)

    一 项目中遇到的问题 1 c 文件中不同类如何共用一个变量 头文件1 h 源文件1 cpp 其他源文件2 cpp 3 cpp这些源文件都包含头文件1 h 方法 在1 h声明全局变量 extern int n 在1 cpp定义该全局变量 in
  • golang性能分析,pprof的使用,graphviz,火焰图

    golang中的pprof的使用 graphviz 一 关于pprof包 go中有pprof包来做代码的性能监控 包括 cpu profile mem profile block profile 在两个地方有包 net http pprof
  • 中文医疗大模型汇总

    写在前面 随着大语言模型的发展 越来越多的垂直领域的LLM发不出来 针对医学这一垂直领域的LLM进行整理 放在这里 希望对大家有一定的帮助吧 还会继续更新 大家有兴趣的话可以持续关注 更多关于中文医疗自然语言处理的资源和论文汇总 请访问我的
  • GoLang学习资源清单

    地鼠文档go语言文档网站通过收集整理go语言相关的学习文档 为大家提供一个学习平台https www topgoer cn 前景 Go语言中文文档https www topgoer com 文档 Gin Web FrameworkGin W
  • pyinstaller 打包.py文件生成exe(含转换.py文件为.pyd,保护源码,适合发布程序or论文复现用)

    文章目录 操作详情 1 安装Cython 2 修改调用外部数据or文件的 py文件 4 在命令行运行python setup py build ext inplace 5 创建main py文件 import 所有用到的包 写一个main

随机推荐

  • 数据库分表策略

    1 垂直划分 将数据表中的某些字段提出 组成新的数据表 将群组id 专辑id 音乐id提出 组成gzm数据表 而将 群组 专辑 音乐的详细信息单独放在其他数据表中 在求取索引 关系时 操作数据库效率更高 2 水平划分 2 1物理上的水平切分
  • 2018蓝桥杯B组国赛

    1 标题 三角形面积 已知三角形三个顶点在直角坐标系下的坐标分别为 2 3 2 5 6 4 3 1 5 1 7 2 求该三角形的面积 注意 要提交的是一个小数形式表示的浮点数 要求精确到小数后3位 如不足3位 需要补零 思路 利用两点求距离
  • vue项目(vue-cli)配置环境变量和打包时区分开发、测试、生产环境

    1 打包时区分不同环境 在自定义配置Vue cli 的过程中 想分别通过 env development env test env production 来代表开发 测试 生产环境 NODE ENV development NODE ENV
  • 坐标转换WGS-84 转 GCJ-02 和 GCJ-02转WGS-84

    WGS 84 to GCJ 02 static wgs gcj lng lat if this out of china lng lat return lng lat else var a 6378245 0 a 卫星椭球坐标投影到平面地图
  • ros系统设置动态服务器,让ROS变成你量身定做的WEB服务器

    如何用ROS来做一台简单的WEB服务器 我也提供了一些思路 但都太过于复杂 难以实用 介绍一种比较简单的修改方法 把HTTP目录链接到FTP目录下 不就可以很方便的修改了吗 试验 马上行动测试一下 1 关闭ROS 我的是学习用的 可一说关就
  • 15、OpenCV形态学操作——Hit-or-Miss

    OpenCV形态学操作 Hit or Miss 一 学习目标 二 Hit or Miss 一 学习目标 理解什么是Hit or Miss 学会在OpenCV中使用Hit or Miss 二 Hit or Miss 形态学算子根据图像的形状来
  • ceph集群部署

    一 ceph特点高性能 1 摒弃了传统的集中式存储元数据寻址的方案 采用CRUSH算法 数据分布均衡 并行度高 2 考虑了容灾域的隔离 能够实现各类负载的副本放置规则 例如跨机房 机架 感知等 3 能够支持上千个存储节点的规模 支持TB到P
  • vue上线项目去除所有console.log打印日志

    第一步 安装 babel plugin transform remove console 开发依赖 方法一 npm i babel plugin transform remove console save dev 方法二 第二步 在babe
  • 【数据库MySql】数据库基础——库和表的基础操作

    数据库学习大纲 1 SQL编程语言的语法 核心 2 数据库内部原理 面试题 3 使用java代码操纵数据库 JDBC编程 SQL是一个专门用来操作数据库数据的编程语言 MySQL服务器里面里有很多个数据库 这些是逻辑上的数据集合 一个数据库
  • CSAPP-BinaryBomb实验

    目录 一 实验目的与要求 二 实验原理与内容 三 实验过程与结果 1 程序编码 汇编 2 拆解过程 Phase 1 Phase 2 Phase 3 Phase 4 Phase 5 Phase 6 Secret phase 一 实验目的与要求
  • IOException parsing XML document from class path resource [applicationContext.xml]

    在spring框架搭建的时候 有的时候会出现这样错误 在网上看到说把路径具体指向 例如
  • ESP8266WIFI模块连接原子云及手机APP

    一 项目需求 使用ESP8266WIFI模块连接到正点原子的原子云 下载原子云手机APP到安卓手机 使用APP与8266WIFI模块通信互发数据 二 软硬件准备 硬件 1 正点原子的esp8266模块 2 usb to ttl 模块 软件
  • 详解Namespace与资源限制ResourceQuota,LimitRange

    前面我们对K8s的基本组件与概念有了个大致的印象 并且基于K8s实现了一个初步的CI CD流程 但对里面涉及的各个对象 如Namespace Pod Deployment Service Ingress PVC等 及各对象的管理可能还缺乏深
  • 云计算、大数据、人工智能的区别

    一 什么是人工智能 通俗来说 利用计算机及其相关设备来模拟和实现人类或者是智能生物的思想和行为 从而达到更彻底地代替人类进行生产活动 就是人工智能 人工智能有很多学派和技术路线 多以数学理论为工具 比如统计学 线性代数和概率论等 它聚焦于解
  • ENVI5.1 进行监督分类流程化工具时(classification workflow)界面显示不全的问题解决办法

    在使用ENVI5 1进行监督分类流程化工具时 classification workflow 会存在界面显示不全的如下问题 需要下载ENVI5 1的一个界面补丁 补丁下载链接 https pan baidu com s 1DHqd6wHDI
  • 数据库、sql、语句表、存储引擎、集成开发工具讲解、MySQL中的数据类型

    一 2 为什么要学习数据库 2 1上述技术适合小量数据 对于大量数据操作 性能低下 2 2上诉技术存储数据的技术有java语言提供 不够专业 3 数据库概述 3 1核心 数据管理 3 2方式CRUD 1 存 增删改 2 取 查 查所有 指定
  • 时间序列的分析及滚动预测代码

    注意 参考地址http www cnblogs com foley p 5582358 html 部分代码可能因为版本问题出现bug 什么是时间序列 时间序列简单的说就是各时间点上形成的数值序列 时间序列分析就是通过观察历史数据预测未来的值
  • Android开发基础

    基本知识 Android 是一个面向移动设备的软件堆层 包含了一个操作系统 中间件和关键的应用程序 每个 Android 应用程序都通过 Dalvik 虚拟机在自己的进程中运行 Android 应用程序是用 java 语言写的 通过 aap
  • vb.net 随窗口改变,缩放控件大小以及保持相对位置

    Public Class Form1 Dim originClienSize As Size Nothing Dim originBtnSize As Size Dim originBtnPos As Point Private Sub F
  • 【目标检测】12、TOOD: Task-aligned One-stage Object Detection

    文章目录 一 背景 二 动机 三 方法 3 1 Task aligned Head 3 2 Task Alignment Learning 3 2 1 Task aligned sample assignment 3 2 2 Task al