【Deformable DETR】

最近学习CV中的Transformer有感而发,网上关于Deformable DETR通俗的帖子不是很多,因此想分享一下最近学习的内容。第一次发帖经验不足,文章内可能有许多错误或不恰之处欢迎批评指正。

Abstract

DETR消除了目标检任务中的手工设计痕迹,但是存在收敛慢以及Transformer的自注意力造成的特征图分辨率不能太高的问题,这就导致了小目标检测性能很差。我们的Deformable DETR只在参考点附近采样少量的key来计算注意力,因此我们的方法收敛快并且可以用到多尺度特征。

1、Introduction

传统目标检测任务有很多手工设计痕迹,所以不是端到端的网络。DETR运用到了Transformer强大的功能以及全局关系建模能力来取代目标检测中人工设计痕迹来达到端到端的目的。

DETR的两大缺点

(1)收敛速度慢:因为全局像素之间计算注意力要收敛到几个稀疏的像素点需要消耗很长的时间。

(2)小目标检测差:目标检测基本都是在大分辨率的特征图上进行小目标的检测,但是Transformer中的Self Attention的计算复杂度是平方级别的,所以只能利用到最后一层特征图。

可变形卷积DCN是一种注意稀疏空间位置很好的机制,但是其缺乏元素之间关系的建模能力

综上所述,Deformable Attention模块结合了DCN稀疏采样能力和Transformer的全局关系建模能力。这个模块可以聚合多尺度特征,不需要FPN了,我们用这个模块替换了Transformer Encoder中的Multi-Head Self- Attention模块和Transformer Decoder中的Cross Attention模块。

Deformable DETR的提出可以帮助探索更多端到端目标检测的探索。提出了bbox迭代微调策略两阶段方法,其中iterative bounding box refinement类似Cascade R-CNN方法,two stage类似RPN

2、Related work

Transformer中包含了多头自注意力和交叉注意力机制,其中多头自注意力机制对key的数量很敏感,平方级别的复杂度导致不能有太多的key,解决方法主要可以分为三类。

(1)第一类解决方法为在key上使用预定义稀疏注意力模式,例如将注意力限制在一个固定的局部窗口上,这将导致失去了全局信息。

(2)第二类是通过数据学习到相关的稀疏注意力。

(3)第三类是寻找自注意力中低等级的属性,类似限制关键元素的尺寸大小。

图像领域的注意力方法大多数都局限于第一种设计方法,但是因为内存模式原因速度要比传统卷积慢3倍(相同的FLOPs下)。DCN可以看作是一种自注意力机制,它比自注意力机制更加高效有效,但是其缺少元素关系建模的机制。我们的可变形注意力模块来源于DCN,并且属于第二类注意力方法。它只关注从q特征预测得到的一小部分固定数量的采样点

目标检测任务一个难点就是高效的表征不同尺度下的物体。现在有的方法比如FPN,PA-FPN,NAS-FPN,Auto-FPN,BiFPN等。我们的多尺度可变形注意力模块可以自然的融合基于注意力机制的多尺度特征图,不需要FPN了

3、Revisiting Transformers And DETR

3.1、Transformer中的Multi-Head Self-Attention

该模块计算复杂度为: o(N_{q}{C^{2}} + N_{k}{C^{2}} + N_{q}N_{k}{C}),其中 C 代表特征图维度, N_{q} 和 N_{k} 均为图片中的像素(pixel),因此有N_{q} = N_{k} \gg C。所以计算复杂度可以简化为 o(N_{q}N_{k}{C}) ,可以得出其与图片像素的数量成平方级别的计算复杂度。

3.2、DETR

DETR在目标检测领域中引入了Transformer结构并且取得了不错的效果。这套范式摒弃了传统目标检测中的anchorpost processing 机制,而是先预先设定100个object queries然后进行二分图匹配计算loss。其具体流程图(pipeline)如下

图1. DETR Pipeline

1、输入图片3×800×1066的一张图片,经过卷积神经网络提取特征,长宽32倍下采样后得到2048×25×34,然后通过一个1×1 Conv进行降维最终得到输出shape为256×25×34.

2、positional encoding为绝对位置编码,为了和特征完全匹配形状也为256×25×34,然后和特征进行元素级别的相加后输入到Transformer Encoder中。

