目标检测 Deformable DETR(2021)详细解读

news2024/10/4 18:11:34

文章目录

  • 前言
  • 整体网络架构
  • 可变形注意力模块
  • backbone生成多尺度特征
  • 多尺度位置编码
  • prediction heads
  • 两个变体

前言

为解决DETR attention的计算量大导致收敛速度慢、小目标检测效果差的问题:提出了Deformable Attention,其注意力模块只关注一个query周围的少量关键采样点集,采样点的位置并非固定,而是可学习的(如左图所示,DETR的query要和其他所有的key计算相似度计算量为token的平方, 而Deformable DETR只关注周围少量的key,大大减少了计算量,提高了收敛速度),并采用了多尺度策略提高了小物体的检测性能。
在这里插入图片描述

整体网络架构

左图为detr网络架构,右图为deformable detr网络架构。

改造点:

  1. 多尺度 feature map
  2. Encoder部分的Muti-Head Self-Attention改为Multi-Scale Deformable Self-Attention
  3. Dncoder部分的Muti-Head Attention改为Multi-Scale Deformable Cross-Attention
  4. 让检测头prediction heads预测边界框与参考点的相对偏移量,以进一步降低优化难度。
  5. 目标数上限从100提升至300,在最后预测的时候会选择top-k前100进行预测。

在这里插入图片描述
为什么只将Decoder中的自注意力模块不改成可变形注意力模块?

因为在交叉注意模块中,对象查询从特征映射中提取特征,其中的key是来自编码器的输出特征映射;在自注意模块中,对象查询相互交互,其中key是对象查询 (key value的来源一般都是同一个);而本文提出的可变形注意模块是将卷积特征图作为关键元素设计的,因为交叉注意模块使用了encoder的输出,encoder的输入是特征图,因此只需要修改交叉注意模块就可以了。

可变形注意力模块

deformable思想:

deformable思想来源于DCN(deformable convolution可变形卷积),DCN的思想就是做卷积的时候,不是选取固定的周围n*n区域的像素点,而是用网络学习我到底取哪些点来做卷积。可变形卷积实际是指标准卷积操作中采样位置增加了一个偏移量offset(这个偏移量是通过学习得到的),这样卷积核就能在训练过程中扩展到很大的范围。

在这里插入图片描述
如图(a)普通卷积的卷积核权重的固定导致同一CNN在处理一张图的不同位置区域的时候感受野尺寸都相同,这对于编码位置信息的深层卷积神经网络是不合理的。图(b)是可变形卷积,在采样时可以更贴近物体的形状和尺寸。
在这里插入图片描述
deformable detr工作中,就是用到了这个思想:原本的DETR计算相似性的时候是稠密的,就是Q中的features要和K中的每个features计算相似性。这个计算量非常大。在deformable detr中,feature只与少部分其他features做相似性计算,然后对特征进行加权融合。

Deformable Attention:
在这里插入图片描述

第一行是DETR的attention过程,x是输入特征; z q z_q zq看做query,由x线性变换生成; A m q k A_{mqk} Amqk 表示的是归一化注意力权重attention map,它是通过 Q× K T K^T KT 算出来的; W m ′ x k W_{m}'x_k Wmxk 其实就是value。m代表第几注意力头部。 W m W_m Wm是注意力施加在value之后的结果经过线性变换,从而得到不同头部的输出结果,最后进行concat拼接(公式里面没有表示出来)。由此可知,在Transformer的多头注意力计算中,每个query都要与所有位置的key计算注意力权重,并且对应施加在所有的value上。

第二行是可变形多头注意力Deformable DETR, p q p_q pq 代表 z q z_q zq的位置(理解成坐标),是2d向量称为参考点; Δ p m q k Δp_{mqk} Δpmqk是采样集合点相对于参考点的位置偏移,位置偏移 Δ p m q k Δp_{mqk} Δpmqk是可学习的,由query经过全连接层得到; x ( p q + Δ p m q k ) x(p_{q} + Δp_{mqk}) x(pq+Δpmqk)代表基于采样点位置插值出来的value,每个query在每个头部中,只需和这些位置的特征进行交互。

第三行是多尺度可变形多头注意力,和第二个公式基本一样,增加了多尺度,其中 L 表示从backbone中选取的feature map总层数,因为deformable的一个优化就是用了多尺度的feature map,提升小目标的检测性能。

在这里插入图片描述

backbone生成多尺度特征

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

多尺度位置编码

将四个特征图的token首尾相连concat拼接从而实现并行运算。
在这里插入图片描述
DETR的使用的是单尺度特征,而且使用的是三角函数,不同位置的(x、y)坐标会生成不同的位置编码,这肯定没问题,但是Deformable DETR是使用了4个不同尺度的特征,如果还是用原来的方法,那么在这些不同尺度的特征中,位于相同位置(x、y)坐标的位置会产生相同的位置编码,所以这个方法就无法区分这些不同特征相同位置的位置编码了。
针对这个问题,作者引入了level_embedding,不同层的特征图会有不同的level_embed 再让原先的每层位置编码+每层的level_embed,这样就可以区分不同特征相同位置的位置编码了。

