DETR 个人理解

DETR 个人理解

目录

DETR 个人理解

概念说明

transformer网络结构

整体流程

损失计算

整体理解

结果说明

论文

代码

参考链接


个人拙见,仅供参考,欢迎指正交流

这篇论文还是挺重要的,因为是transforms用于目标检测的第一篇论文,之后很多的论文都是再此基础上写的,大体的流程是相近的。

概念说明

DETR的输入是单张图像,输出是此图像的检测结果。

positional encoding 是对像素在图像中位置进行的一个编码,方法有很多,也可以参考论文Attention Is All You Need

object queries 这个东西有些类似有anchor目标检测里的anchor,就是蒙的框,论文中对应的是初始的N个输出的y

FFN 就是前馈神经网络,个人理解就是全连接层或者MLP

transformer网络结构

transformer详细的网络结构见下图,其实是有N个Encoder和M个decoder,并且每一个decoder都可以进行输出,然后去算损失

至于为什么每一个中间的decoder都可以进行输出,去算损失??

个人理解这个位置就像是啥呢,就像是你想让你的儿子考清华,最后一个decoder对应高考。你儿子要想考上清华,最稳妥的一个形式就是,你儿子从小到大每一次考试都能考第一,这样他最后高考时,考上清华的可能性才是最高。同理,你想要你最后一个decoder输出的结果最好,最稳妥的方式就是之前每一个decoder输出的结果都很好。

整体流程

单张图像进来之后首先经过一个backbone,提取图像特征,然后和positional encoding提取到的特征相结合,这样得到的特征图既有他在图像中的位置信息,又有他附近的一片像素信息。然后将这个特征图去过transformer的encoder,得到一个新的特征图,这个位置得到的东西其实是Multi-Head Attention里需要的K和V。object queries进来之后首先经过一个Multi-Head Self-Attention,就是你蒙的框不一定准,你自己先反思反思,学习学习,不要跟图像特征参乎,自己学学怎么用图像特征。object queries自己卷积完之后作为Multi-Head Attention里需要的Q,进行输出。最后在Multi-Head Attention里图像生成的特征K、V和你想让图像生成的特征结果Q相结合了,就能生成预测结果了。

损失计算

有预测结果了,然后我们还有真实标签,这个时候就可以计算损失了。

object queries这个位置我们蒙了N个框,最后Transformer decoder就会输出N个预测结果。N是一个远大于图像中可能具有最多目标数的一个数,论文中取了100。我们预测了N个框,但是我图像中的目标可能没有这么多,那怎么办呢,我向图像中补背景,让框的类别是没有意义的背景,这样你预测框的数量就和真实框一样多了,也解决了有的图像目标多,有的图像目标少的问题,你目标再多也不可能比N多。然后我让预测的N个框和真实的N个框去做1对1的匹配,就像是双射,相互对应并且唯一。匹配的算法是多目标最优匹配的匈牙利算法,最后使用相互匹配上的框去计算损失。

整体理解

使用transformer去学习,就像是啥呢,就像是你要上大学。开始你也不知道自己的天赋咋样,自己能学成啥样,然后就默默给自己定一个目标,比如说是辽宁大学,辽宁大学就对应transformer里的object queries,就是一个初始的目标。

你有了初始目标之后,没开始上小学之前,你啥也不懂,也不知道辽宁大学咋样,你就问你爸说:我想给自己定一个目标大学,你觉得辽宁大学咋样。结果你爸说,你爸我是东北大学毕业的,你敢定辽宁大学我就打死你。然后你就学到了一些关于大学的信息,觉得自己也应该有这个天赋,把初始的大学目标定在了东北大学,这个对初始目标修改的一个过程就对应decoder里object queries进来之后首先经过的Multi-Head Self-Attention。

然后你就开始学习了,这个学习的过程就对应transformer里的encoder(其实还有backbone,忽略这个位置吧)

一个学期上完,你学到了很多知识,你也不知道自己学的对不对,不知道自己定的目标合不合理,就需要进行一次期末考试,这个考试呢就对应decoder里的Multi-Head Attention和之后的过程。

考完试呢你只有一个考试成绩,但是这个成绩并不能完全代表你学的咋样,比如说试卷特别难,大家都考60,结果你考了80,或者说试卷特别简单,大家都考90,结果你考了80,你能不能上东北大学,严格意义上说并不取决于你考了多少分,而取决于你在全省的排名,这个排名呢就对应transformer里的损失,这个排名呢就会定义你这一年学的咋样。

开始你也不太会学习,你的排名就没有很好,但是你经过排名呢,就对自己过去的一些学习方法和自己定的这个目标就有数,然后呢你就不断的优化自己的学习方法,让自己学的更好,这个位置就是优化encoder的过程。

