基于transformer的目标检测:DETR

目录

一、背景介绍

二、DETR的工作流程

三、DETR的架构

1. 损失函数

2. 网络框架讲解及举例

一、背景介绍

在深度学习和计算机视觉领域,目标检测一直是一个核心问题。传统方法依赖于复杂的流程和手工设计的组件,如非极大值抑制(nms)和锚点(anchor)生成,这些都需要对任务有深入的先验知识。然而,DETR的出现,为我们提供了一种全新的视角,将目标检测视为一个直接的集合预测问题,实现了端到端的检测。

DETR,即DEtection TRansformer,是一种创新的框架,它通过简化检测流程,消除了对许多手工设计组件的需求。这一方法的核心在于其集合基础的全局损失函数,它通过二分图匹配(bi-partite matching)强制实现唯一的预测结果,以及其Transformer编码器-解码器架构。DETR利用一组固定且学习得到的对象查询(object queries),推理对象之间的关系和全局图像上下文,直接并行输出最终的预测集合。

额外提一下,最初的DETR训练很慢,原作者训练了500个epoch。不过这些问题在后续都被慢慢解决了。

二、DETR的工作流程

根据原文的流程图,训练部分可以分成4部分:

  1. 特征提取(Feature Extraction):

    在这个阶段,输入的图像通过一个卷积神经网络(CNN)来提取图像特征。这些特征是图像的高级表示,捕捉了图像中的重要信息,为后续的编码阶段提供基础。
  2. 编码(Encoding):

    编码阶段使用Transformer的编码器部分。编码器接收CNN提取的图像特征,并将其转换为一系列特征表示。这些特征表示能够捕捉图像的全局信息,为解码阶段提供丰富的上下文。
  3. 解码(Decoding):

    解码阶段由Transformer的解码器部分负责。解码器利用编码器提供的特征表示,并通过自注意力机制来预测目标的类别和位置。解码器的输出是一组边界框预测,每个预测对应一个可能的目标。
  4. 损失计算(Loss Calculation):

    在损失计算阶段,DETR使用二分图匹配损失来优化模型。这种损失函数确保预测的边界框与真实边界框之间建立一对一的匹配关系。如果一个预测没有与任何真实边界框匹配,那么它应该被分类为“无对象”类别。

推理过程中,解码器同样生成一组边界框预测。但是,与训练不同,推理过程中不会使用二分图匹配损失。相反,会应用一个置信度阈值(例如0.7),只保留那些置信度高于这个阈值的预测。这样可以过滤掉那些不太确定的预测,只保留模型认为更有可能正确的预测。

三、DETR的架构

1. 损失函数

在DETR中,不管输入什么图片,都会在decoder输出100个框,但是一张图片中正常只会有几个target。一个预测框对应一个真实目标,模型怎么知道哪个预测框对应真实的目标框呢?于是该问题转换为了一个二分图匹配问题。

举个例子,假设我们有一张图片,其中包含3个真实目标,而DETR的解码器输出了100个预测框。二分图匹配问题就是要在这100个预测框和3个真实目标之间找到最佳的匹配关系,使得匹配的总成本(预测框与真实目标之间的损失函数)最小化。

如图所示,预测框和真值的对应问题可以列成一个矩阵,矩阵中放的是损失值,然后利用现成的匈牙利算法解决这个二分图匹配问题。

这里的损失函数分为类别损失定位损失。

每个预测框都会有一个类别损失,但只有那些通过二分图匹配与真实目标框匹配的预测框才会有位置损失

2. 网络框架讲解及举例