prediction heads

分类头:负责预测每个查询(query)对应的目标类别。具体来说,分类头将解码器输出的特征映射到类别空间,从而得到每个查询的类别概率分布。

回归头:由于多尺度可变形关注模块提取的是参考点周围的图像特征,因此我们在设计检测头时将边界框预测为与参考点的相对偏移,以进一步降低优化难度。参考点被用作边界框中心的初始猜测,用检测头来预测与参考点的相对偏移。边界框的预测公式为:
在这里插入图片描述
其中 p q ^ \hat{p_q} pq^ = ( p q x ^ \hat{p_{qx}} pqx^ p q y ^ \hat{p_{qy}} pqy^)表示参考点; b q ( x , y , w , h ) b_{q(x,y,w,h)} bq(x,y,w,h)表示由预测头预测的相对偏移,用于对参考点的坐标进行修正; δ \delta δ δ − 1 \delta^{-1} δ1是为了确保是归一化坐标。

两个变体

  1. 边界框迭代强化策略 Iterative Bounding Box Refinement.:

    每个解码器层根据上一层的预测来细化边界框,这种策略允许模型在多层解码器中逐步修正预测的边界框位置和大小,从而提高最终的检测结果。

    在标准的Deformable DETR中,最终box的预测仅来自于最后一层。使用refine机制时,decoder layer的输出结果会经过box_embed(类似于prediction heads里面的边界框回归头)得到偏移量的预测结果,然后进行一些计算,会得到新的参考点,这个参考点会传给下一层使用,也就是说每层使用的参考点信息来源是上一层经过了预测的box。

    所以和普通版不同的是,iterative bounding box refinement在每一次decoder中的参考点都是经过box_embed的预测结果;而简单版不经过box_embed的预测,直接将上一层的参考点直接输入到下一层里面。

  2. 两阶段Deformable DETR

    注意:two-stage策略必须和边界框策略一起使用。

    根据Encoder的输出对参考点进行筛选,得到分类分数最高的top-k个参考点作为proposals,并且作为Decoder的参考点。而且Decoder中的query(tgt)和query pos都是由这些proposals生成的。

    具体来说: Encoder会生成特征memory,再自己生成初步proposals(其实就是特征图上的点坐标 xywh)。然后分别使用第七个非共享检测头的分类分支对memory进行分类预测,得到对每个类别的分类结果;再用第七个非共享回归分支进行回归预测,得到proposals的偏移量(xywh)。再用初步proposals + 偏移量 得到第一个阶段的预测proposals。然后选取top-k个分数最高的那批预测proposals作为Decoder的参考点。并且,Decoder的object query和 query pos都是由参考点通过位置嵌入(position embedding)再接上一个全连接层 + LN层处理生成的。

    (因为每次Encoder后多加了一次prediction heads,所以叫两阶段)

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

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

相关文章

ML 系列: (10)— ML 中的不同类型的学习

一、说明 我们之前将机器学习方法分为三类:监督学习、无监督学习和强化学习。机器学习方法可以分为不同的类型,我们将在下面讨论最重要的类型。 二、懒惰学习与急切学习 预先学习的工作原理是使用训练数据构建模型,然后使用此模型评估测试数据…

STM32F103C8----3-3 蜂鸣器(跟着江科大学STM32)

一,电路图 (接线图) 面包板的的使用请参考:《面包板的使用_面包板的详细使用方法-CSDN博客》 二,目的/效果 3-3 蜂鸣器 三,创建Keil项目 详细参考:《STM32F103C8----2-1 Keil5搭建STM32项目模…

MySQL 中的 EXPLAIN 命令详解

在 MySQL 数据库中,EXPLAIN命令是一个非常强大的工具,它可以提供关于 SQL 查询执行计划的关键信息。理解这些信息对于优化查询性能至关重要。本文将详细介绍 MySQL 中的EXPLAIN命令提供的关键信息。 一、什么是 EXPLAIN 命令 EXPLAIN命令用于获取 MySQ…

Java多态(向上转型、动态绑定)+结合题目理解原理

第一次尝试使用markdowm写博客哈 文章目录 1.多态的引入2.重写和重载3.避免在构造方法里面去调用重写4.向上转型和向下转型5.让你真正明白什么是多态6.通过一些习题进行理解 1.多态的引入 首先说一下,这个想要使用多态需要我们满足的条件,然后具体的进行…

进程概念(冯诺依曼体系结构、操作系统、进程)-- 详解

目录 一、冯诺依曼体系结构1、概念2、硬件层面的数据流3、关于冯诺依曼的知识点强调4、CPU 工作原理5、补充(CPU 和寄存器、高速缓存以及主存之间的关系) 二、操作系统(Operating System)1、概念2、定位3、设计 OS 的目的4、如何理…

