【深度学习】计算机视觉(CV)-目标检测-DETR(DEtection TRansformer)—— 基于 Transformer 的端到端目标检测

news/2025/2/21 6:00:08/

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 可能成为未来目标检测的主流。 

http://www.ppmy.cn/news/1573340.html

相关文章

Lua | 每日一练 (2)

💢欢迎来到张胤尘的技术站 💥技术如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 Lua | 每日一练 (2)题目参考答案 Lua | 每日一练 (2) …

在 Kubernetes (K8s) 环境中,备份 PostgreSQL 数据库

在 Kubernetes (K8s) 环境中,备份 PostgreSQL 数据库有一些特殊的考虑,因为数据库通常运行在容器中,并且数据存储在卷(如 PersistentVolume)中。你可以通过几种方式在外部备份 PostgreSQL 数据库,下面是一些…

【EndNote】WPS 导入EndNote 21

写在前面:有没有人有激活码,跪求! EndNote,在文献管理和文献引用方面很好用。写文章的时候,使用EndNote引入需要的文献会很方便。我目前用的WPS,想把EndNote的CWYW(Cite While You Write&#…

Flutter 3.29.0 新特性 CupertinoNavigationBar 可配置bottom属性

Flutter 3.29版本优化了开发流程并提升了性能,对 Impeller、Cupertino、DevTools 等进行了更新。 CupertinoNavigationBar和CupertinoSliverNavigationBar现在接受底部小部件,通常是搜索字段或分段控件。 例如本小节内容就是放置了一个输入框&#xff…

PostgreSQL 添加索引导致崩溃,参数调整需谨慎--文档未必完全覆盖场景

开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, OceanBase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,可以解决你的问题。加群请联系 liuaustin3 ,(共2720人左右 1 …

初识Linux(9):程序地址空间

实验&#xff1a; 1 #include <stdio.h>2 #include <sys/types.h>3 #include <unistd.h>4 #include <string.h>5 6 int g_val 100;7 8 int main()9 {10 printf("我是一个进程: pid:%d,ppid:%d\n",getpid(),getppid());11 pid_t id for…

postgresql FSM页面怎么组织

PostgreSQL 的空闲空间映射&#xff08;Free Space Map&#xff0c;FSM&#xff09;是用于跟踪堆和索引关系中可用空间的数据结构。FSM 的设计目标是快速定位到有足够空间容纳新元组的页面&#xff0c;或者决定是否需要扩展新的页面。 FSM 页面的组织方式 存储结构 每个堆和索…

什么是AI Agent、Chat、RAG、MoE

什么是AI Agent、Chat、RAG、MoE 目录 什么是AI Agent、Chat、RAG、MoE定义与原理功能特点应用场景AI Agent有哪些关键组成部分感知模块决策模块知识模块行动模块学习模块AI Agent、Chat、RAG、MoE是人工智能领域中不同的概念和技术,它们在功能、原理和应用等方面存在一些区别…