视觉大模型--deter的深入理解

但对于transformer用于目标检测领域的开创性模型,该模型言简意赅,但是但从论文理解,有很多细节都不清楚,尤其是解码器的query和二分图匹配(Bipartite Matching)和匈牙利算法(Hungarian Algorithm)相关,本文将根据代码详细介绍这一部分

原理

 大家最常见的就是上面两幅图,这也是deter模型的整体架构,原理大家可以参考网络其他问题,有很多,我这里就不细讲了, 但是我会突出讲解,整个过程到底是什么样。

解码器的query

 

  • Detection Transformer检测器是queries set(查询集合)到目标对象(object)的映射
  • queries分为内容查询query和一一对应位置查询query_pos,每组queries对应一个预测结果(类别和框的位置)
  • queries set的数量通常为100、300或900,远远少于之前密集预测(dense prediction)的工作
  • queries set与经过Backbone、Neck和Encoder提取的图片特征在Decoder中交互,并经过FFN输出结果
  • NMS-Free算法,输出结果(set prediction)无需NMS后处理。只有和label等量的queries会预测并直接输出目标的类别和框的位置,其余的gueries预测的结果为“没有目标”(no obiject) 

 解码器第一层:

 可以看到query进入self-Attention时全是0零向量且不具备学习权重,query_pos初始化为:

# posequery初始化
self.query_embedding = nn.Embedding(self.num_queries, self.embed_dims)# forward使用,每经过解码器的一层transformer层都会获取前一层的位置query的权重,这样位置随着每层训练都会进行更新,但是query在第一层为全0,在第一层结束后既不是全0向量了,他是前一层的输出
query_pos = self.query_embedding.weight # 这个是可学习的,每次训练都会更新参数# (num_queries, dim) -> (bs, num_queries, dim)query_pos = query_pos.unsqueeze(0).repeat(batch_size, 1, 1)query = torch.zeros_like(query_pos) # 这个是不可学习,每次推理直接为0,相当于内容embeding

总结,从图中和代码可以发现,位置query即query_pos 是可学习的,除了第一batch训练的第一层的权重是随机初始化的,其他层的query_pose都是更新学习的,而内容query即query每次迭代训练输入都是全0开始,然后经过第一层后就不在是全0了,而是计算出了值即内容,然后将当前层输出的作为下一层输入的query。通俗来讲,deter的解码器的query由两部分组成,分别为query_pos和query_content(即图片的self.self_attn(query=query,...)),此时query_pos负责预测位置,query_content负责关注图片的内容,也就是为什么只对query_pos进行梯度更新,因为这是需要学习,才能对位置越来越准,而query_content是最终的计算结果集对内容特征的输出,这不需要更新,因为决定内容输出的不是query_content,而是key和value,因此只需要更新输入计算的权重即可,这就是本文的一大核心观点,后续很多都模型都是对这里进行修改。

 

loss计算和权重更新

 从上面我们可以看到,解码器的每层输出的query都保留了,这为后面预测类别和坐标做准备,因为每层都进行预测和计算loss

 从上面代码可以发现,hidden_status就是记录的解码器的每层输出,同时每层的输出都是100个query,每个query是256维度的向量,然后每层每个query通过全连接层进行预测类别和坐标信息,而且每层的全连接层是相同的,即分别进行分类和回归坐标的全连接层是一样的。

后续拿到预测的分类数据和坐标数据后,先对坐标数据进行转换,因为上面的shape【6,2,100,4】中的4代表cx、cy、w、h,需要转为xyxy即左上角和右下角的点,同时把归一化坐标转为绝对坐标,这样才能通过计算预测结果和标签数据的1对1匹配。

分类代价:

 

 上面的三个代价计算结果都会存储到cost_list中,然后对该代价进行匈牙利配备后去最小的代价分配,进而确定使用哪个query进行预测前景,其他query预测背景

 通过上面的匈牙利匹配我们找到了使用哪个query预测,后续就是使用这个query的分类预测结果和位置预测结果和对应的标签计算损失函数了:

其他的损失例如位置损失和iou损失同样的进行计算即可:

 以上就是deter的主要内容。

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

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

相关文章

32. UE5 RPG使用增强输入激活GameplayAbility(二)

在上一篇文章中,我们实现了Tag和InputAction的数据对应,后面,我们会通过InputAction触发对应的Tag,然后在GameplayAbility身上设置对应的Tag,然后通过Tag遍历角色身上的所有应用的技能去激活。为了实现这个功能&#x…

精读 Generating Mammography Reports from Multi-view Mammograms with BERT

精读(非常推荐) Generating Mammography Reports from Multi-view Mammograms with BERT(上) 这里的作者有个叫 Ilya 的吓坏我了 1. Abstract Writing mammography reports can be errorprone and time-consuming for radiolog…

基于单片机的数字万用表设计

**单片机设计介绍,基于单片机的数字万用表设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的数字万用表设计概要是关于使用单片机技术来实现数字万用表功能的一种设计方案。下面将详细概述该设计的各个…

【性能测试】接口测试各知识第2篇:学习目标,1. 理解接口的概念【附代码文档】

接口测试完整教程(附代码资料)主要内容讲述:接口测试,学习目标学习目标,2. 接口测试课程大纲,3. 接口学完样品,4. 学完课程,学到什么,5. 参考:,1. 理解接口的概念。学习目标,RESTFUL1. 理解接口的概念,2.什么是接口测试…

ChatGPT 的行家指南

原文:An Insider’s Guide to using ChatGPT 译者:飞龙 协议:CC BY-NC-SA 4.0 介绍 你是否厌倦了花费无数小时为你的业务创建内容?从博客文章到社交媒体更新,从电子书内容到电子邮件,这可能是一个耗时的过…

如何保持数据一致性