根据DETR流程图,举个例子描述输入图像经过DETR模型处理的精炼详细步骤:

  1. 输入图像: 输入一张尺寸为 3×800×1066 的图像。

  2. CNN骨干网络: 使用传统的CNN骨干网络提取图像特征,得到一个 2048×25×34 的特征图,25*34是输入图像大小的1/32。

  3. 特征降维: 通过1*1卷积将特征图降维到 256×25×34。

  4. 位置编码: 为降维后的特征图添加位置编码,位置编码的尺寸同样为 256×25×34。

  5. 特征图拉平: 将添加了位置编码的特征图拉平成一维向量,尺寸为 850×256,800是像素点个数。

  6. Transformer编码器: 将拉平后的特征向量输入到Transformer编码器中进行编码。

  7. Transformer解码器输入: 解码器的输入是一个固定大小的向量,尺寸为 100×256,这代表了模型将输出100个预测框。通过QKV的计算公式可知,decoder的输出与输入相同。

  8. 交叉注意力: 解码器中的每个输出嵌入与编码器的输出进行交叉注意力操作,以结合编码器的全局信息。

  9. 解码器输出: 交叉注意力操作后,解码器输出尺寸为 100×256 的向量。

  10. 预测头: 将解码器的输出通过一个共享的前馈网络(FFN),每个FFN预测一个类别(包括“无对象”类别)和边界框。

  11. 最终预测: FFN输出最终的100个预测框,每个预测包括类别和边界框信息。

这个流程展示了DETR如何通过Transformer架构实现端到端的目标检测,从输入图像到最终的预测框,整个过程不需要传统的目标检测组件,如锚点生成或非极大值抑制。

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

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

相关文章

打包部署若依(RuoYi)SpringBoot后端和Vue前端图文教程

打包后端‘ 1,打开若依,点击右侧的Maven展开Maven管理,选择ruoyi>Lifecycle 先双击clean清除原本启动项目时生成的文件。然后点击package等待项目打包,切记要取消运行再打包 打包完成后会在ruoyi-admin>src>target里面…

RedisTemplate执行lua脚本及Lua 脚本语言详解

使用RedisTemplate执行lua脚本 在开发中,我们经常需要与Redis数据库进行交互,而Redis是一个基于内存的高性能键值存储数据库,它支持多种数据结构,并提供了丰富的命令接口。在某些情况下,我们可能需要执行一些复杂的逻…

倾斜摄影相机在不动产确权登记和权籍调查中的应用

一、项目背景 1.1 项目背景 为贯彻落实中央、国务院关于实施乡村振兴战略、关于“扎实推进房地一体的农村集体建设用地和宅基地使用权确权登记颁证,完善农民闲置宅基地和闲置农房政策,探索宅基地所有权、资格权、使用权‘三权分置’”的要求&#xff0…

SSL,TLS协议分析

写在前面 工作中总是会接触到https协议,也知道其使用了ssl,tls协议。但对其细节并不是十分的清楚。所以,就希望通过这篇文章让自己和读者朋友们都能对这方面知识有更清晰的理解。 1:tls/ssl协议的工作原理 1.1:设计的…

STM32 I2C通信外设

单片机学习! 目录 前言 一、I2C外设简介 1.1 硬件I2C外设 1.2 硬件I2C功能 1.2.1 多主机模型 1.2.2 7位地址和10位地址的模式 1.2.3 通讯速度 1.2.4 支持DMA 1.2.5 兼容SMBus协议 1.2.6 芯片型号资源 二、I2C框图 2.1 引脚 2.2 SDA数据控制 2.3 SCL时…

新型大数据架构之湖仓一体(Lakehouse)架构特性说明——Lakehouse 架构(一)

文章目录 为什么需要新的数据架构?湖仓一体(Lakehouse)——新的大数据架构模式 同时具备数仓与数据湖的优点湖仓一体架构 存储层计算层 湖仓一体特性 单一存储拥有数据仓库的查询性能存算分离开放式架构支持各种数据源类型支持各种使用方式架…

Linux安全防火墙(iptables)配置策略

目录 概念 防火墙的主要功能和特点: 防火墙分类 其他概念 通信五要素: 通信四要素 用户态和内核态 四个表五个链 四个表 五条链 数据包过滤的匹配流程 三种报文流向: 规则内的匹配顺序: iptables iptables命令的格…

十四、Vue 混入(Mixins)详解

文章目录 简介一、基本语法定义混入对象使用混入对象二、混入的数据合并数据合并规则深度合并(对象类型数据)三、混入的生命周期钩子生命周期钩子的合并规则利用生命周期钩子合并的优势四、混入的方法合并方法合并规则调用被覆盖的方法(高级用法)五、混入的应用场景多个组件…

每日AIGC最新进展(80): 重庆大学提出多角色视频生成方法、Adobe提出大视角变化下的人类视频生成、字节跳动提出快速虚拟头像生成方法