你通过优化自己的学习方法使自己的排名提高了,你发现你开始定的大学不合理,你完全可以定一个更好的大学,定一个更好的目标,这个位置就对应decoder中优化object queries的过程。

你通过不断地优化自己的学习方法,和自己想要考取的目标大学,不断地进步,最终你把目标定在了清华大学,最后高考就对应transformer里的最后一个decoder,至于你能不能考上,就取决于你最后一个decoder出来的模型收不收敛了。

结果说明

经过训练之后,最终的object queries结果如下图

这个位置怎么理解呢,就是anchors蒙的是一个框,object queries蒙的是一张图像的所有框,框数不限,蒙了100种可能

论文

https://arxiv.org/abs/2005.12872

代码

https://github.com/facebookresearch/detr

参考链接

Attention Is All You Need

https://arxiv.org/abs/1706.03762

Attention Is All You Need 英文讲解

The Illustrated Transformer – Jay Alammar – Visualizing machine learning one concept at a time.

Attention Is All You Need 中文讲解

详解Transformer (Attention Is All You Need) - 知乎

Attention

史上最小白之Attention详解_target attention-CSDN博客

Self-Attention

动图轻松理解Self-Attention(自注意力机制) - 知乎

transformer

史上最小白之Transformer详解_transformer最小白-CSDN博客

B站论文讲解视频

二、transformer核心项目-DeformableDetr算法解读_哔哩哔哩_bilibili

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一、Linux基础

一、Linux 1.1 Linux 的应用领域 1.1.1 个人桌面领域的应用 此领域是 Linux 比较薄弱的环节但是随着发展,近几年 linux 在个人桌面领域的占有率在逐渐提高 1.1.2 服务器领域 linux 在服务器领域的应用是最高的 linux 免费、稳定、高效等特点在这里得到了很好的…

OpenGL:关于渲染窗口在主屏和扩展屏上纹理贴图不一致的问题

自己写了一个例子,将图像纹理贴图到窗口,并且可以设置窗口的起始位置。 原始图像如下 当设置渲染窗口在主屏时,渲染的结果如下 没什么问题。 但是当设置窗口显示在扩展屏时,效果如下 可以看出纹理没有显示完整 网上找一下&…

Spring Boot整合Druid(druid 和 druid-spring-boot-starter)

引言 在现代的Web应用开发中,高性能的数据库连接池是确保应用稳定性和响应性的关键因素之一。Druid是一个开源的高性能数据库连接池,具有强大的监控和统计功能,能够在Spring Boot应用中提供出色的数据库连接管理。本文将研究在Spring Boot中…

【双端队列】【维护单调队列】Leetcode 239 滑动窗口最大值【难】

【双端队列】Leetcode 239 滑动窗口最大值 双端队列的操作解法1 利用双端队列实现单调队列 ---------------&#x1f388;&#x1f388;题目链接 Leetcode 239 滑动窗口最大值&#x1f388;&#x1f388;------------------- 双端队列的操作 创建双端队列&#xff1a;Deque<…

解决字符串类型转数字类型相加结果异常问题

js字符串类型转换数字类型有七种方法&#xff0c;分别是parseInt()&#xff0c;parseFloat()&#xff0c;Math.floor()&#xff0c;乘以数字&#xff08;*1&#xff09;&#xff0c;Number()&#xff0c;双波浪号 (~~number)&#xff0c;一元运算符&#xff08;number&#xff…

npm run dev 启动vue的时候指定端口

使用的是 Vue CLI 来创建和管理 Vue 项目&#xff0c; 可以通过设置 --port 参数来指定启动的端口号。以下是具体的步骤&#xff1a; 打开命令行终端 进入您的 Vue 项目目录 运行以下命令&#xff0c;通过 --port 参数指定端口号&#xff08;例如&#xff0c;这里设置端口号…

学习c语言,函数指针数组

上一个函数指针修改成函数数组

深入详解使用 RabbitMQ 过程中涉及到的多个细节问题(面试可用)

目录 1、基础类问题 2、cluster 相关问题 3、综合性问题 4、参考资料 C软件异常排查从入门到精通系列教程&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xff0c;持续更新...&#xff09;https://blog.csdn.net/chenlycly/article/details/125529931C/C基础与进阶&…

三大3D引擎对比,直观感受AMRT3D渲染能力

作为当前热门的内容呈现形式&#xff0c;3D已经成为了广大开发者、设计师工作里不可或缺的一部分。 用户对于3D的热衷&#xff0c;源于其带来的【沉浸式体验】和【超仿真视觉效果】。借此我们从用户重点关注的四个3D视觉呈现内容&#xff1a; 材质- 呈现多元化内容水效果- 展…

