【深度学习】计算机视觉(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 结构示意图

rust 复制代码
输入图片 -> CNN 提取特征 -> Transformer 处理特征 -> 预测目标类别 + 边界框

4.DETR 代码示例

使用 PyTorch 进行 DETR 目标检测

python 复制代码
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)

运行结果

python 复制代码
{'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 可能成为未来目标检测的主流。
相关推荐
紫雾凌寒24 分钟前
计算机视觉基础|卷积神经网络:从数学原理到可视化实战
人工智能·深度学习·神经网络·机器学习·计算机视觉·cnn·卷积神经网络
IT古董29 分钟前
【深度学习】计算机视觉(CV)-图像生成-风格迁移(Style Transfer)
人工智能·计算机视觉
阿_旭1 小时前
目标检测中单阶段检测模型与双阶段检测模型详细对比与说明
人工智能·深度学习·目标检测·计算机视觉
thinkMoreAndDoMore3 小时前
深度学习(2)-深度学习关键网络架构
人工智能·深度学习·机器学习
紫雾凌寒3 小时前
计算机视觉基础|从 OpenCV 到频域分析
深度学习·opencv·计算机视觉·傅里叶变换·频域分析
B站计算机毕业设计超人4 小时前
计算机毕业设计hadoop+spark旅游景点推荐 旅游推荐系统 旅游可视化 旅游爬虫 景区客流量预测 旅游大数据 大数据毕业设计
大数据·hadoop·爬虫·深度学习·机器学习·数据可视化·推荐算法
小屁孩大帅-杨一凡4 小时前
如何实现使用DeepSeek的CV模型对管道内模糊、低光照或水渍干扰的图像进行去噪、超分辨率重建。...
图像处理·人工智能·opencv·计算机视觉·超分辨率重建
mengyoufengyu4 小时前
DeepSeek04-导出导入模型文件
人工智能·深度学习·deepseek
大数据追光猿5 小时前
【深度学习】Pytorch的深入理解和研究
人工智能·pytorch·python·深度学习·机器学习·ai编程
go54631584655 小时前
基于深度学习进行呼吸音检测的详细示例
人工智能·深度学习