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,一经查实,立即删除!

相关文章

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…

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中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件…

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

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

第P2周:Pytorch实现CIFAR10彩色图片识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目标 实现CIFAR-10的彩色图片识别实现比P1周更复杂一点的CNN网络 具体实现 &#xff08;一&#xff09;环境 语言环境&#xff1a;Python 3.10 编 译 器: …

2024年食堂采购系统源码技术趋势:如何开发智能的供应链管理APP

本篇文章&#xff0c;小编将与大家一同探讨2024年食堂采购系统的技术趋势&#xff0c;并提供开发更智能的供应链管理APP的策略。 一、2024年食堂采购系统的技术趋势 1.人工智能与机器学习的深度应用 在2024年&#xff0c;AI和机器学习在食堂采购系统中的应用将更加普遍。这些…

系统架构的演变

什么是系统架构&#xff1f; 系统架构是系统的一种整体的高层次的结构表示&#xff0c;它确定了系统的基本组织、组件之间的关系、组件与环境的关系&#xff0c;以及指导其设计和发展的原则。随着技术的发展和业务需求的增长&#xff0c;系统架构经历了从简单到复杂、从集中到…

【从零开始入门unity游戏开发之——C#篇04】栈(Stack)和堆(Heap),值类型和引用类型,以及特殊的引用类型string

文章目录 知识回顾一、栈&#xff08;Stack&#xff09;和堆&#xff08;Heap&#xff09;1、什么是栈和堆2、为什么要分栈和堆3、栈和堆的区别栈堆 4、总结 二、值类型和引用类型1、那么值类型和引用类型到底有什么区别呢&#xff1f;值类型引用类型 2、总结 三、特殊的引用类…

【C语言实现:用队列模拟栈与用栈模拟队列(LeetCode 225 232)】

LeetCode刷题记录 &#x1f310; 我的博客主页&#xff1a;iiiiiankor&#x1f3af; 如果你觉得我的内容对你有帮助&#xff0c;不妨点个赞&#x1f44d;、留个评论✍&#xff0c;或者收藏⭐&#xff0c;让我们一起进步&#xff01;&#x1f4dd; 专栏系列&#xff1a;LeetCode…

java jar包加密 jar-protect

介绍 java 本身是开放性极强的语言,代码也容易被反编译,没有语言层面的一些常规保护机制,jar包很容易被反编译和破解。 受classfinal&#xff08;已停止维护&#xff09;设计启发,针对springboot日常项目开发,重新编写安全可靠的jar包加壳加密技术,用于保护软件版权。 使用说…

Linux:Git

Git常见指令&#xff1a; git help xx_command git xx_command --help git --version 查看git版本git config --global user.name "xxx_name" 全局级别的签名设置&#xff0c;全局的放在本用 git config --global user.ema…

【WiFi】WiFi中RSSI、SNR、NF之间关系及说明

RSSI&#xff08;接收信号强度指示&#xff09; 定义&#xff1a; RSSI 是一个相对值&#xff0c;用于表示接收到的无线信号的强度。它通常由无线设备的硬件&#xff08;如无线网卡或无线芯片&#xff09;直接提供。 计算&#xff1a; RSSI 的计算通常是由设备的无线芯片完成的…