【目标检测】Deformable DETR

一、前言

论文: Deformable DETR: Deformable Transformers for End-to-End Object Detection
作者: SenseTime Research
代码: Deformable DETR
特点: 提出多尺度可变形注意力 (Multi-scale Deformable Attention) 解决DETR收敛速度慢、特征图尺度单一等问题。

二、框架

下图为DETR(左)和Deformable DETR(右)的结构图:

可见,二者的总体结构类似,主要区别在于注意力模块相应的输入不同。所以,我们按照之前介绍DETR时的顺序依次介绍Deformable DETR与DETR在Backbone、Encoder、Decoder、Prediction Heads中的不同之处。

1. Backbone

保留尺寸小的特征图有利于检测大目标,保留尺寸大的特征图善于检测小目标。 为此,Deformable DETR提取4个尺寸下的特征图(DETR仅1个尺寸),特征提取过程如下图:

首先,Deformable DETR通过ResNet-50输出3个尺寸的特征图,分别为原图高宽的 1 8 \frac{1}{8} 81 1 16 \frac{1}{16} 161 1 32 \frac{1}{32} 321。3个特征图后接核为 1 ∗ 1 1*1 11、步长为1的卷积层统一通道数为256。其次,在最后一层 1 32 \frac{1}{32} 321的特征图后跟一个核为3*3、步长为2的卷积层实现降采样和通道数统一,得到1个原图高宽 1 64 \frac{1}{64} 641通道数为256的特征图。于是共得到4个不同尺寸下( 1 8 \frac{1}{8} 81 1 16 \frac{1}{16} 161 1 32 \frac{1}{32} 321 1 64 \frac{1}{64} 641)通道数均为256的特征图。

每个用于统一通道数的卷积层后都跟了一个GroupNorm层,Group的大小(32)与token向量长度(256)和多头注意力的头数(8)有关( 32 = 256 ÷ 8 32=256\div 8 32=256÷8)。此外,每个特征图都有对应的mask(表示padding情况,同一批次的图像尺寸会被统一以方便计算)和位置编码(与DETR中的Spatial positional encoding相同)。

不过,Spatial positional encoding无法区分不同层同一像素位置的位置编码向量,即小的特征图的位置编码是大的特征图的位置编码的子集。例如,第一个特征图在(2,4)像素点上的位置编码向量与另外三个特征图在(2,4)像素点上位置编码向量是相同的;只是大的特征图的位置编码向量数量更多,第一个特征图有(70,100)这个像素点,但其他特征图可能没有这个像素点。为此,Deformable DETR为不同特征图的位置编码加上了不同的可学习参数(nn.Parameter(特征图数量, 256)),同一特征图的所有像素点的位置编码加上的参数是相同的。

2. Encoder

Deformable DETR与DETR在Encoder部分的主要区别在下图的左下角部分:

其中,Image Features为Backbone输出的4个不同尺寸下的特征图;Positional Encoding为各特征图的Spatial positional encoding+各自的可学习参数;Reference Points为各个特征图像素点的归一化坐标。

2.1 参考点

Deformable DETR的注意力模块需要参考点 (Reference Points) 作为基准来定位用于加权的像素点。注意力我们在后面讲,这里先理解参考点。

之前我们说参考点是各个特征图像素点的归一化坐标,其实不完全正确。一般来说,每个特征图都有且只有自己的像素点(如下图左侧两个子图):

Deformable DETR用 (x,y) 表达各特征图的像素点。x和y均从0.5开始,分别从宽-0.5高-0.5结束。具体来说,第一个特征图,宽为4,则各列x的坐标为 0.5 , 1.5 , 2.5 , 3.5 0.5,1.5,2.5,3.5 0.5,1.5,2.5,3.5,高为4,则各行y的坐标为 0.5 , 1.5 , 2.5 , 3.5 0.5,1.5,2.5,3.5 0.5,1.5,2.5,3.5;第二个特征图,宽为2,则各列x的坐标为 0.5 , 1.5 0.5,1.5 0.5,1.5,高为2,则各行y的坐标为 0.5 , 1.5 0.5,1.5 0.5,1.5

为了增加像素点的数量,Deformable DETR将各个特征图的像素点坐标映射到了其它特征图上(如上图右侧两个子图)。映射前需要通过 (x/宽,y/高) 将不同特征图下单像素点坐标归一化(如果不归一化,小的特征图能映射到大的特征图上,但大的特征图无法映射到小的特征图上)。

