TOOD Task-aligned One-stage Object Detection 论文学习

1. 解决了什么问题?

目标检测通过多任务学习的方式,协同优化目标的分类和定位。分类任务会学习目标的判别特征,关注于目标的显著性或关键区域,而定位任务则学习准确地定位目标的边界。因为定位和分类的学习机制不同,这俩任务学到的特征分布也不同。当这两个分支做预测时,会产生一定的错位现象。

  • 分类和定位是独立的。两个独立的分支并行地做目标分类和定位,任务之间缺乏交流,会造成预测结果不一致。如下图红色格子,ATSS 识别的是餐桌,但定位的是披萨饼。
  • Task-agnostic 样本分配。分类和定位的最佳 anchors 通常是不一致的,根据目标的形状和特性差异可能很大。常用的样本分配方法都是 task-agnostic,因此这俩任务很难作出准确而一致的预测。如下图中的绿色格子代表了最佳的定位 anchor,它不是目标的中心点,而且与分类的最佳 anchor(红色格子)没有对齐。这会造成 NMS 时,一个准确定位的边框被抑制掉。

如下图,上面一行是 ATSS 预测的分类得分和定位得分的空间分布,下面一行是 TOOD 预测的分类得分和定位得分的空间分布。黄框是 ground truth,红色格子是分类的最佳 anchor,绿色格子是定位的最佳 anchor,若二者重叠则只显示红色格子。红框和绿框分别是红色格子和绿色格子的 anchor 预测出的边框。白色箭头表示最佳 anchor 偏离目标中心点的主要方向。
在这里插入图片描述

2. 提出了什么方法?

TOOD 学习对齐这两个任务。作者首先设计了一个 task-aligned head (T-Head),增强两个任务间的交流,在学习 task-interactive 和 task-specific 特征方面取得更好的平衡,更准确地对齐预测结果。其次,提出了 task alignment learning (TAL),通过样本分配机制和 task-aligned loss 训练,拉近两个任务各自最优的 anchors 的距离。

2.1 Overview

TOOD 的整体流程采用了“主干-FPN-Head”的结构。TOOD 在每个位置使用一个 anchor,对于 anchor-free 检测器它就是一个 anchor point,对于 anchor-based 检测器它就是一个 anchor box。T-head 首先基于 FPN 特征预测分类和定位。然后 TAL 基于新提出的 task alignment metric 计算任务对齐信号,表示分类和定位预测的对齐程度。最后根据 TAL 反向传播的学习信号, T-head 自动地调节各类别的概率和边框位置。对得最齐的 anchor 会得到更高的分类得分,并学习偏移量使预测框更加准确。
在这里插入图片描述

2.2 Task-aligned Head

为了使 head 更加高效,作者从两个方面出发:

  • 增加两个任务间的交流;
  • 增强检测器学习对齐的能力。

T-head 如下图 (b) 所示,包括一个简单的特征提取器和两个 task-aligned predictors (TAP)。
在这里插入图片描述

