transformer目标检测开山之作detr

news2025/3/10 20:08:27

1. 将一个batch的图片输入backone获得feature。

(2,c,w,h)先输入resnet50中,得到(2,2048,w,h)。虽然这里channel不是256,但是在输入encoder之前会经过1x1卷积层,修改维度为256。

2. 计算位置编码。

当前batch图片经过归一化处理后,选取的是高和宽的最大值,所以边缘都用0填充。进行行累加和列累加,找出当前像素对应的X位置y位置对于其中每一个像素而言,前128维使用x位置进行编码,后128维使用y位置进行编码。 比如说一个像素的x、y位置信息为(15,16),那么前128维的分母设置与在128维的某个位置有关,分子设置即为当前x位置。后128维的分母设置与在128维的某个位置有关,分子设置即为当前y位置。

3. 输入transformer结构获得输出向量,用于计算分类概率和边界框回归参数。

将backbone得到的feature经过1x1卷积层,修改维度为256得到src。当前数据格式为(2,w * h,256)。

1. 对于Encoder,q和k设置为src + pos,v设置为src。每一层的输出src作为下一层的输入,pos保持不变。最后得到输出memory。

2. 对于Decoder,对于第一个自注意力层,输入为可学习的位置编码query(2,100,256)和全0矩阵tgt(2,100,256)。q和k设置为tgt + query,v设置为tgt。输出tgt。对于第二个注意力层,需要用到编码器的输出memory。q设置为tgt + query,k设置为memory + pos,v设置为memory。每一层的输出tgt (保存下来) 作为下一层的输入,query保持不变。最后输出hs(6,2,100,256)。

4. 计算分类概率和边界框回归参数,与GT进行匈牙利匹配,计算损失。

如果使用aux_loss,则对Decoder每一层的输出计算损失。首先得到分类概率(6,2,100,92)和边界框回归参数(6,2,100,4)。然后对将Decoder最后一层的输出和其他分开,分别计算。

1. 匈牙利匹配 对于(2,100,92)和(2,100,4)来说,变成(200,92)和(200,4),而对应的GT变成(20,)和(20,4),其中第一张图片3个box,第二张图片17个box。cost_class部分,选取对应GT的位置,取负号,这样降低损失才能保证预测概率最大。

cost_bbox和cost_giou部分,直接计算得到(200,20),可以认为每一个anchor与每一个GT都计算了。最后匈牙利匹配,得到indices为(tensor(( 1, 40, 59)), tensor((0, 2, 1]))和另外部分 (包含17个anchor与GT的索引)

2. 计算损失

loss_labels部分,我们已经有了分类概率(2,100,92),需要对所有anchor(正、负样本)都要计算这部分损失,每一个anchor要获得真正的GT。 首先,我们通过indices获得正样本anchor索引:tensor((0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1))、tensor(( 1, 40, 59, 4, 12, 23, 26, 36, 40, 53, 55, 56, 60, 61, 70, 79, 81, 86, 94, 98)),这样就可以在(2,100)这个维度中找到正样本anchor。然后,我们通过indices获得GT索引,对于batch中每一张图片求得真实label (20,)。最后,构建真实label矩阵(2,100),初始值为91,对应正样本anchor索引处赋值为真实label。通过分类概率的softmax (2,100,92) 和真实label矩阵 (2,100) 的one_hot计算损失。

loss_boxes部分,我们已经有了边界框回归参数(2,100,4),仅对有对应GT的anchor(正样本)计算这部分损失,仅正样本anchor要获得真正的GT。 首先,获得正样本anchor索引。然后,获得GT索引,对于batch中每一张图片求得真实box (20,4)。最后,我们选出对应正样本anchor索引处边界框回归参数 (20,4),与真实box计算L1损失和GIoU损失。

5. 预测时,计算每个框最大的分类概率,通过阈值筛选。

针对分类概率(2,100,92),首先在最后一个维度做softmax,然后选择最大值(score),最大值对应的索引(label)。针对边界框回归参数(2,100,4),首先根据target选取图片真实的W(2,)、H(2,),将(W,H,W,H)调整维度到(2,1,4),然后与边界框回归参数相乘后返回。最后选取一个阈值(0.7),筛选一下每张图片的100个框。

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

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

相关文章

pg mysql oracle 中的schema

1、schema。 pg中的schema表示当前db中数据库对象的命名空间(namespace),数据库对象包括但不限于表、函数、视图、索引等。 对于熟悉mysql的人来说,在第一次看到pg中的schema的概念时,可能会疑惑,schema不是表示database的吗&…

如何使用码匠连接 Elasticsearch

