DETR: End-to-End Object Detection with Transformers论文学习

论文地址:https://arxiv.org/pdf/2005.12872
代码地址:https://github.com/facebookresearch/detr
相关学习视频:https://space.bilibili.com/94779326/lists?sid=1531941

标题前言:

DETR 是 Facebook 团队于 2020 年提出的基于 Transformer 的端到端目标检测,是Transformer在目标检测的开山之作 – DEtection TRansformer。
相比于传统的RCNN、Fast-RCNN、Faster-RCNN、YOLO系列,DETR有以下几个优点:

  1. 无需NMS后处理2
  2. 无需设定anchor
  3. 高效并行预测。

整个由网络实现端到端的目标检测实现,大大简化了目标检测的 pipeline。DETR在COCO 数据集上效果与 Faster RCNN 相当,在大目标上效果比 FasterRCNN 好,且可以很容易地将 DETR迁移到其他任务例如全景分割。

1. 基本结构

DETR的总体框架如图,分为三个部分,分别是:

  1. 提取图像的特征的backbone
  2. 使用了transformer的编码器解码器
  3. prediction heads:FFN,前馈神经网络给出最后的类别和Box信息的预测

在这里插入图片描述
首先使用传统的卷积神经网络(CNN)主干网络来学习输入图像的二维表示。随后将特征信息加上位置编码送入encoder,这里的encoder进行特征序列构造。在decoder中会首先初始化100个向量(object queries),这些向量通不断学习encoder构造的特征序列,再经过prediction heads将解码器的每个输出嵌入传递给一个共享前馈网络(FFN),该网络会预测检测结果(类别和边界框)或者 “无目标” 类别。

2. 基础的backbone

CNN:图像经过 CNN 学习后,得到 (2048,H/32,W/32) 的输出,然后和 position encoding 相加,输入 transformer-encoder

3. Encoder和Decoder

不同于原始的 transformer ,DETR 在以下方面对其进行修改
1)positional embeding: DETR 的只作用于 encoder 的 Q 和 encoder-decoder K,原始 transformer 作用于所有的 Q、K、V
2)object queries:DETR 的 object queries 一次性全部输入 decoder,而原始 transformer 是通过 shifted right 一个一个地移动
在这里插入图片描述
借用一张知乎对比图:
在这里插入图片描述
Object queries 是 N 个 learnable embedding,训练刚开始时可以随机初始化,比如 transformer-encoder 输出是 (B, N’, C),则 Object queries 生成后得到大小为 (B, N, C)数,相当于用 Object queries 去查询 transformer-encoder 输出的目标类别和 box,N 一般取 100
训练时随机初始化 Object queries,训练过程中学习这个 embedding,训练完成后,embedding 确定下来,后续推理直接使用

4. FNN

prediction heads是DETR的分类器与回归器,其实就是对decoder提取出来的100个目标进行FFN操作,FFN采用全连接,经过FFN分别得到种类和边界框参数,将100个预测结构object predictions和真实框ground truth box之间通过匈牙利算法进行二分匹配,一个真实框只匹配一个预测结果,其它的预测结果作为背景进行拟合。最后通过反向传播来优化模型参数。

5. loss和匈牙利算法

集合到集合的预测看起来非常直接,但是在训练的过程就会遇到一个问题,就是如何把预测出来的100个框与ground truth做匹配,然后得到损失。DETR就非常暴力,直接利用pd(predicttion)与gt(ground truth)按照最小权重做一对一匹配,剩余的框全部当做背景处理。

6. 总结

在本文阅读过程中,写作其实还是很丝滑的,自己来回阅读,大致看懂了一些,剩下翻阅博客继续阅读。

  1. 目标检测 DETR(2020)
  2. 目标检测 Deformable DETR(2021)详细解读
  3. DETR:End-to-End Object Detection with Transformers
  4. 目标检测Python代码 目标检测detr

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

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

相关文章

LeetCode 24反转链表

单链表反转:详细解析与代码实现 在数据结构的学习过程中,链表是一个非常重要且有趣的部分,而单链表的反转操作更是常考的基础知识点。今天就来和大家详细讲讲如何实现单链表的反转,并通过代码示例来加深理解呀。 题目 给定单链…

Redis学习笔记之——学习计划

Redis——Remote Dictionary Server,开源、基于内存、速度快、key-value... Redis做为一个高性能的键值存储系统,广泛应用于缓存、会话存储、分布式锁以及其他需要快速访问的数据场景中。熟悉掌握redis,似乎已成为广大码农们必备的一项技能。…

网络安全教学博客(二):常见网络安全威胁剖析

在上一篇博客中,我们了解了网络安全的基础概念和重要性。今天,让我们深入探讨一下常见的网络安全威胁,以便我们能够更好地识别和防范它们。 恶意软件(Malware) 病毒(Virus):病毒是一…

Vue3状态管理:Pinia架构设计分析

Vue3状态管理:Pinia架构设计分析 介绍 在Vue.js开发中,状态管理是一个非常重要的部分。随着Vue3的发布,Pinia作为一种新的状态管理架构也相继问世。本文将对Pinia架构进行深入分析,帮助读者了解其设计原理、特点以及在实际项目中的应用。 架构…

【IDEA】启动报错

今天启动IDEA报错 报错信息: Cannot connect to already running IDE instance. Exception: Process 5,444 is still running 打开任务管理器,关掉进程ID5444的任务

