【论文阅读笔记】TOOD: Task-aligned One-stage Object Detection

news2024/9/30 11:30:16

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

文章目录

  • 论文小结
  • 论文简介
  • 论文方法
    • Task-aligned Head(T-Head)
      • T-Head伪代码解释
    • Task Alignment Learning(TAL)
      • Task-aligned Sample Assignment
      • Task-aligned Loss
  • 论文实验
    • 消融实验

论文小结

  本文的目标,主要是解决不同任务之间预测的不对齐问题。任务不对齐,简单来说,就是分类的最佳anchor(point)和回归的最佳anchor(point)不一定是同一个,亦或者同个grid point的分类和回归所预测的实例对象不是同一个。

  为了解决这个问题,作者从模型结构的检测头或者训练策略中的标签分配中出发,分别设计了T-HeadTAL两个能相互结合的方案。其中TAL被后续文章和实践中较多使用。

  TAL的主要思路就是不事先赋予无法改变的标签,而是结合分类的预测 s \mathcal{s} s 和回归的预测生成的IoU分数 u \mathcal{u} u来动态生成本次学习的标签。因此,TAL(Task Alignment Learning)中会有一个learning的说法。

  本文的对比实验和消融实验室未充分训练的对比,大致训练12个epoch来对比的。

论文简介

  由于分类和定位学习机制的差异,两个任务学习到的特征空间分布可能不同。当两个任务分支单独预测时,会导致一定程度的不对齐。如下图 1 1 1所示,上面行是ATSS算法预测的结果,下面行是本文TOOD算法预测的结果。图中黄色框是餐桌的label,分类任务的最佳位置是红色色块,其边框预测为红框;回归任务的最佳位置是绿色色块。从图 1 1 1可以容易看出,在原有方法训练管道得到的结果,可能会出现分类任务和定位任务的不对齐问题。

  在原先的方法(比如FCOS和ATSS)的认知中,对象的几何中心附近更容易预测对象(anchor-based在grid上,anchor-point),给予靠近中心的正样本分配更高的分数,更高的权重。这种启发式的方法取得很好的效果,但可能带来两个局限性:

  1. 分类和定位的独立性。对象实例有重叠时,分类目标和定位目标不匹配;
  2. 任务不可知标签分配。标签都是按照定位的几何中心分配的,但即使是定位问题,几何中心都不一定是最合适预测的。更何况标签的分配没有考虑分类任务的概率图(probably map)。分类和定位的最佳anchor通常是不一致的,并且依据目标的形状和特种有较大差异。因此很难对两个任务作出准确而一致的预测。

  为了解决分类任务和定位任务的不对齐问题,本文的贡献是提出了T-head和TAL两个方法。

  T-head,大致是为了增加两个任务之间的交互,以及增强检测器学习对齐的能力。总得来说,就是设计了一个新的检测头。

  TAL方法,目标是让两个任务的最佳anchor尽可能接近。其做法是设计一个简单的分配方案和任务对齐损失。样本分配通过每个anchor的任务对齐难度来收集训练的正负样本。而任务对其损失则在训练过程中逐渐统一预测分类和定位的最佳anchor。
  基本做法如下图所示,产生了cls和loc预测,再获得对齐指标,放入TAL中,进行标签分配和反向传播。

论文方法

  网络的整体设计也是按照“backbone - neck - head”结构来的。为简单和方便,TOOD在每个位置使用 1 1 1个anchor(anchor point/box)。如上图 2 2 2所示,T-Head和TAL可以协调地共同作用。原架构如下图 3 ( a ) 3(a) 3(a)所示,所提出的T-head如下图 3 ( b ) 3(b) 3(b)所示。

Task-aligned Head(T-Head)

  T-Head的目标是增加分类任务和定位任务的交互,以及增加两个任务之间的预测对齐能力。

  T-Head的架构图如上图 3 ( b ) 3(b) 3(b)所示,先通过多个卷积来堆叠任务交互特征,如公式(1)所示,然后再经过 2 2 2个TAP(Task-aligned Predictor),用于对齐分类和定位。TAP的架构图如上图 3 ( c ) 3(c) 3(c)所示。