原本4个尺度下的特征图共有 h e i g h t / 64 ∗ w i d t h / 64 + h e i g h t / 32 ∗ w i d t h / 32 + h e i g h t / 16 ∗ w i d t h / 16 + h e i g h t / 8 ∗ w i d t h / 8 height/64*width/64+height/32*width/32+height/16*width/16+height/8*width/8 height/64width/64+height/32width/32+height/16width/16+height/8width/8 个像素点,归一化+映射后每个特征图都有这么多个像素点。所以,参考点是各个特征图本身的像素点和其它特征图映射至此的像素点的归一化坐标

2.2 注意力

要理解多尺度可变形自注意力,我们需要从单尺度的单头自注意力、多头自注意力、可变形多头自注意力逐步深入。

2.2.1 单尺度多头自注意力

我们熟悉的单尺度单头自注意力公式如下:

其中, Q , K , V Q,K,V Q,K,V x \boldsymbol{x} x经不同的全连接层得到的映射, d k d_k dk K K K的维度。

单尺度多头自注意力就是将单头的 Q , K , V Q,K,V Q,K,V平均拆分,然后分别执行单头自注意力(详情请参考之前的博客Attention、Self-Attention、Multi-Head Self-Attention)。

Deformable DETR中的单尺度多头自注意力的公式如下:

该公式仅表达 x \boldsymbol{x} x中一个像素点 z q \boldsymbol{z}_q zq的注意力计算过程。其中, x \boldsymbol{x} x是一张图像的全部token; z = x \boldsymbol{z}=\boldsymbol{x} z=x表示 x \boldsymbol{x} x的查询状态, z q \boldsymbol{z}_q zq表示 z \boldsymbol{z} z中的第 q q q个token( z \boldsymbol{z} z加上位置编码后形成 Q Q Q); W ′ x \boldsymbol{W}^{\prime}\boldsymbol{x} Wx表示经全连接映射后的 V V V W m ′ x \boldsymbol{W}^{\prime}_m\boldsymbol{x} Wmx表示将 V V V拆分为多头后的第 m m m个头, W m ′ x k \boldsymbol{W}^{\prime}_m\boldsymbol{x}_k Wmxk表示 V V V的第 m m m个头中的第 k k k个token; A A A表示注意力权重,对应 softmax ( Q K T d k ) \text{softmax}(\frac{QK^T}{\sqrt{d_k}}) softmax(dk QKT)(这里不需要计算,而是通过全连接层映射 Q Q Q得到的), A m q k A_{mqk} Amqk表示对 z q \boldsymbol{z}_q zq执行注意力时,学习到的第 m m m个头中第 k k k个token的注意力权重; ∑ k ∈ Ω k \sum_{k\in\Omega_k} kΩk表示需要对所有token进行加权才能得到 z q \boldsymbol{z}_q zq的对应输出; ∑ m = 1 M W m \sum_{m=1}^{M}\boldsymbol{W}_m m=1MWm表示将各头输出拼接后做一次全连接映射(其实这种表述与公式并不对应,但与源码对应,公式表示先映射后相加,但源码中是先拼接后映射)。

总结下来,Deformable DETR的单尺度多头自注意力与常规单尺度多头自注意力有如下不同:
(1) Q Q Q未经全连接映射,也没有 K K K
(2) 注意力权重不是计算得来,而是经全连接层映射 Q Q Q得到的。

此时,Deformable DETR将原本的 softmax ( Q K T d k ) \text{softmax}(\frac{QK^T}{\sqrt{d_k}}) softmax(dk QKT)替换成了全连接,已经降低了计算复杂度。

2.2.2 单尺度可变形多头自注意力

为了进一步降低复杂度,Deformable DETR引入可变形概念。直白来说,上面对 z q \boldsymbol{z}_q zq执行注意力时需要加权所有token(如下图有 10 × 10 10\times 10 10×10个),引入可变形概念后只需要加权 K K K个token(下图中 K = 3 K=3 K=3 3 ≪ 10 × 10 3\ll 10\times 10 310×10)。

Deformable DETR中单尺度可变形多头自注意力的公式如下:

