当前位置: 首页 > news >正文

【深度学习】计算机视觉(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 可能成为未来目标检测的主流。 

相关文章:

  • DAY04 Object、Date类、DateFormat类、Calendar类、Math类、System类
  • 什么是计算机总线?
  • 【大模型】DeepSeek 高级提示词技巧使用详解
  • Android Studio报错:Could not get unknown property ‘kotlin_version‘
  • Kubernetes控制平面组件:etcd高可用集群搭建
  • c语言(初阶函数)完结
  • 函数防抖和节流
  • AI 语言模型发展史:统计方法、RNN 与 Transformer 的技术演进
  • Spring Boot01(注解、)---java八股
  • 001-监控你的文件-FSWatch-C++开源库108杰
  • Typora导出word文件详细安装教程
  • 使用 Dify + DeepSeek 打造自己的本地知识库问答
  • 框架ThinkPHP(小迪网络安全笔记~
  • 计算机组成原理—— 外围设备(十三)
  • 配置Open-R1,评测第三方蒸馏模型的性能2
  • 2025百度快排技术分析:模拟点击与发包算法的背后原理
  • 一个简单的ubuntu/开发板初始化脚本
  • Redis 09章——哨兵(sentinel)
  • HTML元素
  • MATLAB中lookBehindBoundary函数用法
  • 习近平会见塞尔维亚总统武契奇
  • 远离军事前线的另一面暗斗:除了“断水”,印度还试图牵制对巴国际援助
  • 国家主席习近平同普京总统举行小范围会谈
  • 新消费观察| 零售品牌 “走出去” ,如何开辟“新蓝海”?
  • 中国经济新动能|警惕数字时代下经济的“四大极化”效应
  • 俄乌交换205名被俘人员,俄方人员已抵达白俄罗斯