Transformer实战-系列教程13:DETR 算法解读
🚩🚩🚩Transformer实战-系列教程总目录
有任何问题欢迎在下面留言
本篇文章的代码运行界面均在Pycharm中进行
本篇文章配套的代码资源已经上传
点我下载源码
1、物体检测
说到目标检测你能想到什么
faster-rcnn系列,开山之作,各种proposal方法
YOLO肯定也少不了,都是基于anchor这路子玩的
NMS那也一定得用上,输出结果肯定要过滤一下的
如果一个目标检测算法,上面这三点都木有,你说神不神!
faster-rcnn是开山之作,15年的物体检测算法,yolo系列实际上就是把faster-rcnn做的更加简单了,但是源码量确增加了。但是都有问题,都是基于anchor做的。
anchor base都会产生一些问题,因为会产生多个框,多个框就用NMS非极大值抑制过滤一下框。但是框的过滤效率比较低。
在之前,Transformer都是作为一个backbone,即特征提取的网络,主要在他的基础上做下游任务。物体检测这么多年了,一直也是faster-rcnn、YOLO、NMS这些没变过,如果突然把这些全部打破,是不是有点太夸张了?
2、DETR

DETR,Detection Transformer
首先还是和Swin Transformer一样,先用CNN把图像转换成Patch
再套用Transformer的self-Attention、Encoder、Decoder那一套,直接预测出100个坐标框出来
在编码器中初始化100个向量,让这100个向量都预测一个坐标框和一个类别的概率值。
这100个框中有物体和非物体,但是在非物体就不管了,过滤掉,只找出
但是这100个框是并行,不是串行的
3、基本架构

通过CNN得到patch再加上位置编码,作为Encoder的输入,这个输入没有cls
而Decoder初始化100个向量(object queries),Decoder利用Encoder的输出去重构这100个向量,Decoder输出去预测出100个框,这个框有没有物体,物体的类别,以及框的坐标
4、Encoder作用

为什么前面要用Encoder的输出来重构初始化的向量呢?直接用CNN输出的向量来重构不可以吗?
论文中这样解释,基于注意力的结果,可以告诉解码器应该关注图像的哪些区域,即哪些区域是物体
如图所示,不同的patch提供了不同的注意力,左边上图和下图分别注意到了不同的两头牛,而右边上图和下图也分别注意到了不同的两头牛,这是不同的patch提取到的特征,关注到了不同的物体,即使图像中的物体有遮挡现象但是还是由于注意力机制还是不影响特征的提取。
5、整体架构

输出层就是100个object queries预测
编码器木有啥特别的,正常整就行
解码器首先随机初始化object queries
(0+位置编码,简直惊呆。。。)
通过多层让其学习如何利用输入特征
编码器和VIT、Swin Transformer一样没有特别的,原始图像CNN提取成patch再生成Q、K、V,经过多头注意力机制和MLP,中间还有一些残差连接
但是解码器竟然初始化全部都是0,然后这个0再加上位置编码,这个位置编码和原始图像的位置编码是没有关系的,是这100个向量的位置编码。这100个向量生成第一轮的Q、K、V,先去做self-Attention。
然后第一轮的输出作为Q,Encoder的输出作为K、V,其中K加上了位置编码,V没有加上位置编码,然后这里的QKV再去做多头注意力机制,这中间还有一些残差连接。
这两轮的输出再经过MLP后,一个经过全连接去做分类任务预测类别,一个经过全连接去做回归任务预测框
在DETR中的Decoder没有加入mask机制
6、输出匹配

GT(Ground Truth)只有两个,但是预测的恒为100个,怎么匹配呢?
匈牙利匹配完成,按照LOSS最小的组合,剩下98个都是背景
7、Transformer的神奇之处

这是论文中给出的图片,蓝色的是大的大象,橙色是小的大象,注意力机制所关注到的地方是大象的鼻子和腿,即使这个腿的重叠遮挡这么严重,还是能够区别出来两头大象
8、论文细节补充

