【论文阅读】DETR+Deformable DETR
可变形注意力是目前transformer结构中经常使用的一种注意力机制,最近补了一下这类注意力的论文,提出可变形注意力的论文叫Deformable DETR,是在DETR的基础上进行的改进,所以顺带着把原本的DETR也看了一下。
一、DETR
DETR本身是一个使用transformer结构进行目标检测的模型,在相关工作这一节作者提到使用了一种叫做集合预测的方法,集合预测不同于传统的目标检测方法,这类方法是直接输出固定大小的包围框的集合,而传统的方法是不固定的包围框再使用极大值抑制进行后处理。使用这一结构之后,设计DETR需要解决两个关键问题,如何建立一个基于集合的损失函数以及集合内部的对应关系应该如何构建。
匹配关系的建立
DETR首先约定了自己能够检测到的目标的数量的最大值N,如果图像中的物体超过了这个数量也没用,只能检测出N个物体。对于检测出的N个物体,如何与groundtruth建立联系是DETR需要解决的第一个问题,这里作者使用了匈牙利算法进行解决。简单来说,匈牙利算法就是从全局角度找出一个让整体效果最优的一对一匹配关系。传统的目标检测构建的实际上是一个多对多的关系,利用正负样本来指导模型预测的包围框应该属于哪个真值。使用匈牙利算法,我们需要构建一个真值与预测之间的一对一关系,让这个关系组的误差最小化。对于预测的N个物体,我们一般假设N要大于实际存在的物体数量,超过的部分将包围框的类别标记为空,即无物体。之后利用下面的式子进行优化:
其中Lmatch可以理解为一个损失值,用于描述当我们将第i个物体与第б(i)个物体匹配时错误带来的影响。这个误差包括两部分:类别的差异和包围框的差异。类别的差异直接使用最简单粗暴的负对数似然损失,我们希望预测的类别的可信度尽可能接近当前匹配的真值中的类别。而包围框差异的部分,我们同时考虑交并比差异和包围框边界差异。交并比差异采用的是GIOU进行计算,它在原始 IoU 基础上,再减去预测框与真实框在最小闭包矩形中未覆盖区域的比重。而包围框边界差异指的则是包围框的四个端点与真实值之间的差异。最终包围框差异的计算公式为:
在此基础上得到的匈牙利算法的计算公式为:
DETR模型设计
模型设计的部分,DETR首先采用一个CNN进行特征提取,提取好的特征图送入transformer的编码器部分进行处理,送入编码器之前首先使用1×1卷积进行维度调整,假设原来的特征图维度是C×H×W,调整的过程使用1×1卷积进行,从而将新的特征图维度调整为d×H×W,之后这d张特征图被调整为HW个d维的向量,这些向量会被作为token再加入2d位置编码后送入编码器。encoder的部分首先是这d个token自己之间计算自注意力,在多个编码器块之后得到提取结果。
解码器的部分则是使用N个可学习query进行提取,这里的N对应的就是前面的N个物体。这N个查询首先进行自注意力产生相互关系,之后再与encoder的输出计算交叉注意力进行提取,这N个查询的结果最终经过一个前馈神经网络调整为N个预测结果。
二、Deformable DETR
Deformable DETR是对DETR的改进,针对收敛慢、小物体识别不好的问题,但是从结果来看,其提出的可变形注意力貌似比本身模型更出名。简单来说,可变形注意力是借鉴了CNN中可变形卷积的思想,让transformer不是平等地关注所有像素,有些像素更加重要那我就只关注那一部分就完事了。
可变形注意力机制
采用与DETR相同的结构,图像的输入首先会经过CNN进行特征的提取,在得到的特征图的基础上,可变形注意力会选取一部分点,这部分点的坐标是query自己学习得来的,在推理过程是固定的,除此之外,query还会提供一个偏移值,基于选择的点的坐标,加上这个偏移值,就可以计算出采样点周围的几个点,特征图中这几个点的特征向量被提取出来进行加权求和,从而得到可变形注意力的输出。
这一可变形注意力机制可以很好地与多尺度卷积结合起来,多尺度卷积中特征图的大小是不同的,所以我们不能采用固定的坐标大小来表示采样点的位置,这里作者设计了一个归一化机制,通过归一化让位置和偏移量转换为0-1的一个比例,这样再在每一层根据大小得到一个可能是浮点数的坐标,这个坐标可能没有直接对应的点,需要利用临近点插值得到这个坐标对应的值,这样将尺度引入,我们就得到了多尺度的可变形注意力。
Deformable transformer 结构
使用了可变形注意力机制之后,DETR的整个输入输出都变了,变成了多尺度卷积产生的多尺度特征图。在encoder的部分,编码器的输入和输出都是多尺度的特征图,并且编码器输出的大小和编码器输入的大小是一样的,这部分使用可变形自注意力机制每个像素都会作为一个query参与到计算中,在添加尺度编码之后参与可变形注意力的计算,也就是说这部分是对特征图中的每个点,都计算一遍多尺度可变形注意力,最后叠加出来一个等大小的特征图。在decoder的部分,作者使用了可变形自注意力和可变形交叉注意力。对于N个query,首先使用可变形自注意力机制进行交互,这个交互也是可变形的,主要体现在交互的过程不是一一对应的,每个query只和一部分query进行交互。虽然都叫做可变形自注意力,但是decoder部分使用的和encoder部分使用的还不一样,decoder的部分的Deformable Self-Attention并不能很好地体现出采样点这一概念,只保留了非全部交互这一概念。
而可变形交叉注意力则是将每个query与encoder的输出进行交互,得到交叉注意力结果,最终得到N个query查询的结果。
整体理顺一下可变形注意力在DETR中的机制。首先模型利用多尺度卷积得到不同尺度下的特征图P3P4P5,之后这些特征图会被先送入encoder的部分,编码器中使用多尺度可变形自注意力机制,对于每一个尺度,每个点都是一个query与周围的小部分点进行加权求和,同时不同尺度之间也会相互参与计算,比如说P3尺度下,同尺度采样点直接参与计算,不同尺度的采样点则是使用归一化进行处理然后参与计算,由于加权求和并不改变向量长度,所以自注意力计算过程完全不改变输入输出的大小。经过处理,encoder部分使用多尺度可变形自注意力机制将特征图进行了处理,输出的是一个等大小但是特征更加丰富的特征图。之后decoder的部分输入是N个可学习的object query,这部分query首先进行可变形自注意力机制,每个query和小部分query进行加权求和,之后所有的object query都作为query与encoder输出的多尺度特征图进行可变形多尺度交叉注意力计算,每个query会得到一个向量,这个向量的长度等于特征图的深度,最后所有的query都扫一遍,就可以拼成一个二维矩阵,这个二维矩阵再经过后续计算送入不同的head完成不同的下游任务。
可以看到,虽然打着可变形注意力的幌子,但是扣细节的话可以发现,可变形注意力几乎是重写了传统transformer中qkv的结构,我们很难找到真正意义上的qkv三个内容,可变形这个词,主要针对的就是让点不是和全部剩余点进行交互,而是让点和小部分点进行交互,图像中并不是所有的内容都是完全有意义的,我只需要关注真正有价值的东西即可,剩余的是在徒增开销。
相关文章:
【论文阅读】DETR+Deformable DETR
可变形注意力是目前transformer结构中经常使用的一种注意力机制,最近补了一下这类注意力的论文,提出可变形注意力的论文叫Deformable DETR,是在DETR的基础上进行的改进,所以顺带着把原本的DETR也看了一下。 一、DETR DETR本身是…...
ArchLinux卡死在GRUB命令行模式修复
ArchLinux卡死在GRUB命令行模式修复 文章目录 ArchLinux卡死在GRUB命令行模式修复前言一、 系统配置1.系统配置2.磁盘分区信息 二、重建GRUB引导1.插入带ArchLinux ISO的U盘,BIOS选择U盘启动并进入ArchLinux安装界面。2.挂载btrfs根目录分区3.挂载/boot分区4.进入ch…...
Docker 容器 - Dockerfile
Docker 容器 - Dockerfile 一、Dockerfile 基本结构二、Dockerfile 指令详解2.1 FROM2.2 MAINTAINER2.3 COPY2.4 ADD2.5 WORKDIR2.6 VOLUME2.7 EXPOSE2.8 ENV2.9 RUN2.10 CMD2.11 ENTRYPOINT 三、Dockerfile 创建镜像与模板3.1 Dockerfile 镜像3.2 镜像管理3.3 Dockerfile 模板…...
C++ 中二级指针的正确释放方法
C 中二级指针的正确释放 一、什么是二级指针? 简单说,二级指针就是指向指针的指针。 即: int** p;它可以指向一个 int*,而 int* 又指向一个 int 类型的变量。 常见应用场景 动态二维数组(例如 int** matrix&#x…...
解释器模式(Interpreter Pattern)
解释器模式(Interpreter Pattern) 是行为型设计模式之一,通常用于处理“语言”类问题,比如计算器、编程语言的解析等。它的核心思想是通过建立一个解释器,解析并解释由语法规则描述的语言,通常以**抽象语法…...
编译原理期末重点-个人总结——1 概论
概述 计算机语言的分类 低级语言:机器语言(唯一能被计算机执行的),汇编语言 高级语言:JAVA ,C 执行高级语言或汇编语言的步骤 高级语言程序或汇编语言程序> (通过解释 或 翻译)转…...
五一作业-day04
文章目录 1. **ps -ef是显示当前系统进程的命令,统计下当前系统一共有多少进程**2. **last命令用于显示所用用户最近1次登录情况,awk可以取出某一列,现在要取出last命令第1列并去重统计次数**3. **secure日志是用户的登录日志,过滤出secure日志中的Failed password的次数(用课堂…...
Java按字节长度截取字符串指南
在Java中,由于字符串可能包含多字节字符(如中文),直接按字节长度截取可能会导致乱码或截取不准确的问题。以下是几种按字节长度截取字符串的方法: 方法一:使用String的getBytes方法 java public static String substringByBytes(…...
[特殊字符]Git 操作实战:如何将本地项目提交到远程 Gitee 仓库
在日常开发中,我们经常需要将本地开发的项目同步到远程代码仓库中(如 GitHub、Gitee 等),以便团队协作或备份管理。本文将以 Gitee(码云) 为例,详细讲解如何将本地已有项目提交到远程仓库&#…...
【信息系统项目管理师-论文真题】2008上半年论文详解(包括解题思路和写作要点)
更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 试题1:企业级信息系统项目管理体系的建立1、写作要点2、解题思路项目管理流程和项目管理的工具试题2:项目的质量管理1、写作要点2、解题思路项目的早期阶段如何制定项目质量管理计划如何确保项目质量管理计划…...
C语言|函数的递归调用
函数的递归调用 (逐层分解,逐层合并) 自己调用自己,必须要知道什么时候停止调用,不然会造成电脑死机。 【知识点】 1 函数调用是通过栈实现的。 多个函数嵌套调用时,会按照先调用后返回的原则进行返回。 2 函数递归必须满足的两…...
QT 在圆的边界画出圆
QT 在圆的边界画出圆 QT 在圆的边界画出实心圆 在Qt中,要实现在圆的边界上绘制图形,你需要使用QPainter类来在QWidget或其子类的paintEvent中绘制。下面我将通过一个简单的例子来说明如何在Qt中绘制一个圆,并在其边界上绘制其他图形&#x…...
Guass数据库实验(数据字典设计、交叉表设计)
Assignment 2: Database Design 目录 Assignment 2: Database Design 数据库创建 新建用户bit,并创建数据库模式ass2 使用datastdui以该用户远程登陆 创建学科数据字典相关表 学科门类表 一级学科表 二级学科表 三级学科表 学科变更历史表 插入数据字典…...
算法题(139):牛可乐和魔法封印
审题: 本题需要我们将数组中包含在区间x~y之间的数据个数找到并输出 思路: 方法一:暴力解法 首先我们可以直接遍历一次数组,找到x的索引,然后再找到y的索引,并计算最终的元素个数,这里就要有O&a…...
LeetCode热题100--189.轮转数组--中等
1. 题目 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: [5,6,…...
DeepSeek-Prover-V2:数学定理证明领域的新突破
前言 在人工智能飞速发展的当下,模型的迭代与创新层出不穷。 五一假期期间,DeepSeek 再次发力,推出了令人瞩目的新模型 ——DeepSeek-Prover-V2。 与大众期待的 R2 通用推理模型不同,这次 DeepSeek 将目光聚焦于数学定理证明领…...
调试——GDB、日志
调试——GDB、日志 1. gdb常用指令2. 如何生成core文件并调试?3. 如何调试正在运行的程序4. 调试多进程程序5. 调试多线程程序6. log日志 gcc编译器可以帮我们发现语法错误,但是对业务逻辑错误却无能为力。当我们想找出逻辑错误时,就需要调试…...
ARM子程序调用与返回
子程序(也叫过程、函数、方法)是一个能被调用和执行并返回到调用点那条指令的代码 段。 两个问题:如何将参数传递给子程序或从子程序中传递出来?怎么从子程序返回到调用点? 指令BSR Proc_A调用子程序Proc_A。 处理器将…...
WSL 安装 Debian 后,apt get 如何更改到国内镜像网址?
提问:Debian apt install 如何更改到国内镜像网址? 在 Debian 系统中,你可以通过修改 /etc/apt/sources.list 文件,将软件源更改为国内镜像网址,以加快软件包的下载速度。下面为你详细介绍操作步骤: 1. 备…...
SpringCloud GateWay网关
1、网关介绍 微服务网关(Microservices Gateway)是微服务架构中的核心组件,充当所有客户端请求的统一入口,负责请求的路由、过滤和聚合等操作。它是微服务与外部系统(如Web、移动端)之间的中间层࿰…...
可视化大屏开发全攻略:技术与实践指南
引言 在数字化浪潮席卷全球的当下,数据已成为企业乃至整个社会发展的核心驱动力。从繁华都市的交通管控中心,到大型企业的数据运营中枢,可视化大屏无处不在,以直观、震撼的方式展示着数据的魅力与价值。它就像是一扇通往数据世界…...
如何设计一个为QStackWidget的界面切换动画?
目录 前言 接口考虑 实现的思路 前言 笔者这段时间沉迷于给我的下位机I.MX6ULL做桌面,这里抽空更新一下QT的东西。这篇文章是跟随CCMoveWidget一样的文章,尝试分享自己如何书写这份代码的思考的过程 接口考虑 笔者不太想使用继承的方式重新写我们的…...
LeetCode 0790.多米诺和托米诺平铺:难想条件的简单动态规划
【LetMeFly】790.多米诺和托米诺平铺:难想条件的简单动态规划 力扣题目链接:https://leetcode.cn/problems/domino-and-tromino-tiling/ 有两种形状的瓷砖:一种是 2 x 1 的多米诺形,另一种是形如 "L" 的托米诺形。两种…...
模拟芯片设计中数字信号处理一些常用概念(一)
模拟芯片设计中经常用时域场景思考来解决问题,但实际上很多地方如果采用频域角度思考,解决问题更快更方便。 时域和频域的对照关系如下: a、如果时域信号是周期的,那么它的频谱就是离散的。 b、如果时域信号是非周期的,那么它的频谱就是连续的。 c、如果时域信号是离散的…...
c++进阶——AVL树主要功能的模拟实现(附带旋转操作讲解)
文章目录 AVL树的实现AVL树的概念及引入AVL树调整问题AVL树的实现AVL树的结构AVL树的插入插入的流程更新平衡因子的原则实现插入的基本框架(插入 调整平衡因子)旋转操作右单旋左单旋左右双旋右左双旋 合并旋转代码 测试部分平衡检测接口测试用例 对于其他接口的说明 AVL树的实…...
一个电商场景串联23种设计模式:创建型、结构型和行为型
理解了!你希望有一个具体的项目案例,能够涵盖所有23种设计模式,并且将它们分类为创建型、结构型和行为型。这个需求非常好,能够帮助你从实际的应用场景理解每种设计模式的用法。 为了实现这个目标,我将为你设计一个电…...
浅拷贝和深拷贝的区别
Person p1 new Person(10);Person p2 p1;p2.age 20;System.out.println(p1p2); // trueSystem.out.println(p1.age); // 20 这种做法只是复制了对象的地址,即两个变量现在是指向了同一个对象,任意一个变量,操作了对象的属性,都…...
Java开发者面试实录:微服务架构与Spring Cloud的应用
面试场景 面试官: 请介绍一下你的基本情况。 程序员: 大家好,我叫张小明,今年27岁,硕士学历,拥有5年的Java后端开发经验。主要负责基于Spring Boot开发企业级应用,以及微服务架构的设计和实现。 面试官: 好的&#…...
在Ubuntu系统中安装桌面环境
在 Ubuntu 系统中安装桌面环境可以通过包管理器 apt 或工具 tasksel 实现。以下是详细的安装方法和常见桌面环境的选择: --- ### **1. 准备系统更新** 在安装前,建议更新软件源和系统包: bash sudo apt update && sudo apt upgrade…...
多语言笔记系列:Polyglot Notebooks 中使用 xUnit 单元测试
Polyglot Notebooks 中使用 xUnit 单元测试 本文目录 Polyglot Notebooks 中使用 xUnit 单元测试[TOC](本文目录)Polgylot Notebooks 并没有直接支持单元测试框架。不能像VS里那样方便的进行单元测试。简单远行的话,可以使用下面的方案!1、引入必要的NuG…...
Cisco Packet Tracer 选项卡的使用
目录 设备Config选项卡的使用 Realtime and Simulation模式(数据包跟踪与分析) 设备Desktop选项卡的使用 设备Config选项卡的使用 Hostname NVRAM Startup Config----Load 加载 INTERFACE 点击on Save 如果,不把Running Config保存为Sta…...
杨校老师竞赛课之C++备战蓝桥杯初级组省赛
目录 1. 灯塔 题目描述 输入描述 输出描述 输入样例1 输出样例1 输入样例2 输出样例2 数据说明 2. 子区间 题目描述 输入描述 输出描述 输入样例 输出样例 数据说明 3. 染色 题目描述 输入描述 输出描述 输入样例1 输出样例1 输入样例2 输出样例2 数据…...
gcc/g++用法摘记
链接静态库 gcc main.o -L/path/to/libs -lmylib -o myprogram 【待续】...
kotlin 扩展函数
Kotlin 扩展函数的定义与使用 定义扩展函数 Kotlin 的扩展函数是一种强大的机制,允许开发者为已有的类添加额外的功能,而无需继承该类或对其进行任何修改。这种特性极大地提高了代码的灵活性和可读性。 扩展函数可以通过在函数名称前指定目标类型的接…...
机器人强化学习入门学习笔记
(1)物理引擎 物理引擎就是模拟真实世界物理规律的软件工具。它会根据你给定的物体、质量、形状、力等信息,计算这些物体在时间上的运动和相互作用。如果你设计了一个机器人,那物理引擎就是“虚拟现实世界”,让机器人在里面“活起来”,模拟它走路、抓东西、摔倒等动作。而…...
《RESTful API版本控制的哲学思辨:稳定性与创新性的终极平衡》
有效的版本控制,就如同精密仪器中的校准装置,确保API在不断升级的过程中,依然能与旧有系统无缝对接,维持整个生态的平稳运行。 不同的客户端对API的依赖程度和使用方式各不相同。有些客户端可能因为各种原因,无法及时…...
spring中spring-boot-configuration-processor的使用
spring-boot-configuration-processor 是 Spring Boot 提供的注解处理器,用于在编译阶段生成配置元数据文件(spring-configuration-metadata.json),从而优化开发体验。以下是其核心功能和使用指南: 一、核心功能 IDE 智…...
30天开发操作系统 第27天 -- LDT与库
前言 大家早上好,我们今天的第一个任务就是修复昨天晚上的那个bug。是个什么bug来着?就是用nsct命令运行的应用程序,无论是按ShiftF1还是点击窗口的“x”按钮都没有反应的那个bug啦。 我们得先来找到出问题的原因,然后才能采取对…...
std::move()详解
一、std::move()的作用和原理 本质: std::move()并不像字面意思“搬走”那些对象,而是: 将传入的对象“强制转化”为右值引用类型,从而开启“移动语义”。 在源码层面: 复制代码 template<typename T> std::…...
linux系统基本操作命令
文件和目录操作 ls:列出目录内容。 例如:ls -l 显示详细信息,ls -a 显示包括隐藏文件在内的所有文件。 cd:改变当前目录。 例如:cd /home/username 切换到指定目录。 pwd:显示当前目录的完整路径。 mk…...
python打卡day16
NumPy 数组基础 因为前天说了shap,这里涉及到数据形状尺寸问题,所以需要在这一节说清楚,后续的神经网络我们将要和他天天打交道。 知识点: numpy数组的创建:简单创建、随机创建、遍历、运算numpy数组的索引:…...
架构进阶:什么是数据架构,如何理解数据架构?(华为)
数据架构是企业架构的重要组成部分,DAMA、IBM 及国内大厂对其定义各有侧重。它包含数据资产目录、数据标准、数据模型和数据分布四个组件。数据资产目录可梳理企业数据资产,数据标准统一数据含义和规则,数据模型反映业务对象关联关系,数据分布呈现数据流动情况。数据架构是…...
基于EFISH-SCB-RK3576工控机/SAIL-RK3576核心板的KTV点歌主机技术方案(国产化替代J1900的全场景技术解析)
一、硬件架构设计 多媒体处理模块 超高清解码: RK3576 NPUGPU协同解码,支持4K60fps H.265硬解(功耗<5W),支持8路1080P视频同步预览对比J1900需外接VPU解码芯片,硬件成本降低40%,…...
Java面试深度解密:Spring Boot、Redis、日志优化、JUnit5及Kafka事务核心技术解析
模拟面试实战 面试官:请解释Spring Boot的自动配置原理?哪些关键注解参与了这一过程? xbhog:Spring Boot通过AutoConfiguration标记核心配置类,通过ConditonalOnClass和ConditionalOnMissingBean判断依赖是否存在并自…...
内存碎片深度剖析
目录 什么是内存碎片 内部碎片的解决 malloc STL二级空间配置器 外部碎片的解决 伙伴系统算法 slab分配器 什么是内存碎片 内存碎片是指在内存中存在的一些不连续的、较小的空闲内存块,这些小块内存由于太小而无法被有效地分配给程序使用,从而导…...
飞帆网页中使用 i 评论插件
https://fvi.cn/786...
DeepSeek成本控制的三重奏
知识蒸馏 使用规则引擎筛选合成数据,来替代90%的人工标注 动态精度切换:“节能模式” 根据任务复杂度自动切换FP16/INT8精度,单位token能耗低至0.0028瓦时,推理电费成本降低82% 极致压缩训练 通过以上的技术,降低训练…...
五一の自言自语 2025/5/5
今天开学了,感觉还没玩够。 假期做了很多事,弄了好几天的路由器、监控、录像机,然后不停的出现问题,然后问ai,然后解决问题。这次假期的实践,更像是计算机网络的实验,把那些交换机,…...
效整理文件信息!一键生成文件夹目录的工具
一、软件介绍 大家好,今天给大家推荐一款实用的文件夹目录生成工具,它能快速提取文件夹内的文件信息,并整理成Excel表格,包含文件名、路径、类型、创建/修改时间、大小等关键数据。 为什么需要这个工具? 之前我想整理…...
关闭ollama开机自启动
不同操作系统关闭Ollama开机自启动的方法有所不同,以下是常见操作系统的具体方法: Windows系统 通过任务管理器:按Ctrl Shift Esc打开任务管理器,切换到“启动”选项卡,在列表中找到Ollama(或相关条目&a…...