Java开发的审批流系统,前端使用vue,支持常态化工作审批流程

一、项目形式 springbootvueactiviti集成了activiti在线编辑器&#xff0c;快速开发平台&#xff0c;可插拔工作流服务。 二、项目介绍 本项目拥有用户管理&#xff0c;部门管理&#xff0c;代码生成&#xff0c;系统监管&#xff0c;报表&#xff0c;大屏展示&#xff0c;业…

使用C语言实现模型的推理(一)

使用C语言实现模型的推理&#xff08;一&#xff09; WHY&#xff1f;思路整理从怎么把大象放到冰箱里开始怎么让模型推理跑起来 生成一个模型理清楚算子之间的依赖关系获取tensor信息获取依赖信息获取模型的运算图拓扑排序 TO DO其他biasDELEGATE WHY&#xff1f; 现在推理框…

2023预警名单

中国科学院文献情报中心期刊分区表-预警名单 2023年预警名单 2021年预警名单 官方没有2022年预警名单 2020年预警名单 每一年都有变化&#xff0c;今年在预警名单&#xff0c;明年可能就不在预警名单了&#xff0c;具体看学校要求&#xff0c;以及入学年份。

定义域【高数笔记】

【定义域】 1&#xff0c;{知识点} 对于一个函数&#xff0c;f(x)&#xff0c;"f"是起到两个作用&#xff0c;第一&#xff0c;是对自变量的范围的约束&#xff0c;第二&#xff0c;是对运算的约束&#xff0c;同一个"f" 就有同一个约束效果 2&#xff0c;…

离散数学学习要点——命题逻辑

文章目录 数理逻辑命题逻辑命题命题的种类命题的表示 逻辑连接词否定联结词合取联结词∧析取联结词∨或异或 条件➡等价&#xff08;双条件&#xff09;联结词↔联结词真值表 命题逻辑中的命题的符号化命题公式及其真值表命题公式真值表 命题公式的等价重言式与重言蕴含式重言式…

TypeScript依赖注入框架Typedi的使用、原理、源码解读

简介 typedi是一个基于TS的装饰器和reflect-metadata的依赖注入轻量级框架&#xff0c;使用简单易懂&#xff0c;方便拓展。 使用typedi的前提是安装reflect-metadata&#xff0c;并在项目的入口文件的第一行中声明import ‘reflect-metadata’&#xff0c;这样就会在原生的R…

大数据工作岗位需求分析

前言&#xff1a;随着大数据需求的增多&#xff0c;许多中小公司和团队也新增或扩展了大数据工作岗位&#xff1b;但是却对大数据要做什么和能做什么&#xff0c;没有深入的认识&#xff1b;往往是招了大数据岗位&#xff0c;搭建起基础能力后&#xff0c;就一直处于重复开发和…

分类预测 | Matlab实现ISSA-SVM基于多策略混合改进的麻雀搜索算法优化支持向量机的数据分类预测

分类预测 | Matlab实现ISSA-SVM基于多策略混合改进的麻雀搜索算法优化支持向量机的数据分类预测 目录 分类预测 | Matlab实现ISSA-SVM基于多策略混合改进的麻雀搜索算法优化支持向量机的数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 基于多策略混合改进的麻…

录课视频太大怎么办?3种方法一键瘦身~

录制视频是现代人常用的一种记录生活的方式&#xff0c;但是视频文件大小往往会很大&#xff0c;不利于存储和分享。为了解决这个问题&#xff0c;我们需要使用视频压缩软件来压缩视频文件大小&#xff0c;以便更方便地存储和分享。 方法一&#xff1a;嗨格式压缩大师 嗨格式压…

Lucas求大组合数C(n,m)%p

将大组合数C&#xff08;n,m&#xff09;%p分解为小组合数C&#xff08;n,m&#xff09;%p乘积的模&#xff0c;n<10^18,m<10^18。 其中求解小组合数可以根据定义式计算&#xff08;质因子分解&#xff09;&#xff0c;也可以通过定义式的变形计算&#xff08;逆元&…

如何使用Portainer部署web站点并实现无公网ip远程访问

文章目录 前言1. 安装Portainer1.1 访问Portainer Web界面 2. 使用Portainer创建Nginx容器3. 将Web静态站点实现公网访问4. 配置Web站点公网访问地址4.1公网访问Web站点 5. 固定Web静态站点公网地址6. 固定公网地址访问Web静态站点 前言 Portainer是一个开源的Docker轻量级可视…