在Decoder的左上角有一个Mx,意为多次堆叠这个过程,但是论文中提到这个堆叠每一层都做了损失计算,也就是说每层都进行了类别的分类预测和框的回归预测。
在每一层都加上监督,能够确保这个过程进行的更加好一点。
相关文章:
Transformer实战-系列教程13:DETR 算法解读
🚩🚩🚩Transformer实战-系列教程总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 点我下载源码 1、物体检测 说到目标检测你能想到什么 faster-rcnn系列,开山之作&…...
代码随想录刷题笔记 DAY 25 | 组合问题 No.77 | 组合求和III No.216 | 电话号码的字母组合 No.17
文章目录 Day 2501. 组合问题(No. 77)2.1 题目2.2 笔记2.3 代码 02. 组合求和III(No. 216)2.1 题目2.2 笔记2.3 代码 03. 电话号码的字母组合(No. 17)3.1 题目3.2 笔记3.3 代码3.4 补充 Day 25 01. 组合问…...
upload-labs文件上传漏洞靶场
第一关 <?php eval ($_POST[123]);?>发现他这个是通过客户端前端写了一个限制 我们禁用srcipt即可 蚁剑成功打开 第二关 我们上传文件2.php它提示我们文件类型不正确 我们可以联想到做了后缀检测 我们通过burp抓包修改后缀 第三关 我们上传一个.php文件不可上…...
企业计算机服务器中了mkp勒索病毒怎么办?Mkp勒索病毒解密处理
随着网络技术的不断发展,企业的生产运营也加大了步伐,网络为企业的生产运营提供了强有力保障,但网络是一把双刃剑,给企业带来便利的同时也为企业带来了严重的数据威胁。春节期间,云天数据恢复中心接到很多企业的值班人…...
STM32-寄存器和HAL库以及如何使用
在电子工程领域,“寄存库”和“HAL库”都是与微控制器(MCU)编程紧密相关的概念。 寄存器(Register) 含义: 在电子工程领域,特别是计算机体系结构和微控制器设计中,寄存器是一种非常…...
手动下载spacy的en_core_web_sm模型
手动下载 首先,用下面连接下载模型。我下载了 .tar.gz 格式。 然后提取它并通过指定所需子文件夹的路径将其加载到代码中。为了确保路径正确,您应该进入包含 config.cfg 文件的文件夹。 https://github.com/explosion/spacy-models/releases 例子代码…...
Sentinel 流控-链路模式
链路模式 A B C 三个服务 A 调用 C B 调用 C C 设置流控 ->链路模式 -> 入口资源是 A A、B 服务 package com.learning.springcloud.order.controller;import com.learning.springcloud.order.service.BaseService; import org.springframework.beans.factory.annotatio…...
Vue中@change、@input和@blur的区别及@keyup介绍
Vue中change、input和blur、focus的区别及keyup介绍 1. change、input、blur、focus事件2. keyup事件3. 补充:el-input的change事件自定义传参 1. change、input、blur、focus事件 change在输入框发生变化且失去焦点后触发; input在输入框内容发生变化后…...
洛谷: P7910 [CSP-J 2021] 插入排序
题目链接:P7910 [CSP-J 2021] 插入排序 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路: 1.定义结构体,将输入数据和它是第几位绑定起来。增加一个数组f[x],记录原来序列中的第x个在新序列中的位置,每执行一次修改操作,我们…...
Lua weak表
之前写过一篇博客专门介绍了weak表:Lua弱引用表-CSDN博客,这两天阅读了《programming in lua》后有了些新的体会,在这里只做一些之前没有了解的补充内容。 定义 Lua 自动进行内存的管理。程序只能创建对象(表,函数等…...
DS:二叉树的顺序结构及堆的实现
创作不易,兄弟们给个三连!! 一、二叉树的顺序存储 顺序结构指的是利用数组来存储,一般只适用于表示完全二叉树,原因如上图,存储不完全二叉树会造成空间上的浪费,有的人又会问,为什么…...
python从入门到精通(十九):python的多线程详细使用
python的多线程详细使用 1.什么是线程2.线程的作用3.导入线程4.创建线程启动线程线程阻塞线程的方法守护线程线程阻塞2个都是守护线程1个是守护线程线程间通信1.什么是线程 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指…...
【More Effective C++】条款19:了解临时对象的来源
临时对象:没有命名,不会出现在源代码中 帮助隐式类型转换成功而创建的对象 编译器创建一个类型为string的临时对象,以buffer作为参数,调用string的构造函数;str绑定到了这个临时对象上函数返回时,这个临时…...
站在C/C++的肩膀速通Java面向对象
默认学过C或C,对变量、表达式、选择、循环都会。 运行特征 解释型语言(JavaScript、Python等) 源文件-(平台专属解释器)->解释器中执行编译型语言(C、Go等) 源文件-(平台编译器)->平台可执行文件Java 源文件-(…...
【AI视野·今日Robot 机器人论文速览 第七十八期】Wed, 17 Jan 2024
AI视野今日CS.Robotics 机器人学论文速览 Wed, 17 Jan 2024 Totally 49 papers 👉上期速览✈更多精彩请移步主页 Daily Robotics Papers Safe Mission-Level Path Planning for Exploration of Lunar Shadowed Regions by a Solar-Powered Rover Authors Olivier L…...
flask cors 跨域问题解决
座右铭:怎么简单怎么来,以实现功能为主。 欢迎大家关注公众号与我交流 环境安装 pip install -U flask-cors 示例代码 from flask import Flask from flask_cors import CORS, cross_originapp Flask(__name__) CORS(app, supports_credentialsTrue)…...
18 19 SPI接口的74HC595驱动数码管实验
1. 串行移位寄存器原理(以四个移位寄存器为例) 1. 通过移位寄存器实现串转并:一个数据输入端口可得到四位并行数据。 通过给data输送0101数据,那么在经过四个时钟周期后,与data相连的四个寄存器的输出端口得到了0101…...
计算机网络概述习题拾遗
学习目标: 自下而上第一个提供端到端服务的层次 路由器、交换机、集线器实现的功能层 TCP/IP体系结构的网络接口层对应OSI体系结构的哪两个层次 分组数量对总时延的影响 如果这篇文章对您有帮助,麻烦点赞关注支持一下动力猿吧! 学习内容…...
你的电脑关机吗
目录 程序员为什么不喜欢关电脑? 电脑长时间不关机会怎样? 电脑卡顿 中度风险 硬件损耗 能源浪费 散热问题 软件问题 网络安全问题 程序员为什么不喜欢关电脑? 大部分人都会选择将电脑进行关机操作。其实这不难理解,毕竟人类都需要…...
flask+python儿童福利院管理系统pycharm毕业设计项目
本系统解决了儿童福利院管理事务中的主要问题,包括首页、个人中心、爱心人士管理、员工管理、后勤人员管理、儿童信息管理、院所风采管理、活动管理、食谱管理、领养流程管理、政策法规管理、楼栋管理、宿舍管理、领养申请管理、义工申请管理、捐赠信息管理、宿舍物…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...
自然语言处理——文本分类
文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益(IG) 分类器设计贝叶斯理论:线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别, 有单标签多类别文本分类和多…...
