End-to-End Object Detection with Transformers

在这里插入图片描述

基于卷积神经网络的目标检测回顾

双阶段代表检测算法:faster rcnn
单阶段代表算法:yolo

上述单双阶段都是基于anchor
目标检测广泛的使用NMS(非极大值抑制算法)

DETR抛弃了上述算法思路。基于编码器和解码器来进行目标检测

DETR对比Swin Transformer

之前的Swin TransformerSwin Transformer 主要用于目标检测的编码器部分,而不是解码器部分。

在目标检测中,通常会使用两个主要组件:编码器和解码器。编码器负责提取输入图像的特征,而解码器则负责将这些特征转换为目标检测结果。Swin Transformer 主要用作编码器,它通过多层的 Transformer 模块来提取图像特征。

至于解码器部分,可以采用其他的方法来完成目标检测任务。常见的解码器包括使用卷积神经网络 (CNN) 或者其他的传统机器学习算法。具体选择哪种解码器取决于具体的任务和需求。

总结起来,Swin Transformer 在目标检测中主要用作编码器部分,而解码器部分可以根据需求选择其他方法来完成。

摘要

在这里插入图片描述
我们提出的新方法将物体检测视为一个直接的集合预测问题。我们的方法简化了检测流水线,有效地消除了对许多手工设计组件的需求,如非最大抑制程序或锚点生成,这些组件明确地编码了我们对任务的先验知识。新框架被称为 DEtection TRansformer 或 DETR,其主要成分是基于集合的全局损失(通过两端匹配强制进行唯一预测)和变换器编码器-解码器架构。DETR 给定了一小组固定的已学对象查询,通过推理对象之间的关系和全局图像上下文,直接并行输出最终的预测结果。与许多其他现代检测器不同,新模型概念简单,不需要专门的库。在极具挑战性的 COCO 物体检测数据集上,DETR 的准确性和运行时间性能与成熟且高度优化的 Faster RCNN 基准相当。此外,DETR 可以很容易地通用于以统一的方式进行全视角分割。我们的研究表明,DETR 的性能明显优于竞争基线。训练代码和预训练模型见 https://github.com/facebookresearch/detr。

检测网络流程

在这里插入图片描述

先使用CNN得到各个Patch作为输入,在套用Transformer做编码解码结构
编码和Vision Transformer一致,重点在于解码,直接预测100个坐标框

Vision Transformer

预测的100个框当中,包括物体和非物体。

在这里插入图片描述

我们的 DEtection TRansformer(DETR,见图 1)可一次性预测所有物体,并使用集合损失函数进行端到端训练,在预测物体和地面实况物体之间进行双向匹配。DETR 通过放弃多个手工设计的、编码先验知识(如空间锚点或非最大抑制)的组件来简化检测管道。与现有的大多数检测方法不同,DETR 不需要任何定制层,因此可以在任何包含标准 CNN 和转换器类的框架中轻松复制1。

大致思路就是:在编码器部分输入的100个向量,通过解码器输出,完成100个检测框的预测
较NLP的区别是:词语之间是有前后的对应关系的,检测是100个向量同时输入

DERT网络架构

在这里插入图片描述
在这里插入图片描述

DETR 使用传统的 CNN 骨干来学习输入图像的二维表示。该模型将其扁平化,并辅以位置编码,然后将其传递给变换器编码器。然后,变换解码器将少量固定数量的已学位置嵌入(我们称之为对象查询)作为输入,并额外关注编码器的输出。我们将解码器的每个输出嵌入信息传递给一个共享前馈网络(FFN),该网络可以预测检测结果(类别和边界框)或 "无对象 "类别。

其实在这里插入图片描述就是和VIT一模一样的

编码器概述

在这里插入图片描述
在这里插入图片描述
编码器对一组参考点的自我关注。编码器能够分离单个实例。使用基准 DETR 模型对验证集图像进行预测。

得到各个目标的注意力结果,准备好特征,等解码器来匹配

解码器概述

解码器阶段首先初始化100个向量 (object queries)
在这里插入图片描述

可以把encoder看成生产者,decoder看成消费者

encoder提供 k 和 v
decoder提供 q, 并使用q去查询匹配 k 和 v

在解码器中,所有的object queries同时去查询匹配编码器中每个位置的k和v

解码器输出的结果经过全连接层得到检测框的位置和目标得分

object queries是核心,让他学会从原始特征数据中找到物体的位置

整体结构

在这里插入图片描述

object queries的初始化

输出层就是100个 object queries 预测
编码器和Vision Transformer一样(减去了cls)

解码器首先随机初始化100个object queries (以0+位置编码进行的初始化的) 相当于就是用位置编码进行的初始化
直接使用位置编码作为初始化的目的:使得不同的object queries 关注图像的不同区域。

通过多层让其学习如何利用输入特征

Decoder中的Muiti-Head Self-Attention

100个 object queries分别使用q,k,v完成自注意力机制

在这里插入图片描述

Decoder中的Muiti-Head Attention