其中, p q \boldsymbol{p}_q pq表示 z q \boldsymbol{z}_q zq的坐标(不需要归一化); Δ p m q k \Delta\boldsymbol{p}_{mqk} Δpmqk z q \boldsymbol{z}_q zq经全连接学习到的坐标偏移量; W m ′ x ( p q + Δ p m q k ) \boldsymbol{W}^{\prime}_m\boldsymbol{x}(\boldsymbol{p}_q+\Delta\boldsymbol{p}_{mqk}) Wmx(pq+Δpmqk)就是在 V V V的第 m m m个头上坐标位置为 p q + Δ p m q k \boldsymbol{p}_q+\Delta\boldsymbol{p}_{mqk} pq+Δpmqk的token。

与单尺度多头自注意力对比可知,有以下不同:
(1) ∑ k ∈ Ω k \sum_{k\in\Omega_k} kΩk变成了 ∑ k = 1 K \sum_{k=1}^{K} k=1K。与 z q \boldsymbol{z}_q zq相关的注意力仅需加权 K K K个token,而不再是 ∣ Ω k ∣ = H × W |\Omega_k|=H\times W Ωk=H×W个。
(2) x k \boldsymbol{x}_k xk变成了 x ( p q + Δ p m q k ) \boldsymbol{x}(\boldsymbol{p}_q+\Delta\boldsymbol{p}_{mqk}) x(pq+Δpmqk) p q \boldsymbol{p}_q pq位置的像素点有确定的token,但 Δ p m q k \Delta\boldsymbol{p}_{mqk} Δpmqk是浮点型的, p q + Δ p m q k \boldsymbol{p}_q+\Delta\boldsymbol{p}_{mqk} pq+Δpmqk位置的像素点可能无明确的token,Deformable DETR中使用双线性插值计算对应token。

为帮助理解,我们看下图(该图为单尺度可变形单头自注意力的部分流程):

z q \boldsymbol{z}_q zq加上位置编码形成q( z \boldsymbol{z} z加上位置编码形成 Q Q Q); z q \boldsymbol{z}_q zq经全连接线性映射形成v( z \boldsymbol{z} z经全连接线性映射形成 V V V);q经全连接线性映射得到坐标偏移量, z q \boldsymbol{z}_q zq的参考点坐标加上坐标偏移量得到用于加权的token的坐标,从 V V V中经双线性插值可以取出对应坐标的token;q经全连接线性映射得到注意力权重,将权重乘在取出的token上求和即可得到与 z q \boldsymbol{z}_q zq对应的注意力输出。多头则是将q拆分后再分别经全连接映射得到坐标偏移量和注意力权重以及后续各个操作,最后将各头输出拼接再经全连接映射获得最终输出。

此时,Deformable DETR选取 K K K个token做加权进一步降低了计算复杂度,模型已经能够接受大尺度的特征图。

2.2.3 多尺度可变形多头自注意力

为提升小目标检测能力,Deformable DETR引入了多尺度特征图。

Deformable DETR中多尺度可变形多头自注意力的公式如下:

其中, p ^ q \hat{\boldsymbol{p}}_q p^q表示归一化后的坐标(就是上面提到的参考点); { x l } l = 1 L \{x^l\}_{l=1}^L {xl}l=1L表示 L L L个特征图输入(原文中 L = 4 L=4 L=4); ϕ l ( p ^ q ) \phi_{l}(\hat{\boldsymbol{p}}_q) ϕl(p^q)表示将 p ^ q \hat{\boldsymbol{p}}_q p^q映射为归一化前的坐标。

与单尺度可变形多头自注意力对比可知,有以下不同:
(1) 增加了输入特征图数量。尺寸小的特征图善于检测大目标,尺寸大的特征图善于检测小目标。
(2) 增加了单个特征图的像素点数量(在公式中没有体现)。在产生参考点时,每个特征图除自身像素点外还扩充了其它特征图的像素点,所以执行注意力的 z q \boldsymbol{z}_q zq数量也增加了。
(3) 增加了坐标的映射 ϕ l ( ⋅ ) \phi_{l}(\cdot) ϕl()。将特征图的像素点扩充到其它特征图上需要将坐标归一化后才方便进行,所以需要先归一化再映射回原图坐标。

3. Decoder

Deformable DETR与DETR在Decoder部分的主要区别在下图的右侧两个部分:

可见,区别在于Decoder的输入注意力模块及其输入

对于Decoder的输入部分,详情如下:
(1) Deformable DETR的Decoder可检测目标最大数量变为300(DETR中为100)。
(2) queries和位置编码由nn.Embedding(300, 256)随机初始化(DETR中queries初始化为0)。
(3) 参考点由随机初始化的位置编码经全连接+Sigmoid映射得到。

对于注意力模块及其输入部分,详情如下:
(1) Deformable DETR采用多尺度可变形多头交叉注意力(DETR中为单尺度多头交叉注意力)。
(2) V V V由Encoder提供, Q Q Q为queries经多头自注意力后的输出加上位置编码,参考点为位置编码经全连接+Sigmoid的输出。

4. Prediction Heads

与DETR一样预测目标类别和框坐标,不过目标数上限从100提升至300。

致谢:

本博客仅做记录使用,无任何商业用途,参考内容如下:
Deformable DETR | 1、Abstract 算法概述
Deformable DETR 论文+源码解读
DeformableDetr算法解读

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

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

相关文章

已解决 RuntimeError: No CUDA GPUs are available 亲测有效!!!

已解决 RuntimeError: No CUDA GPUs are available 亲测有效!!! 亲测有效 报错问题解决思路解决方法 报错问题 RuntimeError: No CUDA GPUs are available 这个错误通常发生在尝试在没有CUDA支持的GPU或没有安装NVIDIA GPU的机器上运行基于C…

Hamilton回路求解

如果可以 我想和你回到那天相遇 让时间停止 那一场雨 红线划过 深藏轮回的秘密 我挥霍运气 因为你 才让我 背对命运不害怕 --------- 如果可以 (Acapella) - 韦礼安 大家好,我又又又来了,今天给大家聊聊Hamilton回路! 背景 国际象…

使用CUDA的PyTorch进行张量重整化的gpu加速

使用CUDA的PyTorch进行张量重整化的gpu加速 摘要IntroductionAlgorithm and TorchTrg discussionModels and Results GPU-Acceleration of Tensor Renormalization with PyTorch using CUDA 摘要 作者展示了基于张量重整化群(TRG)方法的数值计算可以通过…

HarmonyOS NEXT星河版之在线考试功能实战

文章目录 一、目标二、基础搭建2.1 定义数据2.2 mock数据2.3 主页面布局2.3.1 布局规划2.3.2 标题栏2.3.3 进度条2.3.4 答题模块2.3.5 底部按钮 2.4 主页面逻辑2.4.1 加载数据及定义变量2.4.2 上一题、下一题 三、选项点击及高亮3.1 声明对象及变量3.2 给选项注册点击事件3.3 处…

AI图书推荐:Zapier和AI融合来自动化业务流程

这本书《Zapier和AI融合来自动化业务流程》(Automate It with Zapier and Generative AI)由Kelly Goss撰写,这本书是为想要使用Zapier和AI集成功能来自动化重复性任务、提高生产力的微型、小型或中型企业的业务所有者、运营经理和团队准备的。…

C++入门基础(四)

目录 auto关键字(C11)类型别名思考auto的使用细则auto与指针和引用结合起来使用在同一行定义多个变量 auto不能推导的场景auto不能作为函数的参数auto不能直接用来声明数组 复杂场景下的auto 基于范围的for循环(C11)范围for的语法范围for的使用条件 指针空值---nullptr(C11)C98…

电商核心技术揭秘四十九:智能广告投放与效果评估

相关系列文章 电商技术揭秘相关系列文章合集(1) 电商技术揭秘相关系列文章合集(2) 电商技术揭秘相关系列文章合集(3) 电商技术揭秘四十一:电商平台的营销系统浅析 电商技术揭秘四十二&#…

饥荒服务器搭建centos

服务器环境需要64位32位不可用 uname -r 查看服务器版本 更新yum sudo yum update 安装依赖环境 sudo yum -y install glibc.i686 libstdc.i686 libcurl4-gnutls-dev.i686 libcurl.i686 screen 安装steam cd /home && mkdir steamcmd && cd steamcmd 国…

【typescript测试 - Jest 配置与使用】

