Deformable DETR(2020 ICLR)

2023-09-21 21:21:17

Deformable DETR(2020 ICLR)

detr训练epochs缩小十倍,小目标性能更好

Deformable attention

  1. 结合变形卷积的稀疏空间采样和Transformer的关系建模能力

  2. 使用多层级特征层特征,不需要使用FPN的设计(直接使用backbone多层级输出)

    两种提升方法:

    1. bbox迭代细化机制
    2. 2.两阶段Deformable DETR

整体结构:

在这里插入图片描述

同样是6encoder,6decoder。

首先,运用了多层的图像特征,在一个采样点周围进行多层级的可变形注意力模块(紫色部分)

decoder用交叉注意力,红色的线指向第二个(cross,第一个是selfattention)

object query一样

详细展示

multihead-attention:
 MultiHeadAttn  ( z q , x ) = ∑ m = 1 M W m ⏟ \ R C × C v [ ∑ k ∈ Ω k A m q k W m ′ ⏟ \ R C v × C x k ]  where  A m q k ∝ exp ⁡ { ( U m z q ) T ( V m x k ) C v } U m , V m ∈ \ R C p × C \begin{array}{c} \text { MultiHeadAttn }\left(\mathrm{z}_{\mathrm{q}}, \mathrm{x}\right)=\sum_{m=1}^{M} \underbrace{W_{m}}_{\backslash \mathrm{R}^{C \times C_{v}}}[\sum_{k \in \Omega_{k}} A_{m q k} \underbrace{W_{m}^{\prime}}_{\backslash \mathrm{R}^{C_{v} \times C}} x_{k}] \\ \text { where } A_{m q k} \propto \exp \left\{\frac{\left(U_{m} z_{q}\right)^{T}\left(V_{m} x_{k}\right)}{\sqrt{C_{v}}}\right\} \quad U_{m}, V_{m} \in \backslash \mathbf{R}^{C_{p} \times C} \end{array}  MultiHeadAttn (zq,x)=m=1M\RC×Cv Wm[kΩkAmqk\RCv×C Wmxk] where Amqkexp{Cv (Umzq)T(Vmxk)}Um,Vm\RCp×C
deformable-attention:
DeformAttn ⁡ ( z q , p q , x ) = ∑ m = 1 M W m ⏟ \ R C × C v [ ∑ k = 1 K A m q k W m ′ ⏟ \ R C v × C x ( p q + Δ p m q k ) ] \operatorname{DeformAttn}\left(\mathrm{z}_{\mathrm{q}}, \mathrm{p}_{\mathrm{q}}, \mathrm{x}\right)=\sum_{m=1}^{M} \underbrace{W_{m}}_{\backslash \mathrm{R}^{C \times C v}}[\sum_{k=1}^{K} A_{m q k} \underbrace{W_{m}^{\prime}}_{\backslash \mathrm{R}^{C_{v} \times C}} x\left(p_{q}+\Delta p_{m q k}\right)] DeformAttn(zq,pq,x)=m=1M\RC×Cv Wm[k=1KAmqk\RCv×C Wmx(pq+Δpmqk)]

M:head

K:采样点

特征图:xl,l∈[1,L],表示多个尺度的特征图

p_q:参考点,query的坐标点

这里每个像素点z_q只和其对应的k个采样点算attention

  • z_q:query可以是encoder的图像或上一个decoder的输出(特征图中每个像素点都是一个维度为C的向量z_q)
  • 每个像素点的Reference Point也就是二维位置坐标为 p_q(在图像上生成很多采样点p_q,文章最后写了如何在encoder和decoder处获得reference point)。
  • M代表多头注意力机制中头的数目(论文中M=8)
  • 每一个头中只考虑 z_q 附近 K 个点(K远小于H x W,论文K=4)。
  • Δpmqk代表采样的位置偏移量(第一个linear),是一个二维的坐标(初始化采样点是固定的,但后续将通过全连接层计算预测更加值得关注的点的坐标)

K 个采样点由参考点 p_q和偏移量 Δpmqk共同得到,当然这个偏移量不可能就是一个整数,这里获取该偏移量上的特征时是使用了双线性插值的

之后再接通过权重norm,输出。

img

Deformable Attention使用的地方:

  • Encoder中的Self-Attention使用Deformable Attention替换.
  • Decoder中的Cross-Attention使用Deformable Attention替换,selfattention没替换,关注的还是原始的qkv

原始DETR:分类头,bbox预测头输出四个值(中心点和宽高)

deformable detr:bbox的预测头的预测结果是相对于参考点的坐标偏移量,这样的设计可以降低优化难度网络

首先会经过Linear得出参考点的初始坐标,因此最后的bbox的输出不再是表示坐标值,而是表示了坐标的偏移量,用以对参考点的坐标进行修正,这样也更加符合网络的设计

在这里插入图片描述

deformable detr几个变体:

变体1:bbox强化 bbox refinement(不是辅助分类)

reference point:encoder:gird H*W

decoder:经过linear后生成的300个坐标( 参考点的获取方法为object queries通过一个nn.Linear得到每个对应的reference point)

不适用bbox强化,decoder连续作用

使用:

过一个decoder,算一次bbox坐标(加上reference point),传入下一层,反复

变体2:two-stage

6encoder -> memory(output)-> 传入两个FFN分类头(cls,bbox) -> bbox输出 和memory-> 6decoder

其他:

num_class没有no object(+1),但是有类似的处理过程

matcher的label loss计算不同:

原始:直接过softmax

这里用的是focal bce loss

参考:

um_class没有no object(+1),但是有类似的处理过程

matcher的label loss计算不同:

原始:直接过softmax

这里用的是focal bce loss

参考:

https://www.bilibili.com/video/BV1B8411M73e/?spm_id_from=333.788&vd_source=4e2df178682eb78a7ad1cc398e6e154d

更多推荐

SpringMVC之自定义注解

目录一、Java注解1.1注解简介1.2注解分类1.3JDK基本注解1.4JDK元注解1.5自定义注解1.5.1标记注解1.5.2元数据注解1.6如何自定义注解二、自定义注解的基本案例2.1案例一(获取类、方法以及属性上的注解)2.1.1@Ingerited的使用2.2案例二(获取类属性上的注解属性值)2.3案例三(获

全球变暖问题(floodfill 处理联通块问题)

全球变暖问题文章目录全球变暖问题前言题目描述题目分析边界问题的考虑岛屿是否被淹没判断:如何寻找联通块:代码预告前言之前我们介绍了bfs算法在二维,三维地图中的应用,现在我们接续进行拓展,解锁floodfill算法,准确的来说是用bfs算法解决联通块问题。后续还会更新bfs算法有关内容,喜欢的小伙伴可以点个关注啦。题目描

数据结构和算法之快速排序

快速排序是一种基于分治法的排序算法。它通过不断地将数组分成较小的子数组,并按照递归的方式对每个子数组进行排序,最终将整个数组排序。#mermaid-svg-Za26UnuASULzGzsM{font-family:"trebuchetms",verdana,arial,sans-serif;font-size:16px

Vue路由与nodejs环境搭建

一.路由什么是路由什么是SPA路由的思路及实现实例建立一个HTML来编写路由测试结果​编辑二.nodejs环境什么是node.jsnpm是什么node.js的下载一.路由什么是路由路由(Routing)是指根据不同的URL地址,将用户导航到不同的页面或视图的过程。在前端开发中,特别是在单页面应用(SPA)中,路由起着至

Python实现MYSQL蜜罐

1LOADDATAINFILE介绍首先开启一个Mysql,看一下mysql是如何读取主机文件的。1.1linux搭建mysql1)docker运行mysql2)启动Mysqldockerrun-itd--namemysql-p3306:3306-eMYSQL_ROOT_PASSWORD=123456mysql3)进入容

Rust常见编程概念

变量和可变性rust使用let声明变量,变量默认是不可改变的。通过在let后面加上mut,可以声明可变变量。可以在变量名后加:和类型名,来显式声明变量类型,例如:leta:u32=1;常量常量使用const声明,变量名一般约定使用大写。隐藏不同的作用域如果有重叠,且重叠区域内有同名的变量,那么更小的作用域里变量会隐藏外

CentOS 7系统安装与配置、常用100条操作命令

CentOS7是一个广泛使用的开源Linux操作系统,它是RedHatEnterpriseLinux(RHEL)的一个免费重建版本,以稳定性和安全性而著称。在CentOS7上安装虚拟机通常使用虚拟化技术,如VirtualBox或VMware等。以下是CentOS7的简要介绍以及如何安装CentOS7虚拟机的步骤。Cen

git 的文件目录错误删除 --chatGPT

问:git的文件目录错误删除,需要还原到最后一次提交的位置,如何操作gpt:如果您在Git中删除了文件或目录,想要还原到最后一次提交的位置,可以使用以下步骤:1.**查看Git状态**:首先,可以使用以下命令来查看当前Git仓库的状态,以确保您删除了哪些文件或目录:```gitstatus```这将列出未提交的更改,包

(python语言程序设计教程)自学二

(python语言程序设计教程)自学二文章目录前言一、编写简单的程序1.1.标识符及命名规则1.2.变量与赋值语句1.3.数值1.4.字符串二、turtle画图2.1.绘制爱心并书写文本2.2.绘制幸运的四叶草2.3.浪漫的玫瑰花三、课后习题总结前言本系列文章,主要是对学校开设的python课程进行总结,教科书为:py

性能测试 —— 性能测试常见的测试指标 !

一、什么是性能测试先看下百度百科对它的定义,性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。我们可以认为性能测试是:通过在测试环境下对系统或构件的性能进行探测,用以验证在生产环境下系统性能是否达到预估的性能需求,发现系统可能存在的性能瓶颈,进而改善优化并系统的性能,提高系

多线程的上下文切换

多线程的上下文切换是指在多线程环境下,操作系统或调度器将CPU执行权从一个线程切换到另一个线程的过程。上下文切换允许多个线程交替执行,使得看起来多个线程同时在运行,从而实现并发性。上下文切换的发生通常有以下几种情况:时间片耗尽:操作系统为每个线程分配一定的时间片(或时间量),当一个线程的时间片用尽时,操作系统会暂停该线

热文推荐