Linux高级编程_28_进程

文章目录 进程并行与并发单道与多道程序进程控制块(PCB)了解PCB存储位置进程号:进程号:(PID)进程组号:(PGID)父进程号:(PPID) fork函数 多进程创建进程状态进…

基于vue框架的大学生勤工俭学咨询服务系统的设计与实现60uw9(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:大学生,企业,招聘信息,在线咨询,咨询回复,职位应聘 开题报告内容 基于Vue框架的大学生勤工俭学咨询服务系统的设计与实现 开题报告 一、研究背景 随着高等教育的普及与就业市场的竞争加剧,大学生勤工俭学已成为一种普遍现…

<<机器学习实战>>1-9节笔记

2.前言与导学 从关注算法的分类与特性到关注算法适合解决哪类问题 很多经典算法不再有效,但特征工程、集成学习越来越有效,和深度学习分别适合于不同领域 3、基本概念 如果预测目标是离散的,则是分类问题,否则回归 机器学习相比…

【AIGC】ChatGPT开发者必备:如何获取 OpenAI 的 API Key

博客主页: [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 💯前言💯API Key的重要性💯获取API Key的基本步骤💯定价策略和使用建议💯小结 💯前言 在现代应用开发中,获取OpenAI的…

TCP Analysis Flags 之 TCP ZeroWindowProbe

前言 默认情况下,Wireshark 的 TCP 解析器会跟踪每个 TCP 会话的状态,并在检测到问题或潜在问题时提供额外的信息。在第一次打开捕获文件时,会对每个 TCP 数据包进行一次分析,数据包按照它们在数据包列表中出现的顺序进行处理。可…

什么是沉默成本?超详细+通俗易懂版

沉默成本是一个在会计学、金融学以及经济学中常用的概念,但更常见的表述是沉没成本(Sunk Cost)。沉没成本指的是已经发生且无法收回的成本,这些成本与当前的决策无关,但往往会影响人们的决策过程。以下是对沉没成本的详…

【MySQL】Ubuntu环境下MySQL的安装与卸载

目录 1.MYSQL的安装 2.MYSQL的卸载 1.MYSQL的安装 首先我们要看看我们环境里面有没有已经安装好的MySQL 我们发现是默认是没有的。 我们还可以通过下面这个命令来确认有没有mysql的安装包 首先我们得知道我们当前的系统版本是什么 lsb_release -a 我们在找apt源的时候&a…

vulnhub-unknowndevice64 2靶机

vulnhub:https://www.vulnhub.com/entry/unknowndevice64-2,297/ 导入靶机,放在kali同网段,扫描 靶机在192.168.81.9,扫描端口 啥啊这都是,详细扫描一下 5555是adb,6465是ssh,12345看样子应该是…

Python 工具库每日推荐 【BeautifulSoup】

文章目录 引言Python工具库的重要性今日推荐:BeautifulSoup工具库主要功能:使用场景:安装与配置快速上手示例代码代码解释实际应用案例获取 BeautifulSoup 官网文档首页的标题与所有图片案例分析扩展阅读与资源优缺点分析优点:缺点:总结【 已更新完 TypeScript 设计模式 专栏…

医疗应急三维电子沙盘系统

一、主要硬件功能指标要求: 1.沙盘尺寸≥98寸;分辨率:≥19201080;亮度500cd/m2;对比度4000:1;显示模式16:9;电源:100VAC~240VAC(50/60Hz)&#xf…

如何在 MySQL 中处理大量的 DELETE 操作

在 MySQL 数据库的使用过程中,我们有时会面临需要处理大量 DELETE 操作的情况。如果处理不当,可能会导致数据库性能下降、锁等待甚至系统崩溃。本文将介绍一些在 MySQL 中处理大量 DELETE 操作的方法。 一、问题背景 当需要删除大量数据时,…

手写mybatis之实现映射器的注册和使用

前言 其实对于解决这类复杂的项目问题,核心在于要将主干问题点缩小,具体的手段包括:分治、抽象和知识。运用设计模式和设计原则等相关知识,把问题空间合理切割为若干子问题,问题越小也就越容易理解和处理。就像你可以把…

【论文阅读】Segment Anything Model for Road Network Graph Extraction

【论文阅读】Segment Anything Model for Road Network Graph Extraction (CVPRW 2024) Paper链接:https://openaccess.thecvf.com/content/CVPR2024W/SG2RL/html/Hetang_Segment_Anything_Model_for_Road_Network_Graph_Extraction_CVPRW_2024_paper.html 文章目录…

基于SSM医疗信息管理系统(源码+定制+参考)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

vue文件的认识

1.package.json 项目包文件 里面包含许多可以在命令提示符中运行的命令,这里使用vue3创建的项目,所以dev是“vite”。 2.main.js 整个项目的入口文件,createApp创建应用实例 createApp(App).mount(#app) 这句话意思是以App作为参数生成一…