目录 在码匠中集成 Elasticsearch 在码匠中使用 Elasticsearch 关于码匠 Elasticsearch 是一个开源的分布式搜索和分析引擎,常用于处理大规模数据集的搜索、实时数据分析和数据挖掘任务。它支持多种数据源,包括关系型数据库(如 MySQL、Pos…

不想重写Dockerfile如何更改docker容器的挂载目录

一、问题 从网络上下载的很多Dockerfile或docker-compose文件进行启动容器的时候,部分重要的目录是依赖volumes挂载到容器内部的,如图 这就会出现一个问题,当我们想将容器打包,便于以后使用的时候,这部分挂载的文件是…

ArcGIS中地形渲染图制作技巧

01 概述 DEM数据作为GIS数据中常见的一种数据,经常都会使用到,除了用来生成等高线、高程点和做各种分析之外,生成地形渲染图也是常见的用途之一,这里给大家介绍一下ArcGIS中地形渲染图制作技巧,希望能够对大家有所帮…

领英开发外贸客户新方式—领英精灵

一、领英精灵是什么? 领英精灵是在LinkedIn领英这个全球最大的职业社交平台基础上研发出的一款工具软件,领英精灵最初研发定位是帮助那些想要在LinkedIn领英上挖掘开发客户需求的人群使用,但他的功能又不仅仅局限于外贸行业。干一行说一行&a…

Java知识复习(十一)RabbitMQ

1、RabbitMQ简介 RabbitMQ 是采用 Erlang 语言实现 AMQP(Advanced Message Queuing Protocol,高级消息队列协议)的消息中间件 2、RabbitMQ核心概念 RabbitMQ 整体上是一个生产者与消费者模型,主要负责接收、存储和转发消息 3、Producer和…

Zookeeper3.5.7版本——集群部署(linux环境-centos7)

目录一、三台服务器信息二、Zookeeper3.5.7官网下载2.1、官网下载地址2.2、下载步骤三、三台服务器都安装jdk11(Zookeeper需要jdk支持)四、Zookeeper3.5.7集群部署4.1、centos7虚拟机1 (192.168.136.27)服务器安装步骤4.1.1、解压…

day23_多线程基础

今日内容 上课同步视频:CuteN饕餮的个人空间_哔哩哔哩_bilibili 同步笔记沐沐霸的博客_CSDN博客-Java2301 零、 复习昨日 一、作业 二、进程与线程 三、创建线程 四、线程的API 五、线程状态 六、线程同步 零、 复习昨日 晨考 一、作业 见答案 二、进程与线程[了解] 一个进程就…

上海分时电价机制调整对储能项目的影响分析

安科瑞 耿敏花 2022年12月16日,上海市发改委发布《关于进一步完善我市分时电价机制有关事项的通知》(沪发改价管〔2022〕50号)。通知明确上海分时电价机制,一般工商业及其他两部制、大工业两部制用电夏季(7、8、9月)和冬季&#x…

MyBatis底层原理【源码运行时序图】

MyBatis初始化流程🛷 以下代码为例🎉 🎇可对应源码阅读 MyBatis初始化流程✨ #mermaid-svg-yoG1e8Dnp3UIAOUW {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-yoG1e8Dnp3UIAOU…

robotframework 常用关键字

ctrl shift 空格:自动补全关键字 F5:搜索关键字 F8:执行用例 ctrl shift s:保存整个工程 ctrl r:查看报告 ctrl 鼠标悬浮:显示关键字的信息 ctrl #:屏蔽代码 ctrl $:…

4-spring篇

ApplicationContext refresh的流程 12个步骤 prepareRefresh 这一步创建和准备了Environment对象,并赋值给了ApplicationContext的成员变量 要理解Environment对象的作用 obtainFreshBeanFactory ApplicationContext 里面有一个成员变量,Beanfactory b…

Navicat 现已支持 OceanBase 全线数据库产品

Navicat 作为 OceanBase 生态工具的合作伙伴,这是双方产品适配第三个里程碑。2022 年 7 月的首个里程碑,Navicat 实现了 OceanBase 社区版的功能性兼容。同年10 月,进一步实现了针对 OceanBase 企业版( 兼容 MySQL 模式&#xff0…

一文图解|I/O 调度层

当我们使用 read() 和 write() 系统调用向内核提交读写文件操作时,内核并不会立刻向硬盘发送 I/O 请求,而是先将 I/O 请求交给 I/O 调度层进行排序和合并处理。经过 I/O 调度层加工处理后,才会将 I/O 请求发送给块设备驱动进行最终的 I/O 操作…

【强烈建议收藏:MySQL面试必问系列之慢SQL优化专题】

一.知识回顾 学习本篇文章之前呢,我们可以先看一下【强烈建议收藏:MySQL面试必问系列之SQL语句执行专题】,看完这篇文章再来学习本篇文章可谓是如虎添翼。好的,那我们也不讲太多的废话,直接开始。 二.如何做慢SQL查询优化呢&…

《uniapp基础知识》学习笔记Day38-(Period2)全局文件一些常用的配置

如果进行开发的话,首先要配置路由页面 page.json 页面路由 pages.json 文件用来对 uni-app 进行全局配置,决定页面文件的路径、窗口样式、原生的导航栏、底部的原生tabbar 等。 {"pages": [{"path": "pages/component/index…

Centos7搭建DHCP

1.简介DHCP服务器又叫动态主机协议,由服务器划分一段地址池,客户端地址池中获取IP地址及掩码等信息端口:UDP 67/68主配置文件:/etc/dhcp/dhcpd.conf租约时间文件:/etc/sysconfig/dhcpd2.简单搭建DHCP服务PS&#xff1a…

离线数据仓库项目--技术选择

文章目录(一)技术选型1)数据采集工具2)数据存储3)数据计算4)数据可视化(二)整体架构设计(三)服务器资源规划(一)技术选型 1&#xff…

MySQL索引事务

1.索引1.1概念索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结果实现。(这里只用通俗的语言和图片进行介绍)1.2作用数据库中的表…

洗地机哪个牌子好?口碑最好的洗地机

选择洗地机,最关键的当然是清洁力度啦,这就要看洗地机的吸力如何了,一般情况下,吸力越大,越能够吸附顽固污渍,清洁力度就越好。然后杀菌功能也是必不可少的,毕竟是要清洁整个家的地面卫生&#…