X k i n t e r = { δ ( c o n v k ( X f p n ) ) , k = 1 ,     ∀ k ∈ { 1 , 2 , . . . , N } δ ( c o n v k ( X k − 1 i n t e r ) ) , k > 1 (1) X_k^{inter}=\begin{cases}\delta(conv_k(X^{fpn})),k=1, \ \ \ \ \forall k\in\{1,2,...,N\} \\ \delta(conv_k(X_{k-1}^{inter})),k>1\end{cases}\tag{1} Xkinter={δ(convk(Xfpn)),k=1    k{1,2,...,N}δ(convk(Xk1inter))k>1(1)

  由于TAP是一条单独的分支,任务交互特征不可避免地会在两个不同任务之间引入一定程度的特征冲突,所以作者提出来layer attention机制。通过在level级别动态计算任务特定特征,来鼓励任务分解,如公式(2)、(3),(4)。
X k t a s k = w ⋅ X k i n t e r , ∀ k ∈ { 1 , 2 , . . . , N } , (2) X_k^{task} = \mathcal{w}\cdot X_k^{inter}, \forall k\in \{1,2,...,N\}, \tag{2} Xktask=wXkinter,k{1,2,...,N},(2)
  下面公式中的 δ \delta δ是全局池化层(GAP);
w = σ ( f c 2 ( δ ( f c 1 ( x i n t e r ) ) ) ) (3) \mathcal{w} = \sigma(fc_2(\delta(fc_1(x^{inter})))\tag{3}) w=σ(fc2(δ(fc1(xinter))))(3)
  下面公式中的 δ \delta δ是ReLU非线性层;
Z t a s k = c o n v 2 ( δ ( c o n v 1 ( X t a s k ) ) ) (4) Z^{task}=conv_2(\delta(conv_1(X^{task})))\tag{4} Ztask=conv2(δ(conv1(Xtask)))(4)

  如上图 3 ( c ) 3(c) 3(c)所示,对于预测的分类分数 P ∈ R H × W × 80 P\in\mathbb{R}^{H\times W \times 80} PRH×W×80,从交互特征中,学习一个空间概率图(spatial probability map) 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 (5) P^{align}=\sqrt{P\times M} \tag{5} Palign=P×M (5)

  同样的,对于预测的边框对象 B ∈ R H × W × 4 B\in\mathbb{R}^{H\times W \times 4} BRH×W×4,从交互特征中学习一个空间偏差图(spatial offset maps) O ∈ R H × W × 8 \Omicron\in\mathbb{R}^{H\times W \times 8} ORH×W×8来调整每个位置的bbox,完成对齐。 B a l i g n ( i , j , c ) = B ( i + O ( i , j , 2 × c ) , j + O ( i , j , 2 × c + 1 ) , c ) (6) B^{align}(i,j,c)=B(i+\Omicron(i,j,2\times c),j+\Omicron(i,j,2\times c+1), c)\tag6 Balign(i,j,c)=B(i+O(i,j,2×c),j+O(i,j,2×c+1),c)(6)

   O \Omicron O M M M从交互特征学习的公式如下: M = c o n v 2 ( δ ( c o n v 1 ( X i n t e r ) ) ) (7) M=conv_2(\delta(conv1(X^{inter})))\tag7 M=conv2(δ(conv1(Xinter)))(7) O = c o n v 4 ( δ ( c o n v 3 ( X i n t e r ) ) ) (8) \Omicron=conv_4(\delta(conv3(X^{inter})))\tag8 O=conv4(δ(conv3(Xinter)))(8)

T-Head伪代码解释

  依据作者的描述是能够平衡学习两个任务交互特征,实际上思路大致是在neck之后先使用统一的管道来tune特征,就像早期的cls head与reg head未解耦时的状态。然后使用一些启发性的架构,比如channel attention来“解耦”cls特征和reg特征,channel attention的权重初步由全局池化层(GAP)得到,再通过卷积对该权重进行学习(类似于AsConv),作为attention的自适应权重。在得到分类和回归的推理结果上,作者也有一些启发性的设计。比如,分类任务首先预测一个分类分数,然后再预测一个分类概率相结合;回归任务首先预测一个bbox的xywh,再预测一个offset来进行调整。

feat_0 = feat_fpn
feat_{i} = leaky_relu(bn(Conv(feat_{i-1})))			                    # use for both cls task and reg task.
feat = torch.cat(feat_{i,...,n})

weight = GAP(feat)
weight_cls = sigmoid(conv2(relu(conv1(weight)))				            # 从这儿解耦分类和回归,conv1/2/3/4表示不同卷积
weight_reg = sigmoid(conv4(relu(conv3(weight)))

feat_cls = channel_attention(weight_cls, feat)
feat_reg = channel_attention(weight_reg, feat)

# get cls prediction
cls_sigmoid = Conv3(256 -> num_anchors * 80)[feat_cls]                  # input is feat_cls
cls_prob = Conv1(256*6 -> 64)[feat] => relu => Conv3(64 -> 1)           # input is feat
cls_scores = \sqrt(cls_sigmoid.sigmoid() * cls_prob.sigmoid())

# get reg prediction
reg_dist = Conv3(256 -> num_anchors * 4)[feat_reg].exp()                # input is feat_reg
reg_bbox = dis2bbox(reg_dist)
reg_offset = Conv1(256*6 -> 64)[feat] => relu => Conv3(64 -> 8)         # input is feat
bbox_pred = deform_Conv2d(reg_bbox, reg_offset)		                    # a library from mmlab/mmcv,add reg_offset for reg_bbox map. details see the formule.

Task Alignment Learning(TAL)

  在TAL中,主要有两点创新:

  1. 动态选择最适合的anchor(在一个设计好的指标下);
  2. 它同时考虑anchor分配和权重,包括一个样本分配策略和专门为调整两个任务而设计的新Loss。

  anchor分配策略应该有如下 2 2 2个规则:(1)一个对齐良好的anchor应该同时能预测一个高的分类分数和一个精确的定位;(2)没对齐的anchor应该有交底的分数,随后被NMS抑制。

Task-aligned Sample Assignment

  设定分类分数为 s s s,预测和GT的IoU值为 u u u,设计anchor级的对齐指标如下面公式,这样能同时衡量分类和定位的预测质量: t = s α × u β (9) t=s^\alpha\times u^\beta\tag9 t=sα×uβ(9)

  对于每个实例,依据 t t t值进行排序,选择最大值的 m m m个anchors作为正样本,其他作为负样本。因此,每个训练迭代中,标签的分配都是动态赋予的

Task-aligned Loss

  分类目标上,作者使用 t t t值代替正样本anchor中的二元标签
  但作者也发现,随着 α \alpha α β \beta β的上升, t t t值标签就会变小,进而导致无法收敛。所以作者将 t t t进行正则化,标记为 t ^ \hat{t} t^,来代替正样本anchor中的二元标签。 t ^ \hat{t} t^的正则化应该遵循两项原则:(1)确保硬实例都能够高效地被学习(硬是难易样本的说法,比如Focal loss中的hard sample,此时所有的正anchor都只有很小的 t t t值标签);(2)根据预测框的精度来保持实例之间的等级。
  因此,作者采用了一个简单的实例级的正则化 t ^ \hat{t} t^方法:首先统计topK中的最大 t t t值(标位 t ∗ t^* t)以及最大IoU的 u u u值(标位 u ∗ u^* u),最终的 t ^ = t t ∗ ∗ u ∗ \hat{t}=\frac{t}{t^*}*u^* t^=ttu
  此时,经过BCE(Binary Cross Entropy)的损失函数为: L c l s _ p o s = ∑ i = 1 N p o s B C E ( s i , t ^ i ) (10) L_{cls\_{pos}}=\sum_{i=1}^{N_{pos}}BCE(s_i, \hat{t}_i)\tag{10} Lcls_pos=i=1NposBCE(si,t^i)(10)

  在分类任务上,使用focal loss,分类损失如下:其中 γ \gamma γ是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 ) (11) L_{cls}=\sum_{i=1}^{N_{pos}}|\hat{t}_i-s_i|^\gamma BCE(s_i, \hat{t}_i) + \sum_{j=1}^{N_{neg}}s_j^\gamma BCE(s_j, 0)\tag{11} Lcls=i=1Npost^isiγBCE(si,t^i)+j=1NnegsjγBCE(sj,0)(11)

  在定位任务上,作者通过关注对齐良好的anchors(具有较大的 t t t值),来提高任务对齐和回归精度,同时减少边框回归过程中不对齐anchors的影响。

  基于 t ^ \hat{t} t^来为每个anchor的bbox的loss重新分配权重。使用的损失函数为GIoU Loss,回归的损失公式如下: 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}_iL_{GIoU}(b_i, \bar{b_i}) Lreg=i=1Npost^iLGIoU(bi,biˉ)

论文实验

  COCO数据集,trainval135k为训练集,minival set为验证集。

  TOOD的backbone(ResNet-50,ResNet-101,ResNeXt-101-64x4d)都是在ImageNet上进行的预训练,检测头采用的是anchor-free的设计。本文实验中,anchor-based的组和anchor-free的性能相似。T-Head的连续卷积层数量 N = 6 N=6 N=6,Focal Loss的超参数 γ = 2 \gamma=2 γ=2

消融实验

  消融实验中,使用的backbone为ResNet-50,默认训练周期为 12 12 12个epochs(没有收敛完全)。

  下表1展示了T-head的消融实验结果,能涨AP 0.7 − 1.9 0.7-1.9 0.71.9

  TAL的消融实验如下表所示:

  Anchor-based和Anchor-free的消融实验如下:两者性能接近。

   α \alpha α β \beta β的消融实验如下表所示: α = 1.0 \alpha=1.0 α=1.0 β = 6 \beta=6 β=6的情况下,得到的性能最好。

  TOOD与其他一阶目标检测算法的对比结果如下:其中每个模型使用不同分辨率( 480 − 800 480-800 480800)训练,训练 24 24 24个epochs。

  TOOD整体结构的消融实验如下表所示:TOOD的设计 比 T-Head + ATSS 以及平行head + TAL的指标都好,表明T-head和TAL具有相辅相成的互补性。

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

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

相关文章

STM32F1+HAL库+FreeTOTS学习15——互斥信号量

STM32F1HAL库FreeTOTS学习15——互斥信号量 1. 优先级翻转2. 互斥信号量3. 相关API函数;3.1 互斥信号量创建3.2 获取信号量3.3 释放信号量3.4 删除信号量 4. 操作实验1. 实验内容2. 代码实现3. 运行结果 上期我们介绍了数值信号量。这一期我们来介绍互斥信号量 1. 优…

Hadoop FileSystem Shell 常用操作命令

提示:本文章只总结一下常用的哈,详细的命令大家可以移步官方的文档(链接贴在下面了哈🤣)— HDFS官方命令手册链接。 目录 1. cat 命令:查看 HDFS 文件内容2. put 命令:将本地文件上传到 HDFS3.…

基于VirtualBox和Ubuntu的虚拟环境搭建

VirtualBox简介 VirtualBox 是一款开源虚拟机软件。 是由德国 Innotek 公司开发,由Sun Microsystems公司出品的软件,使用Qt编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。简单易用,可虚拟的系统包括Windows&…

浅谈汽车智能座舱如何实现多通道音频

一、引言 随着汽车智能座舱的功能迭代发展,传统的 4 通道、6 通道、8 通道等音响系统难以在满足驾驶场景的需求,未来对于智能座舱音频质量和通道数会越来越高。接下来本文将浅析目前智能座舱如何实现音频功放,以及如何实现多路音频功放方案。…

Library介绍(三)

环境描述 工作条件 一般lib文件里面包含了芯片的工作条件即operation conditions,其指定了工艺(process)、温度(temperature)和电压(voltage),见图1。 其中,process代表了…

10款超好用的图纸加密软件推荐!2024企业图纸加密最佳选择!

在现代企业中,保护知识产权和敏感数据显得尤为重要。尤其是工程设计、建筑图纸等专业文件,若遭到泄露,可能导致巨大的经济损失和竞争优势的丧失。为了帮助企业有效保护图纸,本文将推荐10款超好用的图纸加密软件。 1.安秉图纸加密软…

【CSS in Depth 2 精译_043】6.5 CSS 中的粘性定位技术 + 本章小结

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结)第二章 相对单位(已完结)第三章 文档流与盒模型(已完结)第四章 Flexbox 布局(已…

在起草行业标准时,如何确保格式统一?

一、遵循相关规范 1. 严格按照国家有关标准编写规范以及行业特定的标准编写指南进行起草。熟悉并掌握规范中对于标准结构、条款编号、字体字号、图表格式等方面的具体要求。 2. 参考已发布的同行业成熟标准的格式,学习其成功的格式布局和表达形式。 二、建立模板 1…

9.24-k8s服务发布

Ingress 使用域名发布 K8S 服务 部署项目 一、先部署mariadb [rootk8s-master ~]# mkdir aaa [rootk8s-master ~]# cd aaa/ [rootk8s-master aaa]# # 先部署mariadb [rootk8s-master aaa]# # configmap [rootk8s-master aaa]# vim mariadb-configmap.yaml apiVersion: v1 ki…

Leecode刷题之路第五天之最长回文子串

题目出处 05-最长回文子串 题目描述 个人解法 思路: 1.找出所有子串 2.过滤回文子串 3.回文子串长度排序 4.输出最长回文子串 代码示例:(Java) todo复杂度分析 todo 官方解法 最长回文子串 方法1:动态规划 思路&…

新能源汽车储充机器人:能源高效与智能调度

新能源汽车储充机器人:开启能源高效利用与智能调度的未来之门 随着全球能源危机的日益加剧和环境污染问题的不断恶化,新能源汽车成为了未来交通领域的重要发展方向。然而,新能源汽车的普及不仅需要解决电池技术的瓶颈,还需要构建一…

【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【上篇】

【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【上篇】 一、TFLM是什么?二、TFLM开源项目2.1 下载TFLM源代码2.2 TFLM基准测试说明2.3 TFLM基准测试命令 三、TFLM初步体验3.1 PC上运行Keyword基准测试3.2 PC上运行Person detection基准测试3.3 No module nam…

netty之基础aio,bio,nio

前言 在Java中,提供了一些关于使用IO的API,可以供开发者来读写外部数据和文件,我们称这些API为Java IO。IO是Java中比较重要知识点,且比较难学习的知识点。并且随着Java的发展为提供更好的数据传输性能,目前有三种IO共…

怎么在Windows系统中使用Chrome的语音搜索功能

在Windows系统中使用谷歌浏览器的语音搜索功能是一种快速且方便的搜索方式。本文将详细介绍如何在Windows系统中启用和使用Chrome的语音搜索功能。 (本文由https://chrome.cmrrs.com/站点的作者进行编写,转载时请进行标注。) 一、 启用语音搜…

《Cell》|单细胞+空间转录组绘制人类鳞状细胞癌组成和空间结构图谱

文章信息 文章题目:Multimodal Analysis of Composition and Spatial Architecture in Human Squamous Cell Carcinoma 发表期刊:《Cell》 影响因子:45.5 PART 1 研究背景 皮肤鳞状细胞癌(cSCC)主要特征是组织极…

如果您忘记了 Apple ID 和密码,按照指南可重新进入您的设备

即使您的 iPhone 或 iPad 由于各种原因被锁定或禁用,也可以使用 iTunes、“查找我的”、Apple 支持和 iCloud 解锁您的设备。但是,此过程需要您的 Apple ID 和密码来验证所有权并移除激活锁。如果您忘记了 Apple ID 和密码,请按照我们的指南重…

基于基于微信小程序的社区订餐系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

64.【C语言】再议结构体(下)

本文衔接第63篇63.【C语言】再议结构体(上) 目录 目录 6.复习 7.修改默认对齐数 8.结构体传参 01.传递非指针参数 02.传递指针参数(传递地址) 03.对比 9.结构体实现位段 01.位段的定义 02.格式 03.例题 答案速查 分析 10.位段跨平台问题 11.位段的应用 12.其他…

ubuntu20.04系统下,c++图形库Matplot++配置

linux下安装c图形库Matplot,使得c可以可视化编程;安装Matplot之前,需要先安装一个gnuplot,因为Matplot是依赖于此库 gnuplot下载链接: http://www.gnuplot.info/ 一、gnuplot下载与安装(可以跳过,下面源码…

EasyCVR视频汇聚平台:解锁视频监控核心功能,打造高效安全监管体系

随着科技的飞速发展,视频监控技术已成为现代社会安全、企业管理、智慧城市构建等领域不可或缺的一部分。EasyCVR视频汇聚平台作为一款高性能的视频综合管理平台,凭借其强大的视频处理、汇聚与融合能力,在构建智慧安防/视频监控系统中展现出了…