安装 npm install --save-dev types/jestnpm install --save-dev ts-jest配置 tsconfig.json {"compilerOptions": {"types": ["jest"]} }jest.config.js module.exports {preset: ts-jest,testEnvironment: node, };使用 // add.js funct…

越权漏洞!

越权漏洞是指在一个系统或应用程序中存在某种不当的访问权限,使得攻击者可以获得比其应该拥有的权限更高的权限。这种漏洞可能允许攻击者执行未经授权的操作,例如访问他人的敏感数据、修改系统设置、执行恶意代码等。越权漏洞通常是由于设计或实现上的错…

HarmonyOS NEXT星河版之模拟图片选择器(下)---使用bindSheet展示图片选择器

文章目录 一、目标二、开撸2.1 bindSheet参数2.2 使用Builder修饰组件2.3 调用bindSheet 三、小结 一、目标 使用bindSheet属性实现图片选择器,如图: 二、开撸 2.1 bindSheet参数 bindSheet接收三个参数,如下: bindSheet(is…

精准读取CSV/Excel数据 - 灵活指定行列范围的 Python 解决方案

文章目录 源代码项目简介导入相关库__file_exists 装饰器函数的签名和注释主要功能的实现运行演示读取 Excel 文件 源代码 https://github.com/ma0513207162/PyPrecip。pyprecip\reading\read_api.py 路径下。 项目简介 PyPrecip 是一个专注于气候数据处理的 Python 库&#xf…

【C++ 关键字】const 关键字详解

文章目录 1. const 概念2.常量指针 和 指针常量 的区别2.1 常量指针(底层 const)2.2 指针常量 (顶层 const) 3.const 关键字的作用4.const 和 define 的区别5.const 总结 1. const 概念 const 是一个关键字,被修饰的值不能改变,是…

请求转发和响应重定向

文章目录 一、 概述二、 请求转发三、响应重定向参考资料 一、 概述 什么是请求转发和响应重定向 请求转发和响应重定向是web应用中间接访问项目资源的两种手段,也是Servlet控制页面跳转的两种手段 请求转发通过HttpServletRequest实现,响应重定向通过HttpServletResponse实现…

大模型模型简化机器人训练;简单易用的 3D 工具Project Neo;特斯拉放出了擎天柱机器人最新训练视频

✨ 1: DrEureka 利用大语言模型自动化将机器人仿真环境训练结果转移到真实世界 DrEureka是一种利用大型语言模型(LLMs)自动化和加速从仿真(sim)到现实世界(real)转移的技术。在机器人技能学习领域&#x…

Gradle基础学习(六) 认识任务Task

理解Gradle中的任务 Gradle的构建过程基于任务(Task)的概念,而每个任务都可以包含一个或多个动作(Action)。 任务是构建中执行的一些独立的工作单元,例如编译类、创建JAR、生成Javadoc或将存档发布到仓库…

62-USB转JTAG or SPI电路设计

视频链接 USB转JTAG or SPI电路设计01_哔哩哔哩_bilibili USB 转 JTAG or SPI电路设计 第07课---USB转串口电路设计第 34~40课---USB硬件电路设计 第22课---SPI Flash电路设计 第31课---JTAG电路设计(JLINK&XILINX&ALTERA) 第…

代码随想录-算法训练营day31【贪心算法01:理论基础、分发饼干、摆动序列、最大子序和】

代码随想录-035期-算法训练营【博客笔记汇总表】-CSDN博客 第八章 贪心算法 part01● 理论基础 ● 455.分发饼干 ● 376. 摆动序列 ● 53. 最大子序和 贪心算法其实就是没有什么规律可言,所以大家了解贪心算法 就了解它没有规律的本质就够了。 不用花心思去研究其…

5.Git

Git是一个分布式版本控制工具,主要用于管理开发过程中的源代码文件(Java类、xml文件、html文件等)。通过Git仓库来存储和管理这些文件,Git仓库分为两种 本地仓库:开发人员自己电脑上的Git仓库远程仓库:远程…

360手机去除广告 360手机关闭弹窗广告 360手机刷机

360手机去除广告 360手机关闭弹窗广告 360手机刷机 360手机去广告 360手机刷机 360手机弹窗广告 永久去除360手机的各种广告教程 360手机禁止更新 360手机关闭广告 360手机去除内部广告 360手机资源网 360手机刷机资源下载链接:360rom.github.io 参考:…
最新文章