【深度学习】计算机视觉(CV)-目标检测-DETR(DEtection TRansformer)—— 基于 Transformer 的端到端目标检测
1.什么是 DETR?
DETR(DEtection TRansformer) 是 Facebook AI(FAIR)于 2020 年提出的 端到端目标检测算法,它基于 Transformer 架构,消除了 Faster R-CNN、YOLO 等方法中的 候选框(Anchor Boxes) 和 非极大值抑制(NMS) 机制,使目标检测变得更简单、高效。
论文:End-to-End Object Detection with Transformers
2.DETR 的核心特点
- 基于 Transformer 进行目标检测,摆脱了 CNN 传统的 Anchor 机制
- 端到端训练,无需像 Faster R-CNN 额外使用 RPN 进行候选框生成
- 全局注意力机制(Self-Attention),可以建模远距离依赖关系,提高检测精度
- 自动去重,不需要 NMS 后处理步骤
- 适用于复杂场景,如密集目标检测
3.DETR 的工作流程
DETR 由 三部分 组成:
- CNN 提取图像特征(ResNet-50 / ResNet-101)
- Transformer 进行目标检测(编码器 + 解码器)
- 最终预测目标类别和边界框(分类 + 位置回归)
DETR 结构示意图
输入图片 -> CNN 提取特征 -> Transformer 处理特征 -> 预测目标类别 + 边界框
4.DETR 代码示例
使用 PyTorch 进行 DETR 目标检测
import torch
import torchvision.transforms as T
from PIL import Image
import requests# 载入 DETR 预训练模型
detr = torch.hub.load('facebookresearch/detr', 'detr_resnet50', pretrained=True, trust_repo=True)
detr.eval()# 加载图片并进行预处理
image_path = r"D:\Pictures\test.jpeg"
image = Image.open(image_path)transform = T.Compose([T.Resize(800), T.ToTensor()])
img_tensor = transform(image).unsqueeze(0)# 进行目标检测
with torch.no_grad():outputs = detr(img_tensor)# 输出检测结果
print(outputs)
运行结果
{'pred_logits': tensor([[[-17.4480, -1.4711, -6.0746, ..., -10.0646, -7.2832, 11.1362],[-17.7877, -1.7454, -5.9165, ..., -11.6356, -8.4581, 10.7261],[-18.3903, -1.3194, -7.6447, ..., -11.3595, -6.6635, 11.2573],...,[-18.0295, -1.6913, -6.6354, ..., -11.4836, -7.7729, 10.9814],[-14.4323, 1.3790, -4.2558, ..., -11.5297, -7.8083, 8.1644],[-17.6349, -1.6041, -6.4100, ..., -11.2120, -7.4216, 10.7064]]]), 'pred_boxes': tensor([[[0.4990, 0.5690, 0.4764, 0.7080],[0.5039, 0.5219, 0.4657, 0.6124],[0.3920, 0.5463, 0.2963, 0.6085],[0.5231, 0.5180, 0.4489, 0.6110],[0.4986, 0.5346, 0.4989, 0.5883],[0.5145, 0.5258, 0.5162, 0.6123],[0.4251, 0.5273, 0.3235, 0.5911],[0.4012, 0.5339, 0.2816, 0.5804],[0.4025, 0.5263, 0.2526, 0.5638],[0.5153, 0.5249, 0.4807, 0.6065],[0.6775, 0.8235, 0.0436, 0.0436],[0.4380, 0.5365, 0.3368, 0.5919],[0.5044, 0.5242, 0.4791, 0.6314],[0.7352, 0.8131, 0.0248, 0.0464],[0.4567, 0.8361, 0.0448, 0.0530],[0.4981, 0.5287, 0.4715, 0.6199],[0.5047, 0.5239, 0.4570, 0.6045],[0.6295, 0.5182, 0.2367, 0.6062],[0.5980, 0.5261, 0.2878, 0.6313],[0.5106, 0.5218,
代码解析
- 载入 Facebook 预训练的 DETR 模型(
detr_resnet50) - 使用 ResNet 预处理输入图像
- 利用 Transformer 进行目标检测 并输出检测框
5.DETR vs Faster R-CNN vs YOLO
| 模型 | 方法 | 检测方式 | 速度(FPS) | mAP(COCO) | 特点 |
|---|---|---|---|---|---|
| Faster R-CNN | 双阶段 | RPN + ROI 池化 | ⏳ 5-10 | 🎯 76.4% | 高精度,速度慢 |
| YOLOv8 | 单阶段 | 直接预测类别 + 边界框 | ⚡ 60+ | 🎯 92% | 速度快,适合实时检测 |
| DETR | 端到端 | Transformer 进行检测 | ⏳ 15 | 🎯 94% | 无 Anchor / NMS |
- DETR 适用于端到端目标检测,适合大规模数据和复杂场景。
- YOLO 适用于实时检测,而 Faster R-CNN 适用于高精度任务。
6.DETR 的优化方向
- DETR 速度较慢,可优化 Transformer 计算效率(如 Deformable DETR)
- 提升小目标检测能力(DETR 需要更大数据集进行训练)
- 轻量化 DETR(如 Mobile-DETR)以适应移动端部署
7.结论
- DETR 通过 Transformer 解决了目标检测中的 Anchor 机制问题,简化了流程。
- 它具有端到端训练的优势,但速度较慢,适用于高精度目标检测任务。
- 随着 Transformer 在计算机视觉中的应用(如 ViT),DETR 可能成为未来目标检测的主流。
相关文章:
【深度学习】计算机视觉(CV)-目标检测-DETR(DEtection TRansformer)—— 基于 Transformer 的端到端目标检测
1.什么是 DETR? DETR(DEtection TRansformer) 是 Facebook AI(FAIR)于 2020 年提出的 端到端目标检测算法,它基于 Transformer 架构,消除了 Faster R-CNN、YOLO 等方法中的 候选框(…...
Windows Docker运行Implicit-SVSDF-Planner
Windows Docker运行GitHub - ZJU-FAST-Lab/Implicit-SVSDF-Planner: [SIGGRAPH 2024 & TOG] 1. 设置环境 我将项目git clone在D:/Github目录中。 下载ubuntu20.04 noetic镜像 docker pull osrf/ros:noetic-desktop-full-focal 启动容器,挂载主机的D:/Github文…...
ELK安装部署同步mysql数据
ELK 安装部署指南 ELK 是 Elasticsearch、Logstash 和 Kibana 的简称,用于日志收集、存储、分析和可视化。 1. 安装 Elasticsearch Elasticsearch 是一个分布式搜索和分析引擎。 1.1 下载并安装 访问 Elasticsearch 官网 下载最新版本。 解压并安装: tar…...
Vision Transformer图像分块嵌入核心技术解析:从数学推导到工业级应用
一、技术原理与数学建模 1.1 图像分块过程数学表达 给定输入图像 x ∈ R H W C x \in \mathbb{R}^{H \times W \times C} x∈RHWC,将其分割为 N N N 个尺寸为 P P P \times P PP 的图块: x p ∈ R N ( P 2 ⋅ C ) 其中 N H W P 2 x_p \in \m…...
【产品资料】陀螺匠·企业助手v1.8 产品介绍
陀螺匠企业助手是一套采用Laravel 9框架结合Swoole高性能协程服务与Vue.js前端技术栈构建的新型智慧企业管理与运营系统。该系统深度融合了客户管理、项目管理、审批流程自动化以及低代码开发平台,旨在为企业提供一站式、数字化转型的全方位解决方案,助力…...
深度求索-DeepSeek-R1本地部署指南
1、参考:部署指南 2、参考:deepseek本地部署只需三步 DeepSeek本地部署只需三步: 1、安装运行环境:安装 Ollama:Ollama官网:官网 2、下载模型:参数越大,需要物里硬件越多 3、安装部…...
代码随想录day12
144.二叉树的前序遍历 //明确递归的函数,结束边界,单层逻辑 void traversal(TreeNode* node, vector<int>& list){if(node nullptr){return;}list.push_back(node->val);traversal(node->left, list);traversal(node->right, list)…...
告别第三方云存储!用File Browser在Windows上自建云盘随时随地访问
文章目录 前言1.下载安装File Browser2.启动访问File Browser3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 无论是个人用户还是企业团队,都希望能够有一个高效、安全的解决方案来…...
Ubuntu 下 nginx-1.24.0 源码分析 - NGX_MAX_ALLOC_FROM_POOL
NGX_MAX_ALLOC_FROM_POOL 定义在 src\core\ngx_palloc.h #define NGX_MAX_ALLOC_FROM_POOL (ngx_pagesize - 1) 在 src/os/unix/ngx_alloc.h extern ngx_uint_t ngx_pagesize; 这个全局变量定义在 src\os\unix\ngx_alloc.c 中 ngx_uint_t ngx_pagesize; 在 src/os/unix/ngx_…...
PyQt6/PySide6 的 SQL 数据库操作(QtSql)
一、核心组件架构 1.1 QtSql模块构成 QSqlDatabase:数据库连接管理(支持连接池)QSqlQuery:SQL语句执行与结果遍历QSqlTableModel:可编辑的表格数据模型QSqlQueryModel:只读查询结果模型QSqlRelationalTab…...
利用IDEA将Java.class文件反编译为Java文件:原理、实践与深度解析
文章目录 引言:当.class文件遇到源代码缺失第一章:反编译技术基础认知1.1 Java编译执行原理1.2 反编译的本质1.3 法律与道德边界 第二章:IDEA内置反编译工具详解2.1 环境准备2.2 三步完成基础反编译2.3 高级反编译技巧2.3.1 调试模式反编译2.…...
Kafka偏移量管理全攻略:从基础概念到高级操作实战
#作者:猎人 文章目录 前言:概念剖析kafka的两种位移消费位移消息的位移位移的提交自动提交手动提交 1、使用--to-earliest重置消费组消费指定topic进度2、使用--to-offset重置消费offset3、使用--to-datetime策略指定时间重置offset4、使用--to-current…...
【R语言】GitHub Copilot安装-待解决
参考: 文章目录...
软件定义汽车时代的功能安全和信息安全
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活…...
qt的QSizePolicy的使用
使用 QSizePolicy 设置控件的伸缩因子 在 Qt 中,QSizePolicy 控制 控件如何在布局中伸缩。如果想要影响控件的大小调整行为,可以通过 QSizePolicy::setHorizontalStretch() 和 QSizePolicy::setVerticalStretch() 设置伸缩因子。 基本用法 假设我们有一个…...
简单几个步骤完成 Oracle 到金仓数据库(KingbaseES)的迁移目标
作为国产数据库的领军选手,金仓数据库(KingbaseES)凭借其成熟的技术架构和广泛的市场覆盖,在国内众多领域中扮演着至关重要的角色。无论是国家电网、金融行业,还是铁路、医疗等关键领域,金仓数据库都以其卓…...
DeepSeek自动化写作软件
DeepSeek写作软件的三大核心功能 对于内容创作者来说,写作不仅是表达思想的过程,更是一项需要投入大量时间和精力的任务。面对日益增长的内容需求,写作效率低下、内容质量不高等问题,常常让创作者感到焦虑。而 DeepSeek 写作软件…...
【kafka系列】Kafka如何实现高吞吐量?
目录 1. 生产者端优化 核心机制: 关键参数: 2. Broker端优化 核心机制: 关键源码逻辑: 3. 消费者端优化 核心机制: 关键参数: 全链路优化流程 吞吐量瓶颈与调优 总结 Kafka的高吞吐能力源于其生…...
learn_pytorch03
第三章 深度学习分为如下几个步骤 1:数据预处理,划分训练集和测试集 2:选择模型,设定损失函数和优化函数 3:用模型取拟合训练数据,并在验证计算模型上表现。 接着学习了一些数据读入 模型构建 损失函数的构…...
机器学习:k近邻
所有代码和文档均在golitter/Decoding-ML-Top10: 使用 Python 优雅地实现机器学习十大经典算法。 (github.com),欢迎查看。 K 邻近算法(K-Nearest Neighbors,简称 KNN)是一种经典的机器学习算法,主要用于分类和回归任务…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...
学习一下用鸿蒙DevEco Studio HarmonyOS5实现百度地图
在鸿蒙(HarmonyOS5)中集成百度地图,可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API,可以构建跨设备的定位、导航和地图展示功能。 1. 鸿蒙环境准备 开发工具:下载安装 De…...
