使用transformers进行端到端的目标检测

目录

目标检测的旧方法

使用transformers进行端到端的目标检测

抛去了目标检测旧的方法

网络架构

Transformer encoder

Transformers and Parallel Decoding

注意力起到的作用

使用Hungarian algorithm算法完成匹配

在使用transformers的端到端目标检测中,匈牙利算法被应用于处理目标检测的预测结果和真实标签之间的匹配问题。该算法帮助确定预测框与真实框之间的最佳匹配,并将它们关联起来

代码实现


目标检测的旧方法

(1)、fast-rcnn系列,各种proposal方法

(2)、YOLO系列,都是基于anchor这种方式

(3)、NMS那也一定用的上,输出结果肯定要过滤一下

使用transformers进行端到端的目标检测

抛去了目标检测旧的方法

“Our approach streamlines the detection pipeline, effectively removing the need for many hand-designed components like a non-maximum suppression procedure or anchor generation that explicitly encode our prior knowledge about the task.” (Carion 等, 2020, p. 1)

网络架构

“The overall DETR architecture is surprisingly simple and depicted in Figure 2. It contains three main components, which we describe below: a CNN backbone to extract a compact feature representation, an encoder-decoder transformer, and a simple feed forward network (FFN) that makes the final detection prediction.” (Carion 等, 2020, p. 6)

Transformer encoder

“First, a 1x1 convolution reduces the channel dimension of the high-level activation map f from C to a smaller dimension d. creating a new feature map z0 ∈ Rd×H×W . The encoder expects a sequence as input, hence we collapse the spatial dimensions of z0 into one dimension, resulting in a d×HW feature map. Each encoder layer has a standard architecture and consists of a multi-head self-attention module and a feed forward network (FFN). Since the transformer architecture is permutation-invariant, we supplement it with fixed positional encodings [31,3] that are added to the input of each attention layer. We defer to the supplementary material the detailed definition of the architecture, which follows the one described in [47].” (Carion 等, 2020, p. 6)

首先降低通道数,将得到的三维数据变成一维数据,变成序列数据,然后输入到编码器中

也就是说Encoder完成的任务是得到各个目标的注意力结果(只关注自己需要关注的部分),准备好特征,等待解码器来选

Transformers and Parallel Decoding

“We also combine transformers and parallel decoding for their suitable trade-off between computational cost and the ability to perform the global computations required for set prediction” (Carion 等, 2020, p. 4) 🔤我们还将变压器和并行解码结合起来,以便在计算成本和执行集合预测所需的全局计算能力之间进行适当的权衡🔤

object queries是核心,让它学会如何从原始特征中找到物体的位置

注意力起到的作用

即使目标物体之间遮挡很严重,照样可以学习(注意颜色)

所以使用注意力机制可以很好地解决目标重叠问题

使用Hungarian algorithm算法完成匹配

匈牙利算法(Hungarian algorithm),也被称为Kuhn-Munkres算法,是一种用于解决最佳分配问题的优化算法。它被广泛应用于任务分配、资源分配、最大化利润等问题。

算法的主要目标是在一个二维矩阵中找到一组元素,使得每一行和每一列中的元素都只能在选定的组合中出现一次,并且这组元素的和达到最大或最小。

以下是匈牙利算法的详细步骤:

1. 创建原始二维矩阵,其中包含待分配任务/资源的成本或收益。

2. 对于二维矩阵的每一行,找到最小值,并在每一行中将该最小值减去。

3. 对于二维矩阵的每一列,找到最小值,并在每一列中将该最小值减去。

4. 遍历二维矩阵中的每个零元素,将每个零元素的行和列标记为“已访问”。

5. 如果找到一组已访问的行和列,使得它们的零元素形成一个完美匹配(即每一行和每一列只有一个标记的零元素),则此时已找到最佳的分配。如果找不到,将进行下一步。

6. 标记未访问的行。

7. 将已访问的列中的零元素关联到已标记的行,并尝试通过调整标记来形成更多的完美匹配。

8. 重复步骤5-7,直到找到最佳的分配。

通过执行以上步骤,匈牙利算法能够找到最佳任务分配或资源分配,使得成本最小化或收益最大化

在使用transformers的端到端目标检测中,匈牙利算法被应用于处理目标检测的预测结果和真实标签之间的匹配问题。该算法帮助确定预测框与真实框之间的最佳匹配,并将它们关联起来

1. 首先,通过目标检测网络对输入图像进行前向传播,得到预测框的边界框坐标和类别概率。