3、输入到Encoder的尺寸为(25×34)×256=850×256,代表有850个token每个token的维度为256,Encoder不改变输入的Shape。

4、Encoder的输出和object queries输入到Decoder中形成cross attentionobject queries的维度设置为anchor数量×token数量

5、Decoder输出到FFN进行分类和框定位,其中FFN是共享参数的。

tips: 虽然DETR没有anchor,但是object queries其实就是起到了anchor的作用。

真的是很多就是会影响的纷纷, 的评分法,的得分,好吃的很疯狂,的复合肥‘的判断【二分侧福晋】得分后方可,

DETR缺点在于:

(1)计算复杂度的限制导致不能利用大分辨率特征图,导致小目标性能差

(2)注意力权重矩阵往往都很稀疏,DETR计算全部像素的注意力导致收敛速率慢

4、Method

4.1、Deformable Attention Module

图2. Deformable Attention Module

Deformable Attention Module主要思想是结合了DCN和自注意力,目的就是为了通过在输入特征图上的参考点(reference point)附近只采样少数点(deformable detr设置为3个点)来作为注意力的  k。因此要解决的问题就是:(1)确定reference point。(2)确定每个reference point的偏移量(offset)。(3)确定注意力权重矩阵 A_{mqk}。在Encoder和Decoder中实现方法不太一样,加下来详细叙述。

在Encoder部分,输入的Query Feature z_{q}为加入了位置编码的特征图(src+pos),value(x)的计算方法只使用了src而没有位置编码(value_proj函数)。

(1)reference point确定方法为用了torch.meshgrid方法,调用的函数如下(get_reference_points),有一个细节就是参考点归一化到0和1之间,因此取值的时候要用到

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

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

相关文章

macOS系统下载百度网盘的操作流程

第一步 进入百度网盘的官网,链接:百度网盘-免费云盘丨文件共享软件丨超大容量丨存储安全​​​​​​​,选择“客户端下载” 第二步 根据自己的电脑配置选择版本进行下载。芯片的查看路径是系统设置-通用-关于本机 第三步 点击右上角的图标…

自监督学习综述

1.简介 其实自监督学习的核心思想很简单,利用大量的无标签数据训练模型,然后将其作为预训练模型在下游任务上进行微调(有标签)。在用无标签图像训练模型时主要通过设计辅助任务,用图像自身的信息作为标签训练。常见的…

linux存储管理

固态硬盘SSD SSD的优势 SSD采用电子存储介质进行数据存储和读取的一种技术,拥有极高的存储性能,被认为是存储技术发展的未来新星。 内存直接当成硬盘使用 与传统硬盘相比,SSD固态电子盘具有以下优点 第一,SSD完全的半导体化&…

go语言函数二、init函数定义与作用