为了增强分类和定位任务间的交流,使用一个特征提取器(多个卷积层)学习一组 task-interactive 特征,即上图(b) 蓝色部分。该设计不仅能提高任务间的交流,也能为这俩任务提供具有多尺度感受野的多层级特征。 X f p n ∈ R H × W × C X^{fpn}\in \mathbb{R}^{H\times W\times C} XfpnRH×W×C代表 FPN 特征,其中 H , W , C H,W,C H,W,C分别是 FPN 特征的高度、宽度和通道数。特征提取器使用 N N N个卷积层和激活函数来计算 task-interactive 特征:
X k i n t e r = { δ ( conv k ( X f p n ) ) , k = 1 δ ( conv k ( X k − 1 i n t e r ) ) , k > 1 ∀ k ∈ { 1 , 2 , . . . , N } X_k^{inter}=\left\{ \begin{array}{ll} \delta(\text{conv}_k(X^{fpn})), \quad k=1 \\ \delta(\text{conv}_k(X^{inter}_{k-1})),\quad k>1 \end{array} \right. \forall k\in \lbrace 1,2,...,N\rbrace Xkinter={δ(convk(Xfpn)),k=1δ(convk(Xk1inter)),k>1k{1,2,...,N}

其中 conv k \text{conv}_k convk δ \delta δ表示第 k k k个卷积层和 relu \text{relu} relu函数。在 head 里使用单分支结构提取丰富的多尺度特征,然后计算得到的 task-interactive 特征会输入进两个 TAP,学习对齐分类和定位。

2.2.1 TAP

在 task-interactive 特征上进行分类和定位,这两个任务能互相感知到对方的状态。但由于是单分支设计,task-interactive 特征难免会因任务不同而存在一定的特征冲突。作者提出了一个层注意力(layer attention)机制,动态地计算 task-specific 特征,使任务解耦。下图展示了 TAP,分别计算分类或定位的 task-specific 特征:
在这里插入图片描述

X k t a s k = w k ⋅ X k i n t e r , ∀ k ∈ { 1 , 2 , . . . , N } X_k^{task}=\boldsymbol{w}_k \cdot X_k^{inter},\forall k\in \lbrace1,2,...,N\rbrace Xktask=wkXkinter,k{1,2,...,N}

w k \boldsymbol{w}_k wk是学习得到的层注意力 w ∈ R N \boldsymbol{w}\in \mathbb{R}^N wRN的第 k k k个元素。 w \boldsymbol{w} w是从 task-interactive 特征计算而来的,能够获取 X i n t e r X^{inter} Xinter不同 layer 的依赖关系:

w = σ ( f c 2 ( δ ( f c 1 ( x i n t e r ) ) ) ) \boldsymbol{w}=\sigma(fc_2(\delta(fc_1(\boldsymbol{x}^{inter})))) w=σ(fc2(δ(fc1(xinter))))

f c 1 , f c 2 fc_1, fc_2 fc1,fc2代表两个全连接层, σ \sigma σ sigmoid \text{sigmoid} sigmoid函数, δ \delta δ relu \text{relu} relu函数。将 X k i n t e r X_k^{inter} Xkinterconcat 起来得到 X i n t e r X^{inter} Xinter,然后使用全局平均池化得到 x i n t e r \boldsymbol{x}^{inter} xinter。最后,分类或定位的结果由每个 X t a s k X^{task} Xtask预测得到:
Z t a s k = conv 2 ( δ ( conv 1 ( X t a s k ) ) ) Z^{task}=\text{conv}_2(\delta(\text{conv}_1(X^{task}))) Ztask=conv2(δ(conv1(Xtask)))

其中 X t a s k X^{task} Xtask是将 X k t a s k X_k^{task} Xktask特征 concat 起来, conv 1 \text{conv}_1 conv1 1 × 1 1\times 1 1×1卷积,用于降维。 Z t a s k Z^{task} Ztask然后使用 sigmoid \text{sigmoid} sigmoid函数转换为分类得分 P ∈ R H × W × 80 P\in \mathbb{R}^{H\times W\times 80} PRH×W×80,或者用 distance-to-bbox \text{distance-to-bbox} distance-to-bbox转换为目标框 B ∈ R H × W × 4 B\in \mathbb{R}^{H\times W\times 4} BRH×W×4

2.2.2 Prediction alignment

预测时,通过调节两个预测( P P P B B B)的空间分布,进一步对齐两个任务。以前的方法使用 center-ness 分支或 IoU 分支,基于类别特征或位置特征来调节类别预测。而本文则通过 task-interactive 特征综合考虑了两个任务,然后对齐这两个预测结果。如上图,作者使用一个空间概率图 M ∈ R H × W × 1 M\in \mathbb{R}^{H\times W\times 1} MRH×W×1调节类别的预测:

P a l i g n = P × M P^{align}=\sqrt{P\times M} Palign=P×M

M M M由 interactive 特征计算而来,学习每个空间位置上两个任务的对齐程度。

同时,为了对齐位置预测,从 interactive 特征学习一个空间偏移图 O ∈ R H × W × 8 O\in \mathbb{R}^{H\times W\times 8} ORH×W×8,调节每个位置的预测框坐标。该偏移量使对得最齐的 anchor point 能识别到它附近最优的边界预测:

B a l i g n ( i , j , c ) = B ( i + O ( i , j , 2 × c ) , j + O ( i , j , 2 × c + 1 ) , c ) B^{align}(i,j,c)=B(i+O(i,j,2\times c), j+O(i,j,2\times c+1), c) Balign(i,j,c)=B(i+O(i,j,2×c),j+O(i,j,2×c+1),c)

( i , j , c ) (i,j,c) (i,j,c)表示张量中第 c c c个通道的第 ( i , j ) (i,j) (i,j)个位置。上式通过双线性插值实现,因为 B B B的通道数不大,所以计算成本很低。注意,每个通道都会独立地学习偏移量,即目标的每条边都有一个偏移量。因为每条边都能学习它附近最准确的 anchor point,预测的四条边就能更加准确。因此,本文方法不仅能对齐定位和分类任务,也能通过识别每条边精确的 anchor point 来提升定位的准确率。

M M M O O O从 interactive 特征中自动地学习:
M = σ ( conv 2 ( δ ( conv 1 ( X i n t e r ) ) ) ) M=\sigma(\text{conv}_2(\delta(\text{conv}_1(X^{inter})))) M=σ(conv2(δ(conv1(Xinter))))
O = conv 4 ( δ ( conv 3 ( X i n t e r ) ) ) O=\text{conv}_4(\delta(\text{conv}_3(X^{inter}))) O=conv4(δ(conv3(Xinter)))

conv 1 \text{conv}_1 conv1 conv 3 \text{conv}_3 conv3是 2 个 1 × 1 1\times 1 1×1的卷积层,用于通道降维。 M M M O O O通过 TAL 学习。T-head 是一个独立的模块,可以不需要 TAL。

2.3 Task Alignment Learning

使用 TAL 进一步指导 T-head 学习对齐分类和定位的预测。TAL 包括一个样本分配策略和一个新的损失函数。它从任务对齐的角度出发,动态地选取高质量 anchors,同时考虑 anchors 的分配和加权。

2.3.1 Task-aligned Sample Assignment

为了使用 NMS,anchor 分配应该满足以下两个条件:

  • 对齐的 anchor 能同时预测出较高的类别得分和准确的边框位置;
  • 错位的 anchor 的类别得分应该很低,会被抑制掉。

于是作者提出了一个新的 anchor 对齐度量,计算任务对齐的程度。在样本分配和损失函数中加入该度量,动态优化每个 anchor 的预测。

Anchor alignment metric. 类别得分和预测框与目标框间的 IoU 分别代表分类和定位任务的预测质量,作者将类别得分和 IoU 结合,表示俩任务的对齐程度。使用下式计算每个实例的各 anchor 的对齐度量:
t = s α × u β t=s^{\alpha}\times u^{\beta} t=sα×uβ

s s s表示类别得分, u u u表示 IoU。 α , β \alpha,\beta α,β用于控制两项任务施加的影响。 t t t在任务对齐优化的过程中扮演重要角色,使网络动态地关注于高质量(任务对齐)anchors。

Training sample assignment. 关注于任务对齐的 anchors,采用简单的分配规则来选取训练样本:对于每个实例,选取 m m m t t t值最大 anchors 作为正样本,其余的 anchors 作为负样本,然后计算损失。

2.4 Task-aligned Loss

分类目标函数

为了抬高对齐的 anchors 的类别得分,降低那些没对齐的 anchors ( t t t值偏小)的类别得分,训练时对 t t t做归一化得到 t ^ \hat{t} t^,代替 positive anchor 的二值标签。根据下面两个性质来归一化 t ^ \hat{t} t^

  • 保证能有效地学习难例(即 t t t值较小的 positive anchors);
  • 保留实例之间关于预测框精度的排序。

于是作者采用归一化方法来调节 t ^ \hat{t} t^,对于每个实例, t ^ \hat{t} t^的最大值等于各 anchor 的 IoU ( u ) (u) (u)的最大值。对于分类任务,使用二元交叉熵来计算损失, t ^ \hat{t} t^作为正样本的 ground-truth 标签,而非 1

L c l s _ p o s = ∑ i = 1 N p o s B C E ( s i , t ^ i ) L_{cls\_pos}=\sum_{i=1}^{N_{pos}}BCE(s_i,\hat{t}_i) Lcls_pos=i=1NposBCE(si,t^i)
B C E ( s i , t ^ i ) = t ^ i ⋅ log ⁡ ( s i ) + ( 1 − t ^ i ) ⋅ log ⁡ ( 1 − s i ) BCE(s_i,\hat{t}_i)=\hat{t}_i \cdot \log(s_i) + (1 - \hat{t}_i) \cdot \log(1 - s_i) BCE(si,t^i)=t^ilog(si)+(1t^i)log(1si)

i i i表示某个实例的 N p o s N_{pos} Npos个 positive anchors 中的第 i i i个 anchor。本文还用了 Focal Loss 缓解正负样本不均衡的问题。总的分类损失如下:
L c l s = ∑ i = 1 N p o s ∣ t ^ i − s i ∣ γ ⋅ B C E ( s i , t ^ i ) + ∑ j = 1 N n e g s j γ ⋅ B C E ( s j , 0 ) L_{cls}=\sum_{i=1}^{N_{pos}}|\hat{t}_i-s_i|^{\gamma}\cdot BCE(s_i,\hat{t}_i)+\sum_{j=1}^{N_{neg}}s_j^{\gamma}\cdot BCE(s_j,0) Lcls=i=1Npost^isiγBCE(si,t^i)+j=1NnegsjγBCE(sj,0)

j j j表示 N n e g N_{neg} Nneg个 negative anchors 的第 j j j个 anchor。 γ \gamma γ和 Focal Loss 一文的含义相同,是调节系数。

定位目标函数

对齐的 anchors 预测出的边框通常置信度更高、边框更准确,才能在 NMS 时保留下来。训练时, t t t通过加权损失来提升高质量 anchor 的影响,降低低质量 anchor 的影响。高质量边框对模型有好处,而低质量边框则会产生大量冗余、无意义的信息。作者用 t t t值计算边框的质量。利用 t ^ \hat{t} t^对每个 anchor 的回归损失做加权

L r e g = ∑ i = 1 N p o s t ^ i L G I o U ( b i , b ‾ i ) L_{reg}=\sum_{i=1}^{N_{pos}}\hat{t}_i L_{GIoU}(b_i, \overline{b}_i) Lreg=i=1Npost^iLGIoU(bi,bi)
b , b ‾ b,\overline{b} b,b分别是预测框和目标框。总的 TAL 训练损失是 L r e g L_{reg} Lreg L c l s L_{cls} Lcls之和。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DP学习第三篇之不同路径

DP学习第三篇之不同路径 62. 不同路径 - 力扣(LeetCode) 一.题目解析 二. 算法原理 状态表示 tips: 经验题目要求。以[i,j]位置为结尾,。。。 dp[i][j]: 走到[i, j]位置时,一共多少种路径 状态转移方程 tips: 用之前或之后的状…

Visual Studio Code安装详细教程

win电脑可以打开该网址 vs官方下载网站 点击这里免费下载 下载下来是一个安装程序,直接以管理员身份运行即可 我同意安装,然后选择D盘的一个空间进行安装 然后点击下一步 安装如图所示勾选,点击下一步 点击安装 等待安装完成即可 打开…

Electron 学习_BrowserWindow

BrowserWindow创建并控制浏览器窗口(主进程) 条件:在 app 模块 emitted ready 事件之前,您不能使用此模块。 1.在加载页面时,渲染进程第一次完成绘制时,如果窗口还没有被显示,渲染进程会发出 ready-to-show 事件 。 在…

前端(九)——探索微信小程序、Vue、React和Uniapp生命周期

🙂博主:小猫娃来啦 🙂文章核心:探索微信小程序、Vue、React和Uniapp生命周期 文章目录 微信小程序、Vue、React和Uniapp的基本定义和应用领域微信小程序生命周期生命周期概述页面生命周期应用生命周期组件和API的生命周期钩子 Vu…

失去中国市场的三星继续称霸全球,中国手机的份额反而进一步下降了

市调机构canalys公布了二季度全球手机市场的数据,数据显示三星、苹果的市场份额保持稳定并位居全球前二,三星的表现显然让人称奇,一直被唱衰,却一直都稳稳占据全球手机市场第一名。 从Canalys公布的数据可以看到,三星以…

从零开始学习自动驾驶路径规划-环境配置

从零开始学习自动驾驶路径规划-环境配置 前面,每个人遇到的问题不一样,这里记录了配置步骤和目前遇到的问题,会持续更新报错解决方法。配置时有报错请认真看报错经验 环境配置步骤(18.04和20.04都可以,有些问题没遇到…

vue中重新获取数据导致页面加长,要求在页面更新之后浏览器滚动条滚动到之前浏览记录的位置。以及获取当前页面中是哪个元素产生滚动条的方法。

目前的页面样式为&#xff1a; 代码是&#xff1a; <section id"detailSection"><el-tableref"multipleTable":data"logDetailList"style"width: 650px;margin:20px auto;"id"dialogDetail":show-header"fals…

【NLP】图解变压器(transformer)

一、说明 在这篇文章中&#xff0c;我们将看看 The Transformer——一个利用注意力来提高这些模型训练速度的模型。转换器在特定任务中优于谷歌神经机器翻译模型。然而&#xff0c;最大的好处来自变压器如何适应并行化。事实上&#xff0c;谷歌云建议使用The Transformer作为参…

【Linux后端服务器开发】协议定制(序列化与反序列化)

目录 一、应用层协议概述 二、序列化与反序列化 Protocal.h头文件 Server.h头文件 Client.h头文件 server.cpp源文件 client.cpp源文件 一、应用层协议概述 什么是应用层&#xff1f;我们通过编写程序解决一个个实际问题、满足我们日常需求的网络程序&#xff0c;都是应…

0基础学习VR全景平台篇 第69篇:VR直播-如何设置广告

直播间可以插入轮播广告&#xff0c;并且支持外链跳转&#xff0c;能够有效地提升VR直播活动的转化率。 1、点击&#xff0c;添加广告 2、广告图展现形式分为两种&#xff1a;普通广告和全屏广告&#xff0c;普通广告在非全屏播放的直播间显示&#xff0c;全屏广告在全屏播放的…

【Visual Studio】VS调用tensorflow C++API的配置(无需编译)

1. 首先下载并安装visual studio Visual Studio 2015 安装教程&#xff08;附安装包&#xff09;&#xff0c;按照博客中顺序来就可以 如果在安装过程中提示安装包损失或毁坏&#xff0c;参考VS2015安装过程中安装包丢失或损坏解决办法 卡在哪个搜索文件上就找到哪个文件再继…

【100天精通python】Day15:python 第三方模块和包,模块如何以主程序形式执行

目录 1 常用的第三方模块 2. 第三方模块的安装和使用 2.1 安装第三方模块&#xff1a; 2.2 导入第三方模块&#xff1a; 2.3 使用第三方模块&#xff1a; 3 模块以主程序形式执行 4 python 中的包 4.1 python程序的包结构 4.2 创建包 4.3 python中包的导入和使用 5 …

lama cleaner

这里写自定义目录标题 安装参数包含的额外plugins 安装 conda create --name lamacleaner python3.10 pip install -r requirements.txt pip install gfpgan pip install realesrgan pip install rembg pip install .如果安装本package报错&#xff0c;可以尝试改&#xff1…

【安全】web中的常见编码浅析浏览器解析机制

目录 常见编码 一、ASCII码 二、URL编码 三、Unicode编码 四、HTML实体编码 结合编码理解浏览器解析机制 常见编码 一、ASCII码 ASCII (American Standard Code for Information Interchange&#xff0c;美国信息交换标准代码&#xff09; 计算机内部&#xff0…

Ceph简介和特性

Ceph是一个多版本存储系统&#xff0c;它把每一个待管理的数据流(例如一个文件) 切分为一到多个固定大小的对象数据&#xff0c;并以其为原子单元完成数据存取。 对象数据的底层存储服务是由多个主机 (host) 组成的存储集群&#xff0c;该集群也被称之为 RADOS (ReliableAutoma…

测试覆盖率 JVM 字节码测试运用 - 远程调试、测试覆盖、影子数据库

目录 前言&#xff1a; 简介 基础使用方式介绍 工具特性 前言&#xff1a; 在软件开发中&#xff0c;测试覆盖率是一个非常重要的指标&#xff0c;它表示代码中所有的测试用例是否都已经被覆盖到。JVM 字节码测试是一种比较新的测试方法&#xff0c;它可以对 JVM 字节码进…

php开发实战分析(10):城市区县联动筛选

php开发实战分析系列目录 php开发实战分析(1)&#xff1a;mysql操作字段&#xff08;添加、删除、修改&#xff0c;多数据表中新增多个字段&#xff09;php开发实战分析(2)&#xff1a;cookie的动态使用&#xff08;设置、获取、删除、猜你喜欢原理、购物车调用&#xff09;ph…

DB-GPT:强强联合Langchain-Vicuna的应用实战开源项目,彻底改变与数据库的交互方式

今天看到 蚂蚁科技 Magic 开源的DB-GPT项目&#xff0c;觉得创意很好&#xff0c;集成了当前LLM的主流技术&#xff0c;主要如下 Langchain&#xff1a; 构建在LLM之上的应用开发框架HuggingFace: 模型标准&#xff0c;提供大模型管理功能Vicuna: 一个令GPT-4惊艳的开源聊天机…

❓“如何创业?互联网创业又该如何入手?

&#x1f31f;5大创业建议&#xff0c;让你轻松入门&#xff01; 作为一名互联网创业者&#xff0c;我想分享一下我的创业经验。下面是我的五个建议&#xff0c;希望对你有所帮助&#xff01; &#x1f31f;了解市场需求 在创业之前&#xff0c;了解市场需求非常重要。你需要研…

Docker基本概念+命令

Docker基本概念命令 一、Docker是什么&#xff1f;二、为什么Docker技术受欢迎三、Docker核心概念四、Docker安装五、Docker镜像操作1.搜索镜像2.获取镜像3.镜像加速下载4.查看镜像信息5.查看下载的镜像文件信息6.查看下载到本地的所有镜像7.获取镜像的详细信息8.修改镜像标签9…