2. 接下来,我们获取真实标签中的边界框信息和类别。

3. 创建一个二维矩阵,其中的行表示预测框,列表示真实框,矩阵的每个元素表示两个框之间的匹配得分。匹配得分可以根据预测框与真实框之间的IoU(交并比)计算得到。

4. 对于矩阵的每一行,使用匈牙利算法找到与该行对应的最佳匹配,即在每一行找到与当前预测框具有最大IoU的真实框,并将其匹配得分记录下来。

5. 接着,在矩阵的每一列中,找到与该列对应的最佳匹配,即在每一列找到与当前真实框具有最大IoU的预测框,并将其匹配得分记录下来。

6. 然后,根据前面找到的最佳匹配,使用最小权匹配算法将矩阵中的其余元素设置为负无穷。这样可以确保每个预测框和真实框都只被匹配一次。

7. 最后,根据匈牙利算法得到的最佳匹配,将预测框和真实框进行关联,形成最终的目标检测结果。匹配得分较高的预测框和真实框之间建立关联,从而得到目标检测中的最佳匹配。

通过使用匈牙利算法,我们可以在端到端的目标检测中得到最佳的预测框与真实框的匹配,提高检测算法的准确性和鲁棒性。这种匹配方式可以将预测框与真实框进行关联,进而进行目标的检测和识别

代码实现

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

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

相关文章

【开发篇】七、RedisTemplate与StringRedisTemplate + Jedis与Lettcus

文章目录 1、RedisTemplate详解2、常用方法3、关于IDEA的报黄4、RedisTemplate和StringRedisTemplate的区别5、如何通用RedisTemplate和StringRedisTemplate6、Jedis7、Jedis的连接池8、封装Jedis工具类8、RedisTemplate底层实现技术切换 1、RedisTemplate详解 RedisTemplate是…

spark Structured报错解决

报错,不想看原因的直接去解决方案试试 Exception in thread "main" java.lang.IllegalArgumentException: Pathname /C:/Users/Administrator/AppData/Local/Temp/1/temporary-611514af-8dc5-4b20-9237-e5f2d21fdf88/metadata from hdfs://master:8020/C…

C语言的stdio.h的介绍

C语言的stdio.h的介绍 C语言的stdio.h的介绍 C语言的stdio.h的介绍C语言stdio.h的介绍 C语言stdio.h的介绍 这个含义是导入标准输入输出库 包含头文件.h&#xff0c;std标准库&#xff0c;io是input output输入输出库 <>代表系统库&#xff0c;自定义的话用""…

Ingress Controller

什么是 Ingress Controller &#xff1f; 在云原生生态中&#xff0c;通常来讲&#xff0c;入口控制器( Ingress Controller )是 Kubernetes 中的一个关键组件&#xff0c;用于管理入口资源对象。 Ingress 资源对象用于定义来自外网的 HTTP 和 HTTPS 规则&#xff0c;以控制进…

解决typescript报错:不能将类型xxx分配给类型xxx

现象&#xff1a; 这种情况是因为组件传参时&#xff1a; 等号左右两边的数据类型不能严格匹配一致造成的 等号左边data, 查看一下被传参的子组件ProductList的内部data属性: 可以看到data的类型是 &#xff1a; Product[] 而右边的shoppingCartItems来自于&#xff1a; redu…

作为一名独立开发者,如何获取客户?

很多程序员想成为一名独立开发者&#xff0c;从事自由职业&#xff0c;最大的困难在于如何赚钱&#xff0c;进一步来说&#xff0c;就是如何找到自己的客户&#xff0c;有很多开发者拥有丰富的经验&#xff0c;优秀的能力&#xff0c;但无法吸引客户。这篇文章的灵感正是为此而…

精通git,没用过git cherry-pick?

前言 git cherry-pick是git中非常有用的一个命令&#xff0c;cherry是樱桃的意思&#xff0c;cherry-pick就是挑樱桃&#xff0c;从一堆樱桃中挑选自己喜欢的樱桃&#xff0c;在git中就是多次commit中挑选一个或者几个commit出来&#xff0c;也可以理解为把特定的commit复制到…

Spring整合第三方框架-MyBatis原始操作代码

建议自己写一下 实体类&#xff0c;用于封装数据库数据 package com.example.pojo;import java.util.Date;public class Emp {private Integer id;private String username;private String password;private String name;private Integer gender;private String image;privat…

网络安全内网渗透之DNS隧道实验--dnscat2直连模式