go语言init函数定义与作用 在go语言中,每一个源文件都可以包含一个init函数,这个函数会在main函数执行前,被go运行框架调用,注意是在main函数执行前。 package main import ("fmt" )func init() {fmt.Println("i…

实战案例:缓存不一致问题的解决(redis+本地缓存caffine)

一.问题引入 目前在写项目的时候,在B端查看文章,A端修改文章。为了增加效率,以及防止堆内存溢出,在B端选择本地缓存文章的方案。但是目前出现了A端对文章修改之后,B端读的还是旧数据,出现了缓存不一致的问…

阿赵UE学习笔记——2、新建项目和项目设置

阿赵UE学习笔记目录 大家好,我是阿赵。继续来学习虚幻引擎的使用。这次介绍一下新建项目和项目设置。 一、新建项目 通过桌面快捷方式,或者EPIC Games Loader,启动虚幻引擎。 启动完成后,会打开项目管理的界面,可以看…

C++共享和保护——(5)编译预处理命令

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 耕耘者的汗水是哺育种子成长的乳汁&am…

超结MOS/低压MOS在5G基站电源上的应用-REASUNOS瑞森半导体

一、前言 5G基站是5G网络的核心设备,实现有线通信网络与无线终端之间的无线信号传输,5G基站主要分为宏基站和小基站。5G基站由于通信设备功耗大,采用由电源插座、交直流配电、防雷器、整流模块和监控模块组成的电气柜。所以顾名思义&#xf…

vue中的侦听器和组件之间的通信

目录 一、侦听器 监听基本数据类型: 监听引用数据类型: 计算属性和watch区别? 二、组件通信/传值方式 1.父子组件传值 父组件给子组件传值: (1)props (2)provide inject &…

玩转大数据20:大数据应用容器化与部署实践

一、容器化技术介绍和优势 随着云计算的快速发展,容器化技术作为一种轻量级虚拟化技术,已经成为应用部署的主要方式。容器化技术通过共享操作系统,将应用程序及其依赖项打包成一个独立的、可移植的容器,从而实现应用的快速部署和…

Android Studio: 解决Gradle sync failed 错误

文章目录 1. 前言2. 错误情况3. 解决办法3.1 获取gradle下载地址3.2 获取gradle存放目录3.3 替换并删除临时文件3.4 触发Try Again 4. 执行成功 1. 前言 今天调试项目,发现新装的AS,在下载gradle的过程中,一直显示连接失败,Gradl…

构建陪诊预约系统:技术实战指南

在医疗科技的飞速发展中,陪诊预约系统的应用为患者和陪诊人员提供了更为便捷和贴心的服务。本文将带领您通过技术实现,构建一个简单而实用的陪诊预约系统,以提升医疗服务的效率和用户体验。 技术栈选择 在开始之前,我们需要选择…

AUTOSAR CanTSyn模块配置与代码实现(二)

AUTOSAR CanTSyn模块配置与代码实现 1、FUP message处理 CanTSyn_process_FUP_message 先比较和SYNC报文的Sequence是否相等,如果不相等则不接受该报文。 然后调用CanTSyn_unpack_store_fup处理fup报文。 获取接收到FUP时的本地时间,并与接收到的SYNC…

Linux静态ip

Linux静态ip Ⅰ、修改静态ip Ⅰ、修改静态ip 修改静态ip必须是root用户 su root //切换root用户 ip a //查看修改前的动态ipvi /etc/sysconfig/network-scripts/ifcfg-ens33 //打开网卡配置文件,修改一处,新增四处 BOOTPROTO&quo…

3 使用postman批量创建测试数据

上一篇:2 使用postman进行接口测试-CSDN博客 在软件测试实际工作中,因测试需要,我们要批量创建测试数据。如果某些接口不允许输入重复数据,我们在做批量请求时就要做参数处理了。 比如在上一篇介绍的用户注册接口,一般注册的时候用户名是不允许重复的,如果要批量创…

如何入门 GPT 并快速跟上当前的大语言模型 LLM 进展?

入门GPT 首先说第一个问题:如何入门GPT模型? 最直接的方式当然是去阅读官方的论文。GPT模型从2018年的GPT-1到现在的GPT-4已经迭代了好几个版本,通过官方团队发表的论文是最能准确理清其发展脉络的途径,其中包括GPT模型本身和一…

算法基础之约数个数

约数个数 核心思想&#xff1a; 用哈希表存每个质因数的指数 然后套公式 #include <iostream>#include <algorithm>#include <unordered_map>#include <vector>using namespace std;const int N 110 , mod 1e9 7;typedef long long LL; //long l…

orangepi5plus刷自编译armbian系统

准备好一个编译主机&#xff0c;配置尽量高一点。尽可能有上google的环境配置。 主要步骤 1. 克隆源码 armbian源码仓库 2. 配置apt源 更改/etc/apt/sources.list为国内源&#xff0c;比如我这里ubuntu主机配置清华源。 然后执行apt-get -y update && apt-get -y…

Netty Review - ByteBuf 读写索引 详解

文章目录 概念Pre概述ByteBuf简介ByteBuf的主要特性结构APIByteBuf的创建读写操作示例引用计数操作其他常用操作 Code 演示 概念 Pre Netty Review - 探索ByteBuf的内部机制 概述 Netty的ByteBuf是一个强大的字节容器&#xff0c;用于处理字节数据。它提供了比Java标准库中的…

DAY11

问题一&#xff1a;指针与引用的区别 疑问 为什么引用的本质是指针常量&#xff0c;但是对它求sizeof却是变量所占内存空间的大小那&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f; 1.引用是给变…