Deformable Transformer论文笔记

原文链接

[2010.04159] Deformable DETR: Deformable Transformers for End-to-End Object Detection (arxiv.org)icon-default.png?t=O83Ahttps://arxiv.org/abs/2010.04159

原文笔记

What

作者结合了可变形卷积的稀疏空间采样和 Transformer 的关系建模能力的优点。提出了Deformable Detr

Deformable Detr具有快速收敛,高计算效率、高内存效率的优点

Why

1、Detr收敛速度慢(注意力的初始化问题,初始的时候Q和所有K算出的softmax值都很接近;以及注意力的计算特性所造成的,2,3也是原因之一)

2、Detr的计算量大(Q要和每个K计算attention,3也是原因之一)

3、Detr参数量多(这是结构问题造成的 backbone+6enclayer+6declayer)

4、Detr特征空间的分辨率有限无法处理小物体(注意力计算的复杂度限制了使用大尺度的特征图或原图,高分辨率的特征图导致DETR不可接受的复杂性(一次注意力计算就是token^2的计算量,而如果要求特征图的尺寸小的话就对检测小物体非常不利;DETR中也没有多尺度的特征,不能同时的高效检测大物体和小物体)

Challenge

Idea

deformable detr与detr的不同之处:

deformable detr与detr的总体流程基本相同,都是用backbone提取特征再输入transformer的encoder和decoder处理再经过分类头和回归头得到预测类别和预测框

deformable detr相较于detr有三个改进优化点

1、deformable detr采用多尺度特征来解决同时检测大尺度物体和小尺度物体的问题(大尺度特征对检测小物体有帮助,小尺度特征对检测大物体有帮助)

提取resnet50提取的特征的后三层并且将最后一层再进行一个3*3卷积,一共是有四层特征,将他们的通道数统一为256以便拼接,在每层特征后面接一个参数为32(32个组每个组是8)的GroupNorm(因为使用的是八个头的多头注意力),之后沿着通道维度拼接起来。

2、deformable detr将detr中encoder的的multiheadselfattention改成了multiscaledeformableattention(MSDrformAtten) (K是Q自己学习到的,降低了计算量,提高了收敛速度)

3、deformable detr将detr中decoder的multiheadcrossattention改成了multiscaledeformableattention(MSDrformAtten)(K是Q自己学习到的,降低了计算量,提高了收敛速度)(但是decoder中的multiheadcrossattention并没有改动)

总结就是deformable attention解决了attention的计算复杂度问题

多尺度deformable attention解决了多尺度特征图问题

参考点的提出为query初始化提出了新的思路(但本工作中仍然采取的是随机初始化)

原文翻译

Abstract

DETR最近被提出以消除对目标检测中许多手工设计的组件的需求,同时表现出良好的性能。然而,由于Transformer注意模块在处理图像特征映射方面的局限性,它收敛速度慢,特征空间分辨率有限。为了缓解这些问题,我们提出了 Deformable DETR,其注意力模块只关注参考点周围的一小部分的关键采样点。可变形 DETR 可以比 DETR(尤其是在小物体上)获得更好的性能,训练时间减少了 10 倍。在 COCO 基准上的广泛实验证明了我们方法的有效性。代码发布在 https://github.com/fundamentalvision/Deformable-DETR。

1 Introduction

尽管 DETR 具有有趣的设计和良好的性能,但 DETR 有自己的问题:(1)它需要更长的训练时期才能收敛到现有的对象检测器。例如,在 COCO (Lin et al., 2014) 基准测试中,DETR 需要 500 个 epoch 才能收敛,这比 Faster R-CNN 慢大约 10 到 20 倍 (Ren et al., 2015)。(2) DETR在检测小物体时性能相对较低。现代目标检测器通常利用多尺度特征,从高分辨率特征图中检测小物体。同时,高分辨率特征图导致 DETR 的不可接受的复杂性。上述问题主要归因于 Transformer 组件在处理图像特征图方面的不足。在初始化时,注意力模块将几乎均匀的注意力权重转换为特征图中的所有像素。学习注意力权重以专注于稀疏有意义的位置,需要长时间的训练 epoch。另一方面,Transformer 编码器中的注意力权重计算是关于像素数的二次计算。因此,处理高分辨率特征图具有非常高的计算和内存复杂性。

在图像域,可变形卷积 (Dai et al., 2017) 是一种强大且高效的机制来关注稀疏的空间位置。它自然避免了上述问题。然而它缺乏元素关系建模机制,这是 DETR 成功的关键。

在本文中,我们提出了可变形DETR,它缓解了DETR收敛速度慢复杂度高的问题。它结合了可变形卷积的稀疏空间采样和 Transformer 的关系建模能力的优点。我们提出了可变形注意模块,该模块将一小组采样位置作为从所有特征图像素中突出关键元素预过滤器。该模块可以自然地扩展到聚合多尺度特征,而无需 FPN (Lin et al., 2017a) 的帮助。在可变形DETR中,我们利用(多尺度)可变形注意模块来代替处理特征映射的Transformer注意模块,如图1所示。

可变形DETR为我们利用端到端对象检测器的变体开辟了可能性,这要归功于其快速收敛和计算与内存效率。我们探索了一种简单有效的迭代边界框细化机制来提高检测性能。我们还尝试了两阶段可变形DETR,其中区域建议也是由可变形DETR的Vaiant生成的,进一步馈送到解码器进行迭代包围盒细化。

在 COCO (Lin et al., 2014) 基准上的广泛实验证明了我们方法的有效性。与 DETR 相比,可变形 DETR 可以在训练 epoch 少 10 倍的情况下获得更好的性能(尤其是在小物体上)。提出的两阶段可变形DETR变体可以进一步提高性能。代码在 https://github 发布。com/fundamentalvision/Deformable-DETR。

2 Related Work

Efficient Attention Mechanism.Transformers (Vaswani et al., 2017) 包含自注意力机制和交叉注意机制。Transformers 最著名的痛点之一是大量关键元素数字的高时间和内存复杂性,这在许多情况下阻碍了模型的可扩展性。最近,已经做出了许多努力来解决这个问题(Tay 等人,2020b),这在实践中可以大致分为三类

第一类是在键上使用预定义的稀疏注意力模式。最直接的范例是将注意力模式限制为固定的局部窗口。大多数作品(Liu et al., 2018a; Parmar et al., 2018; Child et al., 2019; Huang et al., 2019; Ho et al., 2019; Wang et al., 2020a; Hu et al., 2019; Ramachandran et al., 2019; Qiu et al., 2019; Beltagy et al., 2020; Ainslie et al., 2020; Zaheer et al., 2020)遵循这种范式。尽管将注意力模式限制在局部邻域可以降低复杂性,但它会丢失全局信息。为了弥补这一点,Child等人(2019);Huang等人(2019);Ho等人(2019);Wang等人(2020a)以固定间隔关注关键元素,以显著增加键的接受域。Beltagy等人(2020);Ainslie等人(2020);Zaheer等人(2020)允许少量可以访问所有关键元素的特殊令牌。Zaheer等人(2020);邱等人(2019)还添加了一些预先固定的稀疏注意模式来直接关注遥远的关键元素。

第二类是学习与数据相关的稀疏注意力。Kitaev等人(2020)提出了一种基于局部敏感哈希(LSH)的注意,它将查询和键散列到不同的箱子中。Roy等人(2020)提出了一种类似的想法,其中k-means找出最相关的键。Tay等人(2020a)学习块排列进行块稀疏注意。

第三类是探索自注意力中的低秩属性。Wang等人(2020b)通过对大小维度而不是通道维度的线性投影来减少关键元素的数量。Katharopoulos等人(2020);Choromanski等人(2020)通过核化近似重写自我注意的计算。

在图像域,高效注意机制的设计(例如,Parmar等人(2018);Child等人(2019);黄等人(2019);Ho等人(2019);Wang等人(2020a);Hu等人(2019);Ramachandran等人(2019))仍然局限于第一类。尽管理论上降低了复杂性,Ramachandran等人(2019);Hu等人(2019)承认,由于内存访问模式的内在限制,这种方法的实现速度比具有相同FLOPs的传统卷积慢得多(至少慢3倍)。

(慢的原因大概是因为这个稀疏注意力他读取的输入在内存中不是连续的,所以需要大量的读写时间)

另一方面,如Zhu等人(2019a)中所讨论的,有卷积的变体,如可变形卷积(Dai等人,2017;Zhu等人,2019b)和动态卷积(Wu等人,2019),也可以被视为自我注意机制。特别是,可变形卷积在图像识别方面比 Transformer self-attention 更有效和高效。同时,它缺乏元素关系建模机制。

我们提出的可变形注意模块受到可变形卷积的启发,属于第二类。它只关注从查询元素的特征预测的一小组固定采样点。与Ramachandran等人(2019)不同;Hu等人(2019),在相同的FLOPs下,可变形注意比传统卷积略慢。

用于目标检测的多尺度特征表示。对象检测的主要困难之一是有效地表示不同尺度的对象。现代目标检测器通常利用多尺度特征来适应这一点。作为开创性的工作之一,FPN (Lin et al., 2017a) 提出了一种自上而下的路径来组合多尺度特征。PANet (Liu et al., 2018b) 在 FPN 之上进一步添加了一个自下而上的路径。Kong等人(2018)通过全局注意操作将所有尺度的特征结合起来。Zhao等人(2019)提出了一种u型模块来融合多尺度特征。最近,NAS-FPN (Ghiasi et al., 2019) 和 Auto-FPN (Xu et al., 2019) 被提议通过神经架构搜索自动设计跨尺度连接。Tan等人(2020)提出了BiFPN,它是PANet的重复简化版本。我们提出的多尺度可变形注意模块可以自然地通过注意力机制聚合多尺度特征图,而无需借助这些特征金字塔网络。

3 REVISITING TRANSFORMERS AND DETR

Transformers 中的多头注意力。Transformers (Vaswani et al., 2017) 是一种基于机器翻译注意力机制的网络架构。给定一个查询元素(例如,输出句子中的目标词)和一组关键元素(例如输入句子中的源词),多头注意力模块根据衡量查询键对兼容性的注意力权重自适应地聚合关键内容。为了允许模型关注来自不同表示子空间和不同位置的内容,不同注意力头的输出与可学习的权重线性聚合。设q∈Ωq索引一个表示特征为zq∈RC的查询元素,k∈Ωk索引一个表示特征为featurexk∈RC的键元素,其中C为特征维度,Ωq和Ωk分别表示查询元素和键元素的集合。然后计算多头注意力特征

Transformers 有两个已知的问题。一种是 Transformer 在收敛之前需要很长的训练计划。假设查询和关键元素的数量分别为 Nq 和 Nk。通常,在适当的参数初始化下,Umzq 和 Vmxk 遵循均值为 0 的分布,方差为 1,当 Nk 很大时,注意力权重 Amqk ≈ 1/Nk 。这将导致输入特征的模糊梯度。因此,需要长时间的训练计划,以便注意力权重可以专注于特定的键。在关键元素通常是图像像素的图像域中,Nk可能非常大,收敛繁琐。

另一方面,随着查询和关键元素众多,多头注意力的计算和内存复杂度可能非常高。式1的计算复杂度为O(Nq C2 + NkC2 + Nq NkC)。在图像域,其中查询和关键元素都是像素 Nq = Nk >> C,复杂度由第三项主导,如 O(Nq NkC)。因此,多头注意力模块随着特征图大小的二次复杂度增长而受到影响。

DETR.DETR (Carion et al., 2020) 建立在 Transformer 编码器-解码器架构之上,并结合基于集合的匈牙利损失,通过二分匹配强制每个真实边界框的唯一预测。我们简要回顾网络架构如下。

给定由CNN主干(例如ResNet (He et al., 2016))提取的输入特征映射x∈RC×H×W, DETR利用标准Transformer编码器-解码器架构将输入特征映射转换为一组对象查询的特征。一个3层前馈神经网络(FFN)和一个线性投影被添加到对象查询特征(由解码器产生)的顶部作为检测头。FFN作为回归分支预测边界框坐标esb∈[0,1]4,其中b = {bx, by, bw, bh}编码归一化的框中心坐标、框高和框宽(相对于图像大小)。线性投影作为分类分支产生分类结果。

对于DETR中的Transformer编码器,查询元素和键元素都是特征映射中的像素。输入是ResNet特征映射(带有编码的位置嵌入)。设H和W分别表示特征映射的高度和宽度。自关注的计算复杂度为ofO(h2w2c),随空间大小呈二次增长。

对于DETR中的Transformer解码器,输入既包括来自编码器的特征映射,也包括由可学习的位置嵌入(例如,N = 100)表示的N个对象查询。解码器中的注意模块有两种类型,即交叉注意模块和自注意模块。在交叉关注模块中,对象查询从特征映射中提取特征。查询元素是对象查询,关键元素是来自编码器的输出特征映射。其中,Nq = N, Nk = H × W,交叉关注复杂度为0 (HW C2 + N HW C),复杂度随特征映射的空间大小线性增长。在自关注模块中,对象查询之间相互作用,从而捕获它们之间的关系。query和key元素都是对象查询。其中,Nq = Nk = N,自注意模块的复杂度为0 (2nc2 + n2c)。对于中等数量的对象查询,复杂性是可以接受的。

DETR是目标检测的一个有吸引力的设计,它消除了对许多手工设计的组件的需求。但是,它也有自己的问题。这些问题主要归因于 Transformer 注意力在处理图像特征图作为关键元素方面的缺陷:(1)DETR 在检测小物体方面的性能相对较低。现代目标检测器使用高分辨率特征图来更好地检测小物体。然而,高分辨率特征图会导致 DETR 的 Transformer 编码器中的自注意力模块的不可接受的复杂性,这与输入特征图的空间大小具有二次复杂度。(2) 与现代目标检测器相比,DETR 需要更多的训练时期才能收敛。这主要是因为处理图像特征的注意力模块很难训练。例如,在初始化时,交叉注意模块在整个特征图上几乎是平均注意力。虽然,在训练结束时,注意力图被学习非常稀疏,只关注对象的边界,DETR似乎需要很长时间的训练日程来学习注意力图的这种显著变化

4 METHOD

4.1 DEFORMABLE TRANSFORMERS FOR END-TO-END OBJECT DETECTION

Deformable Attention Module.将Transformer的Attention应用到图像特征的核心问题是它将同样注意所有可能的空间位置,为了解决这个问题,我们提出了一个可变形注意模块(a deformable attention module)受可变形卷积的启发,可变形注意力模块只关注参考点周围的一小组关键采样点,不考虑特征图的空间大小,如图二所示,通过为每个查询只分配少量固定数量的键,可以缓解收敛性和特征空间分辨率的问题。 

给定一个输入特征图 x ∈ R^C×H×W ,令 q 索引具有内容特征 zq 和 2d 参考点 pq 的查询元素,可变形注意力特征由下式计算  

这里强烈建议去看enzo大神的讲解视频,这个有点不太好理解

Deformable DETR| 3、Deformable Attention、MSDeformAttention、流程讲解_哔哩哔哩_bilibiliicon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1Uj411z7QU/?spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=ae3f1ec4d3d413e8531d6bbc07cd4394

多尺度可变性卷积公式

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

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

相关文章

文心一言 VS 讯飞星火 VS chatgpt (359)-- 算法导论24.3 1题

一、在图 24-2上运行Dijkstra算法,第一次使用结点 s s s作为源结点,第二次使用结点 z z z作为源结点。以类似于图 24-6 的风格,给出每次while循环后的 d d d值和 π π π值,以及集合 S S S中的所有结点。如果要写代码&#xff0c…

CSRF | GET 型 CSRF 漏洞攻击

关注这个漏洞的其他相关笔记:CSRF 漏洞 - 学习手册-CSDN博客 0x01:GET 型 CSRF 漏洞攻击 —— 理论篇 GET 型 CSRF 漏洞是指攻击者通过构造恶意的 HTTP GET 请求,利用用户的登录状态,在用户不知情的情况下,诱使浏览器…

PCIe配置篇(1)——如何进行配置操作(一)

一、功能的唯一标识——BDF 首先我们简单回顾一下总线(Bus)、设备(Device)、功能(Function)这几个概念: 功能(function):是PCI设备中独立的功能单元&#xff…

【GitHub】上传文件到GitHub

参考视频:手把手教你在github上传文件_哔哩哔哩_bilibili 1.找到文件夹右键,选择open git bash here 2.完成指令 git initgit add *git commit -m "first commit"3.打开该文件夹,打开隐藏文件.git/config 编辑输入邮箱和GitHub用…

OpenJudge | 置换选择排序

总时间限制: 1000ms 内存限制: 65536kB 描述 给定初始整数顺串,以及大小固定并且初始元素已知的二叉最小堆(为完全二叉树或类似完全二叉树,且父元素键值总小于等于任何一个子结点的键值),要求利用堆实现置换选择排序&a…

【C++】--类和对象(2)

👌个人主页: 起名字真南 👆个人专栏:【数据结构初阶】 【C语言】 【C】 目录 1 类的默认成员函数2 构造函数3 析构函数4 拷贝构造5 赋值运算符重载5.1 运算符重载5.2 赋值运算符的重载 1 类的默认成员函数 默认成员函数就是用户没有显示实现,…

【Kubernetes】常见面试题汇总(五十三)

目录 118. pod 状态为 ErrlmagePull ? 119.探测存活 pod 状态为 CrashLoopBackOff ? 特别说明: 题目 1-68 属于【Kubernetes】的常规概念题,即 “ 汇总(一)~(二十二)” 。…

Bloom Filter 布隆过滤器

目录 简介 Bloom Filter的基本原理 实现 使用 HashFunc越多,性能越好吗? 如何尽量避免误判? 应用 布隆过滤器优点 简介 Bloom Filter是一种空间效率极高的概率数据结构,它用于测试一个元素是否属于集合。Bloom Filter的优…

【NoSQL】portswigger NoSQL注入 labs 全解

目录 NoSQL NoSQL 数据库模型 NoSQL 注入的类型 NoSQL 语法注入 检测 MongoDB 中的语法注入 lab1:检测 NoSQL 注入 NoSQL 运算符注入 提交查询运算符 检测 MongoDB 中的运算符注入 lab2:利用 NoSQL 运算符注入绕过身份验证 利用语法注入来提取数据 MongoDB 中的数据…

【rust/egui/android】在android中使用egui库

文章目录 说在前面AndroidStudio安装编译安装运行问题 说在前面 操作系统:windows11java版本:23android sdk版本:35android ndk版本:22rust版本: AndroidStudio安装 安装AndroidStudio是为了安装sdk、ndk,…

大数据实时数仓Hologres(三):存储格式介绍

文章目录 存储格式介绍 一、格式 二、使用建议 三、技术原理 1、列存 2、行存 3、行列共存 四、使用示例 存储格式介绍 一、格式 在Hologres中支持行存、列存和行列共存三种存储格式,不同的存储格式适用于不同的场景。在建表时通过设置orientation属性指定表的存储…

【重学 MySQL】五十三、MySQL数据类型概述和字符集设置

【重学 MySQL】五十三、MySQL数据类型概述和字符集设置 MySQL数据类型概述MySQL字符集设置注意事项 MySQL数据类型概述 MySQL是一个流行的关系型数据库管理系统,它支持多种数据类型,以满足不同数据处理和存储的需求。理解并正确使用这些数据类型对于提高…

Linux性能调优技巧

目录 前言1. CPU性能优化1.1 调整CPU调度策略1.2 合理分配多核处理 2. 内存性能优化2.1 调整内存分配策略2.2 缓存和分页优化 3. 磁盘I/O性能优化3.1 使用合适的I/O调度器3.2 磁盘分区和文件系统优化 4. 网络性能优化4.1 优化网络参数4.2 调整网络拥塞控制算法 5. 系统监控与优…

【机器学习】网络安全——异常检测与入侵防御系统

我的主页:2的n次方_ 随着全球互联网和数字基础设施的不断扩展,网络攻击的数量和复杂性都在显著增加。从传统的病毒和蠕虫攻击到现代复杂的高级持续性威胁(APT),网络攻击呈现出更加智能化和隐蔽化的趋势。面对这样的…

Kotlin 处理字符串和正则表达式(二十一)

导读大纲 1.1 处理字符串和正则表达式1.1.1 分割字符串1.1.2 正则表达式和三引号字符串1.1.3 多行三引号字符串IntelliJ IDEA 和 Android Studio 中三重引号字符串内部的语法高亮显示 1.1 处理字符串和正则表达式 Kotlin 字符串与 Java 字符串完全相同 可以将 Kotlin 代码中创建…

Python_文件处理

一个完整的程序一般都包括数据的存储和读取;我们在前面写的程序数据都没有进行实际的存储,因此python解释器执行完数据就消失了。实际开发中,我们经常需要从外部存储介质(硬盘、光盘、U盘等)读取数据,或者将…

查缺补漏----IP通信过程

1.DHCP协议 H3刚接入网络时,只知道自己的MAC地址,所以需要通过DHCP协议请求自己的IP地址。 通过DHCP协议,得到IP地址、子网掩码、网关与DNS服务器IP地址。 DHCP协议是应用层协议(传输层为UDP),请求报文是广播(H3不知…

‌在Python中,print(f‘‘)是什么?

‌在Python中,print(f’)表示使用f-string对字符串进行格式化输出。‌ f-string是Python 3.6及以上版本引入的一种新的字符串格式化机制,它允许在字符串中直接嵌入表达式,这些表达式在运行时会被其值所替换。使用f-string可以更方便地将变量的…

国庆节快乐前端(HTML+CSS+JavaScript+BootStrap.min.css)

一、效果展示 二、制作缘由 最近,到了国庆节,自己呆在学校当守校人,太无聊了,顺便做一个小demo帮祖国目前庆生!!! 三、项目目录结构 四、准备工作 (1)新建好对应的文件目录 为了方便&#xff…

PHP泛目录生成源码,可生成长尾关键词页面,带使用方法视频教程

介绍: 真正的好东西,搞网站优化seo从业必备。可以快速提升网站权重,带来的流量哗哗的 PHP泛目录生成源码 可生成新闻页面和关键词页面 带使用方法视频教程 泛目录可以用来提升网站收录和排名 合理运用目录可以达到快速出词和出权重的效果…