由Encoder提供k和v,由Muiti-Head Self-Attention提供q

损失函数

匈牙利匹配
在这里插入图片描述
在这里插入图片描述
是地面实况 yi 与索引为 σ(i)的预测之间的成对匹配成本。根据之前的工作,匈牙利算法可以高效地计算出这一最优分配

匈牙利匹配:按照最小的loss进行匹配,使得选择的预测框和真实框的loss最小,其余剩下的预测框就是背景

在这里插入图片描述
在这里插入图片描述
匹配成本既要考虑类别预测,也要考虑预测框和地面实况框的相似性
在这里插入图片描述类别概率
在这里插入图片描述检测框位置

在这里插入图片描述

这种寻找匹配的过程与现代检测器中用于将建议[37]或锚点[22]与地面实况对象相匹配的启发式分配规则的作用相同。主要区别在于,我们需要找到一对一的匹配,以实现无重复的直接集合预测。第二步是计算损失函数,即上一步中所有匹配对的匈牙利损失。我们对损失的定义与常见物体检测器的损失类似,即类预测的负对数似然和稍后定义的盒损失的线性组合:

解决的问题

注意力起到的作用:可以识别出遮挡区域
在这里插入图片描述
在这里插入图片描述

可视化解码器对每个预测对象的注意力(图像来自 COCO val set)。使用 DETR-DC5 模型进行预测。不同物体的注意力分数用不同颜色表示。解码器通常会关注物体的四肢,如腿部和头部。最佳彩色视图

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

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

相关文章

同步请求和异步请求

同步请求和异步请求是在网络编程中常用的两种通信模式,它们有以下区别: 同步请求: 在发送一个请求后,程序会一直等待服务器返回响应,期间无法进行其他操作。请求发出后,程序会阻塞在请求处,直…

Kubernetes 调度约束(亲和性、污点、容忍)

目录 一、Pod启动典型创建过程 二、调度流程 三、指定调度节点 1.使用nodeName字段指定调度节点 2.使用nodeSelector指定调度节点 2.1给对应的node节点添加标签 2.2修改为nodeSelector调度方式 3.通过亲和性来指定调度节点 3.1节点亲和性 3.2Pod亲和性与反亲和性 3.2…

在APP中如何嵌入小游戏?

APP内嵌游戏之所以能火爆,主要是因为互联网对流量的追求是无止境的,之前高速增长的红利期后,获取新的流量成为各大厂商的挑战,小游戏的引入,就是这个目的,为已有的产品赋能,抢占用户注意力和使用…

华为云零代码新手教学-体验通过Astro Zero快速搭建微信小程序

您将会学到 您将学会如何基于Astro零代码能力,DIY开发,完成问卷、投票、信息收集、流程处理等工作,还能够在线筛选、分析数据。实现一站式快速开发个性化应用,体验轻松拖拽开发的乐趣。 您需要什么 环境准备 注册华为云账号、实…

Beats:安装及配置 Metricbeat (一)- 8.x

在我之前的文章: Beats:Beats 入门教程 (一)Beats:Beats 入门教程 (二) 我详细描述了如何在 Elastic Stack 7.x 安装及配置 Beats。在那里的安装,它通常不带有安全及 Elasticsearc…

第十三章 SpringBoot项目(总)

1.创建SpringBoot项目 1.1.设置编码 1.4.导入已有的spring boot项目 2.快速搭建Restfull风格的项目 2.1.返回字符串 RestController public class IndexController {RequestMapping("/demo1")public Object demo1() {System.out.println("demo1 ran...."…

【Leetcode】98. 验证二叉搜索树

一、题目 1、题目描述 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例1: 输入:root = …

C#工程建立后修改工程文件名与命名空间

使用之前的项目做二次开发,项目快结束的时候,需要把主项目的名称修改成我们想要的。 之前从来没有这么干过,记录一下。 步骤如下: 1:打开vs2010项目解决方案,重命名,如下图所示: …

RabiitMq-4工作队列/消息应答

1.工作队列 工作机制类似一个生产者,多个消费者。工作队列采用轮训的机制,即工作线程一次只能处理一个消息,轮流处理 公共方法 public class MqUtiles {public static final String QUEUE_NAME"hello";public static Channel fu…

JVM---jvm里的内存溢出

目录 堆溢出 虚拟机栈和本地方法栈溢出(栈溢出很少出现) 方法区和运行时常量池溢出 本机内存直接溢出(实际中很少出现、了解即可) 堆溢出 堆溢出:最常见的是大list,list里面有很多元素 堆溢出该怎么解决…

Grafana监控 Redis Cluster

Grafana监控 Redis Cluster 主要是使用grafana来实现监控,grafana可以对接多种数据源,在官网中可以找到Redis数据源,需要安装redis data source插件。当然也可以利用Prometheus来做数据源,下面分别记录一下这两种数据源的安装配置…

什么是CSS Grid布局?什么是Flexbox布局?它们两者有什么不同?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ CSS Grid布局⭐ Flexbox布局⭐ 不同之处⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web…