Diffusion Models专栏文章汇总:入门与实战 Follow-Your-MultiPose: Tuning-Free Multi-Character Text-to-Video Generation via Pose Guidance 在多角色视频生成的研究中,如何实现文本可编辑和姿态可控的角色生成一直是一个具有挑战性的课题。现有的方法往往只关注单一对象的…

【C++面向对象——类的多态性与虚函数】计算图像面积(头歌实践教学平台习题)【合集】

目录😋 任务描述 相关知识 1. 纯虚函数 一、特点 二、使用场景 三、作用 四、注意事项 五、相关概念对比 2. 抽象类的使用 一、定义与概念 二、使用场景 编程要求 测试说明 通关代码 测试结果 任务描述 本关任务:设计一个矩形类、一个圆形…

STM32 拓展 电源控制

目录 电源控制 电源框图 VDDA供电区域 VDD供电区域 1.8V低电压区域 后备供电区域 电压调节器 上电复位和掉电复位 可编程电压检测器(PVD) 低功耗 睡眠模式(只有CUP(老板)睡眠) 进入睡眠模式 退出睡眠模式 停机(停止)模式(只留核心区域(上班)) 进入停…

c# CodeFirst生成表字段加注释

前置:ORM框架工具使用的FreeSql 背景:开发环境中运行接口,所有的表字段以及备注会自动加上,但是在测试环境时运行就只生成了表,没有把每个字段的注释加上 问题检查: FreeSql CodeFirst 支持将 c# 代码内的注…

Python连接和操作Elasticsearch详细指南

Python连接和操作Elasticsearch详细指南 一、服务器端配置1. 修改 Elasticsearch 配置文件2. 开放防火墙端口 二、本地 Python 连接 Elasticsearch1. 连接 Elasticsearch2. 索引操作3. 文档操作4. 搜索内容5. 聚合查询6. 批量操作 三、注意事项四、故障排除结论 Elasticsearch …

五个不同类型的数据库安装

一、 官方首页下载 打开 MySQL 官方首页,链接为: MySQL 进去社区后选择合适的版本进行安装 安装细节 依图一路next 点击finish结束安装 二、 在线YUM仓库 将该安装包的下载链接在 Linux 操作系统中按照以下命令直接进行下载 三、 二进制本地 通过该链接…

用户界面软件01

Jens Coldewey 著,Tom.X 译 本文中的模式语言逐步深入地探讨用户界面架构的设计,它基于人机工程学,足以形成一套完整的体系。如果你对这方面有兴趣,请参考[Tog92],[Coo95]和[Col95]。 本文不讨论用户界面的布局&…

Android 性能优化:内存优化(实践篇)

1. 前言 前一篇文章Android性能优化:内存优化 (思路篇) 大概梳理了Android 内存原理和优化的必要性及应该如何优化,输出了一套短期和长期内存优化治理的SOP方案。 那么这一篇文章就总结下我最近在做内存优化如何实践的&#xff0…

stm32第一次烧录或者上电运行卡死问题分析

问题描述 单片机烧录代码(刚上电)无法立即运行,必须要复位一次或多次才能运行;跟踪调试会进入HardFault_Handler中断。 问题分析 烧录配置如下图,首先排除配置问题那么该问题就比较让人头大了,理论上&am…

Unity中 Xlua使用整理(一)

1.安装: 从GitHub上下载Xlua源码 Tencent/xLua: xLua is a lua programming solution for C# ( Unity, .Net, Mono) , it supports android, ios, windows, linux, osx, etc. (github.com) 下载Xlua压缩包,并解压将Aseet文件夹中的Xlua和Plugins文件夹复制到Unit…

git理解记录

文章目录 1. 背景2. 基本概念3. 日常工作流程4. 其他常见操作4.1 merge合并操作4.2 tag打标签操作4.3 remoute远程操作4.4 撤销修改 git理解记录 1. 背景 git作为分布式版本控制系统,开源且免费,相比svn集中式版本控制系统存在速度快(HEAD指针指向某次co…

js复制数据到剪切板

方法一: 在下面方法传入你想要复制的字符 ,直接调用该方法就好 export function copyText(text: string) {if (navigator.clipboard) {// clipboard api 复制navigator.clipboard.writeText(text)} else {const textarea document.createElement(text…