DETR:End-to-End Object Detection with Transformers

2023-09-14 16:53:14

代码:https://github.com/HuKai97/detr-annotations

论文:https://arxiv.org/pdf/2005.12872.pdf

参考视频:DETR 论文精读【论文精读】_哔哩哔哩_bilibili

团队:Meta AI

摘要

DETR 做目标检测任务既不需要proposal,也不需要anchor,直接用Transformer全局预测能力把目标检测看成一个集合预测的问题,不需要用nms作后处理

 对于一张图片,固定预测一定数量的物体(原作是100个,在代码中可更改),模型根据这些物体对象与图片中全局上下文的关系直接并行输出预测集, 也就是 Transformer 一次性解码出图片中所有物体的预测结果,这种并行特性使得 DETR 非常高效。

背景

相关工作

目标检测

现在大部分的目标检测都是根据已有的初始预测去做一些猜测

twostage:初始猜测是proposal

singlestage:初始猜测是anchor

后处理:

猜想:1)set based loss 2)recurrent detector

贡献

1)把目标检测做成端到端的框架,删除依赖于人的先验的部分,比如最大值抑制和生成anchor

2)提出新的目标函数,通过二分图匹配的方式强制模型输出独一无二的预测

3)用了Transformer Encoder和Decoder的架构,解码器的时候有另外一个输入:learn object queries,和全局图像信息结合在一起,通过不停做注意力操作让模型直接输出预测框

方法

DETR模型结构

step1:

先用卷积神经网络来抽取特征

step2:

拿到特征之后拉直送到Transformer encoder-decoder里面

step3:

encoder继续学习全局信息(非常有利于去移除冗余的框),为decoder的出预测框进行铺垫

step4:

decoder中进行object query,但是这里的object query有多少个就决定了它后面会有多少个框

但是六层decoder中第一层可以不做自注意力

六个decoder中都加了ffn(trick)

step5:

训练的时候通过二分图匹配的方法去算最后的loss,匹配上ground truth之后才会去算一个分类的loss和bounding box的loss;剩下的框被视作背景类;

推理的时候不用loss,直接用罚值去卡一下置信度

*2048~256是通过1x1卷积实现的

*这里拉直是指把HXW(25*24~850)

*object embedding 是 learnable positional embedding

*cross attention:850*256喝100*256反复做自注意力操作

*拿到100*256之后就进行预测了,也就是检测头,不过检测头是标准MLP,做两个预测,一个类别预测一个出框预测

基于集合的目标函数

先生成一百个框

如何知道哪个框对应预测框?-二分图匹配 e.g匈牙利算法/linear sum assignment去解决

最后的公式↓ 分类loss+出框loss;先去算最优匹配,再在最优匹配上面算loss

结果

在大目标检测上效果好,小目标检测效果不是很好

改进:deformable DETR,引入多尺度特征,解决DETR训练太慢的问题

transformer编码器

自注意力可视化

transformer解码器

对于头和尾巴等边缘极值点decoder能处理好,并且处理遮挡问题

Object Query可视化

更多推荐

SQL 性能优化总结

文章目录一、性能优化策略二、索引创建规则三、查询优化总结一、性能优化策略1.SQL语句中IN包含的值不应过多MySQL将IN中的常量全部存储在一个排好序的数组里面,但是如果数值较多,产生的消耗也是比较大的。所以对于连续的数值,能用between就不要用in。2.SELECT语句务必指明字段名称SELECT*增加很多不必

长胜证券:开盘竞价买卖技巧?

开盘竞价是股票生意进程中的一个重要环节,对于出资者来说,怎么在这个短暂的时间内下单买入或卖出股票,成为了检测出资者生意技巧的重要挑战。一、认识开盘竞价开盘竞价是指在股票商场开盘前,一切买进卖出单据的价格在必定的时间内进行比较,最终构成当日股票开盘价的进程。开盘竞价辅导股票在当天的生意价格,也是股票价格走势的一个重要起点

Docker 容器数据卷

是什么卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过UnionFileSystem提供一些用于持续存储或共享数据的特性:卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。一句话:有点类似我们Redis里面的

外星人入侵游戏-(创新版)

🌈writeinfront🌈🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流.🆔本文由Aileen_0v0🧸原创CSDN首发🐒如需转载还请通知⚠️📝个人主页:Aileen_0v0🧸—CSDN博客🎁欢迎各位→点赞👍+收藏⭐️+留言📝​📣系列专栏:Aileen

chatgpt综述和报告

ChatGPT究竟强在哪?复旦大学邱锡鹏教授《大型语言模型的能力分析与应用》_哔哩哔哩_bilibili2022年底,美国OpenA1公司发布了ChatGPT,一个可以与人类对话交互的千亿规模参数的大型语言模型。它可以根据用户输入的指令完成各种语言相关的任务,例如写文章、写代码、回答问题、日常聊天等等,能够极大地提高人

kubeadm搭建k8s高可用集群(keepalived+nginx+3master)

目录前言服务器准备架构讲解环境初始化安装keepalived软件安装nginx软件初始化k8s节点安装docker初始化master01节点的控制面板master02、master03节点加入集群node01、node02节点加入集群检查集群配置docker和kubectl命令补全创建应用验证集群功能验证master节

Chatgpt介绍及搭建步骤

ChatGPT是一个基于自然语言处理技术的聊天机器人。它使用了深度学习和语义分析技术,可以与用户进行自然、流畅的对话。ChatGPT可以回答各种问题,包括常见问题、娱乐、健康、技术、旅游、金融等领域。ChatGPT的核心技术是GPT(GenerativePre-trainedTransformer),这是一种自然语言处

数据结构——排序算法——基数排序

基数排序有两种实现方式。本例属于最高位优先法,思路是从最高位开始,依次对基数进行排序。与之对应的是「最低位优先法」,思路是从最低位开始,依次对基数进行排序。基数排序可以分为以下三个步骤:1.找到数组中的最大值,确定最大数字的位数2.从最低位开始,对数组进行计数排序。计数排序是稳定排序,所以在每一位排序后,相同数值的元素

排序算法-快速排序

属性快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。.1.快速排序整体的综合性

设计模式:享元模式

目录组件代码实现源码中使用总结享元模式(FlyweightPattern)是一种结构型设计模式,它旨在通过共享对象来最大程度地减少内存使用和提高性能。享元模式通过共享细粒度的对象,以有效地支持大量细粒度的对象实例。在享元模式中,对象分为两种类型:内部状态(IntrinsicState)和外部状态(ExtrinsicSt

ArmSoM-W3之RK3588 Debian11详解

1.简介RK3588从入门到精通Debian是⼀种完全⾃由开放并⼴泛⽤于各种设备的Linux操作系统。Rockchip在官⽅Debian发⾏版的基础上构建和适配了相关硬件功能2.环境介绍硬件环境:ArmSoM-W3RK3588开发板软件版本:OS:ArmSoM-W3Debian113.Debian目录结构debian├

热文推荐