目录 一、DNS隧道攻击原理 二、DNS隧道工具 &#xff08;一&#xff09;安装dnscat2服务端 &#xff08;二&#xff09;启动服务器端 &#xff08;三&#xff09;在目标机器上安装客户端 &#xff08;四&#xff09;反弹shell 一、DNS隧道攻击原理 在进行DNS查询时&#x…

Redis可视化工具-Another Redis Desktop Manager 安装

Another Redis DeskTop Manager 是 Redis 可视化管理工具&#xff0c;体积小&#xff0c;完全免费。最重要的是稳定&#xff0c;而且操作简单、方便。 目录 一、下载安装 下载 安装 二、简单使用 连接 新增key 三、springboot整合redis 前期准备 一、下载安装 下载 下载…

ARM IIC总线实现温湿传感器

IIC.h #ifndef __IIC_H__ #define __IIC_H__ #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_rcc.h"/* 通过程序模拟实现I2C总线的时序和协议* GPIOF ---> AHB4* I2C1_SCL ---> PF14* I2C1_SDA ---> PF15** */#define SET_SDA_OUT do{G…

数据库选型参考

文章目录 前言嵌入式数据库数据库服务器PostgreSQL和MySQL的对比 NoSQL国产数据库阿里PolarDB腾讯TDSQL阿里OceanBase和PolarDB的区别 华为GaussDb 前言 DB-Engines Ranking 会根据受欢迎程度对数据库管理系统进行排名&#xff0c;排名每月更新一次。 分为关系型数据库、Key-V…

SpringMVC 学习(七)JSON

9. JSON 9.1 简介 JSON&#xff08;JavaScript Object Notation&#xff0c;JS 对象标记&#xff09;是一种轻量级数据交换格式&#xff0c;采用独立于编程语言的文本格式储存和表示数据&#xff0c;易于机器解析和生成&#xff0c;提升网络传输效率。 任何 JavaScript 支持…

9.26 牛客Java题库day 3

1.类变量&#xff08;static&#xff09;在不设置初始值时,会进行默认值赋值&#xff0c;而局部方法中声明的变量则必须进行初始化&#xff0c;它不会进行默认值赋值 2.了解forward,redirect: URL:统一资源定位符&#xff0c;又是也被俗称为网页地址 http://www.runoob.com/…

描述性统计分析

前言&#xff1a; 本专栏参考教材为《SPSS22.0从入门到精通》&#xff0c;由于软件版本原因&#xff0c;部分内容有所改变&#xff0c;为适应软件版本的变化&#xff0c;特此创作此专栏便于大家学习。本专栏使用软件为&#xff1a;SPSS25.0 本专栏所有的数据文件可在个人主页—…

电压放大器在无损探伤中的应用研究

电压放大器是一种常见的电子设备&#xff0c;其主要作用是将低电平信号转换为高电平信号。在无损探伤中&#xff0c;电压放大器被广泛应用于信号增益和分析&#xff0c;以便更好地检测表面或内部缺陷。下面安泰电子Aigtek将详细介绍电压放大器在无损探伤中的应用研究。 电压放大…

ForkJoin详解

1.分支合并 (大数据量的去使用) package com.kuang.forkjoin;import java.util.concurrent.ExecutionException; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.ForkJoinTask; import java.util.function.LongBinaryOperator; import java.util.stre…

MSF的安装与使用教程,超详细,附安装包和密钥

MSF简介 Metasploit&#xff08;MSF&#xff09;是一个免费的、可下载的框架 它本身附带数百个已知软件漏洞&#xff0c;是一款专业级漏洞攻击工具。 当H.D. Moore在2003年发布Metasploit时&#xff0c;计算机安全状况也被永久性地改变了&#xff0c;仿佛一夜之间&#xff0…

【CentOS7】安装docker

【CentOS7】安装docker 1.Docker 要求 CentOS 系统的内核版本高于 3.10 &#xff0c;通过命令查看你当前的内核版本 。2.使用 root 权限登录 Centos&#xff0c;将 yum 包更新到最新。&#xff08;确保联网&#xff09;3. 如果安装过旧版本的话&#xff0c;卸载旧版本4. 设置yu…

springboot实战(八)之整合redis

目录 序言&#xff1a; 环境&#xff1a; 依赖&#xff1a; 配置&#xff1a; 测试&#xff1a; redis序列化配置&#xff1a; 连接池&#xff1a; 序言&#xff1a; Redis是我们Java开发中&#xff0c;使用频次非常高的一个nosql数据库&#xff0c;数据以key-value键…