socket编程UDP-实现停等机制(接收确认、超时重传)

在下面博客中,我介绍了利用UDP模拟TCP连接、按数据包发送文件的过程,并附上完整源码。 socket编程UDP-文件传输&模拟TCP建立连接脱离连接(进阶篇)_udp socket发送-CSDN博客 下面博客实现的是滑动窗口机制: sock…

uniapp小程序的锚点定位(将页面滚动到目标位置)

小程序中,a页面跳转到b页面,跳转后滚动定位到b页面的特定位置。 1.uni.pageScrollTo传递一个scrollTop参数可以滚动到特定位置。2.可以通过 uni.createSelectorQuery()等获取定位元素的位置信息。3.uni.getSystemInfoSync()获取设备的导航栏和状态栏高度…

php基础:命名空间

1.PHP 命名空间可以解决以下两类问题: 1.用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。 2.为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,以提高源代码的可读…

分布式 CAP理论 总结

前言 相关系列 《分布式 & 目录》《分布式 & CAP理论 & 总结》《分布式 & CAP理论 & 问题》 分布式 分布式的核心是将大型业务拆解成多个子业务以使之在不同的机器上执行。分布式是用于解决单个物理机容量&性能瓶颈问题而采用的优化手段&#xf…

python xpath解析笔记

与bs4的区别 bs4有很多属性和方法,而xpath只有一个方法,是通过不同的xpath表达式实现很多功能的。 html例子 定位 tree.xpath(‘/html/head/title’) 返回列表。 开头的斜杠表示从根节点遍历。 中间的斜杠表示层级。(相当于bs4中的>…

Q学习(Q-Learning)详解

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

树状数组详解

概述 树状数组(Binary Indexed Tree,简称BIT),是一种数据结构,用于处理区间查询和更新问题。它是一种可以高效地在对数级别时间复杂度内进行单点更新和区间查询的数据结构。树状数组通常用于解决以下两类问题&#xf…

freeswitch(开启支持MCU视频会议,使用mod_av模块)

亲测版本centos 7.9系统–》 freeswitch1.10.9 本人freeswitch安装路径(根据自己的路径进入) /usr/local/freeswitch/etc/freeswitch场景说明: 有些场景想使用视频会议MCU融合画面进行开会使用方法: 第一步:下载插件 yum install -y epel-release yum install

【大数据技术基础】【记录Ubuntu 16.04升级到18.04】Ubuntu的一个版本升级到另一个版本

在 Ubuntu 操作系统中进行软件更新和系统升级 Ubuntu Kylin 16.04 LTS 系统进行系统升级到 Ubuntu 18.04.6 LTS 版本 升级提示:系统弹出提示框,告知用户有新版本的 Ubuntu 可用,询问用户是否想要升级。 认证窗口:显示了一个认证…

这是一个vue3 + scss的数字滚动效果

介绍: 当数字变化时&#xff0c;只改变变化的数字位&#xff0c;其余的不变&#xff0c;可以递增、递减、骤变、负数也可以&#xff0c;但是样式要根据具体的项目需求去改&#xff1b; 效果1、增加数字&#xff1a; 效果2、减少数字&#xff1a; 使用方法&#xff1a; <te…

TortoiseGit的下载、安装和配置

一、TortoiseGit的简介 tortoiseGit是一个开放的git版本控制系统的源客户端&#xff0c;支持Winxp/vista/win7.该软件功能和git一样 不同的是&#xff1a;git是命令行操作模式&#xff0c;tortoiseGit界面化操作模式&#xff0c;不用记git相关命令就可以直接操作&#xff0c;读…

最新版Chrome浏览器加载ActiveX控件之Adobe PDF阅读器控件

背景 Adobe PDF阅读器控件是一个ActiveX控件&#xff0c;用于在Windows平台上显示和操作PDF文件。它提供了一系列方法和属性&#xff0c;可以实现对PDF文件的加载、显示、搜索、打印、保存等操作。 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件…

linux在没网的情况下如何校验时间 超详细拿来即用

一、没有校时服务器的话 1、手动修改 sudo date --set"2024-06-17 13:44:00"二、有校时服务器的话 1、手动校时 ntpdate 14.193.73.22、自动校时 写一个校时服务脚本 14.193.73.2 是校验时间服务器 #!/bin/sh while true dontpdate 14.193.73.2sleep 5;hwclock…

源码分析之Openlayers中的控件篇Control基类介绍

概述 Openlayers 中内置了9类控件&#xff0c;这9类控件都是基于Control类&#xff0c;而Control类则是继承于BaseObject类&#xff0c;如下图所示&#xff1a; 如上&#xff0c;这9类控件分别是&#xff1a; Attribution&#xff1a;属性控件FullScreen:全屏控件MousePositi…

计算机网络知识点全梳理(二.HTTP知识点总结)

目录 HTTP基本概念 HTTP优缺点 HTTP优点&#xff08;1.1&#xff09; HTTP缺点 HTTP与HTTPS HTTP 与 HTTPS 的区别 HTTPS 解决 HTTP 的哪些安全问题&#xff1f; HTTPS 如何解决安全问题&#xff1f; HTTPS 连接建立的过程&#xff1a; HTTP/1.1、HTTP/2、HTTP/3 演…