如何保持数据一致性 数据库和缓存(比如:redis)双写数据一致性问题,是一个跟开发语言无关的公共问题。尤其在高并发的场景下,这个问题变得更加严重。 问题描述: 1.在高并发的场景中,针对同一个…

基于java+SpringBoot+Vue的学生心理咨询评估系统设计与实现

基于javaSpringBootVue的学生心理咨询评估系统设计与实现 开发语言: Java 数据库: MySQL技术: Spring Boot MyBatis工具: IDEA/Eclipse、Navicat、Maven 系统展示 后台展示 用户管理模块:管理员可以查看、添加、编辑和删除用户信息。 试题管理模块&#xff1a…

Qt + VS2017 创建一个简单的图片加载应用程序

简介: 本文介绍了如何使用Qt创建一个简单的图片加载应用程序。该应用程序可以打开图片文件并在界面上显示选定的图片,并保存用户上次选择的图片路径。 1. 创建项目: 首先,在VS中创建一个新的Qt Widgets应用程序项目,并…

LeetCode 1379.找出克隆二叉树中的相同节点:二叉树遍历

【LetMeFly】1379.找出克隆二叉树中的相同节点:二叉树遍历 力扣题目链接:https://leetcode.cn/problems/find-a-corresponding-node-of-a-binary-tree-in-a-clone-of-that-tree/ 给你两棵二叉树,原始树 original 和克隆树 cloned&#xff0…

Golang | Leetcode Golang题解之第3题无重复字符的最长子串

题目: 题解: func lengthOfLongestSubstring(s string) int {// 哈希集合,记录每个字符是否出现过m : map[byte]int{}n : len(s)// 右指针,初始值为 -1,相当于我们在字符串的左边界的左侧,还没有开始移动r…

CMD 命令行进入到电脑硬盘的某个目录的几种方式

本文介绍几种 cmd 命令行进入到电脑硬盘的某个目录的几种方式。 1、在具体文件目录地址栏输入 cmd 回车 这是最快的、最牛的方式,没有之一。 比如:我想进入一个层级很深的文件目录,直接打开在那个目录,把地址栏信息删除清空&am…

FLink学习(三)-DataStream

一、DataStream 1&#xff0c;支持序列化的类型有 基本类型&#xff0c;即 String、Long、Integer、Boolean、Array复合类型&#xff1a;Tuples、POJOs 和 Scala case classes Tuples Flink 自带有 Tuple0 到 Tuple25 类型 Tuple2<String, Integer> person Tuple2.…

【C++进阶】带你手撕红黑树(红与黑的爱恨厮杀)

&#x1fa90;&#x1fa90;&#x1fa90;欢迎来到程序员餐厅&#x1f4ab;&#x1f4ab;&#x1f4ab; 主厨&#xff1a;邪王真眼 主厨的主页&#xff1a;Chef‘s blog 所属专栏&#xff1a;c大冒险 总有光环在陨落&#xff0c;总有新星在闪烁 引言&#xff1a; 之前我们…

vivado 串行矢量格式 (SVF) 文件编程

串行矢量格式 (SVF) 文件编程 注释 &#xff1a; 串行矢量格式 (SVF) 编程在 Versal ™ 器件上不受支持。 对 FPGA 和配置存储器器件进行编程的另一种方法是通过使用串行矢量格式 (SVF) 文件来执行编程。通过 Vivado Design Suite 和 Vivado Lab Edition 生成的 SVF …

八数码(bfs做法)非常详细,适合新手服用

题目描述&#xff1a; 在一个 33 的网格中&#xff0c;1∼8这 8 个数字和一个 x 恰好不重不漏地分布在这 33 的网格中。 例如&#xff1a; 1 2 3 x 4 6 7 5 8在游戏过程中&#xff0c;可以把 x 与其上、下、左、右四个方向之一的数字交换&#xff08;如果存在&#xff09;。 我…

JS-11A/11时间继电器 板前接线 JOSEF约瑟

系列型号&#xff1a; JS-11A/11集成电路时间继电器&#xff1b;JS-11A/12集成电路时间继电器&#xff1b; JS-11A/13集成电路时间继电器&#xff1b;JS-11A/136集成电路时间继电器&#xff1b; JS-11A/137集成电路时间继电器&#xff1b;JS-11A/22集成电路时间继电器&#…

Folder Icons for Mac v1.8 激活版文件夹个性化图标修改软件

Folder Icons for Mac是一款Mac OS平台上的文件夹图标修改软件&#xff0c;同时也是一款非常有意思的系统美化软件。这款软件的主要功能是可以将Mac的默认文件夹图标更改为非常漂亮有趣的个性化图标。 软件下载&#xff1a;Folder Icons for Mac v1.8 激活版 以下是这款软件的一…

亚马逊自动养号软件新手必读:养号过程中的关键注意事项

亚马逊买家号想要养号效果好&#xff0c;需要重点注意以下4点: 1、前期的准备工作:确保账号登陆的环境是安全的&#xff0c;最好就是用的家庭IP。然后是FBA收货 地址&#xff0c;固定的收货地址有利于账号的安全稳定性&#xff0c;还有一个就是确定安全的成交付款方式&#xf…

网络协议栈--数据链路层

目录 对比理解“数据链路层”和“网络层”一、认识以太网1.1 以太网帧格式1.2 认识MAC地址1.3 对比理解MAC地址和IP地址1.4 认识MTU1.5 MTU对IP协议的影响1.6 MTU对UDP协议的影响1.7 MTU对于TCP协议的影响1.8 查看硬件地址和MTU 二、ARP协议2.1 ARP协议的作用2.2 ARP协议的工作…

Springboot传参要求

传参的参数名称必须与Set方法的参数名字相同 &#xff0c;不然会报错。