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

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

http://www.kler.cn/a/549667.html

相关文章:

  • 【pytorch】weight_norm和spectral_norm
  • 【面试】在Vue3中,beforeCreate和created钩子函数有什么区别?
  • Visonpro 检测是否有缺齿
  • 【第1章:深度学习概览——1.4 深度学习的核心组件与概念解析之激活函数的作用与类型】
  • pytorch cnn 实现猫狗分类
  • 【C++】详解 set multiset map multiset 的使用
  • 网络安全讲座
  • Redis 的常见应用场景
  • 【第9章:计算机视觉实战—9.1 目标检测与识别:YOLO、Faster R-CNN等模型的实现与应用】
  • 案例-06.部门管理-根据ID查询
  • ESP32通过MQTT连接阿里云平台实现消息发布与订阅
  • 9. Docker 当中的复杂安装(MySQL主从复制的安装,Redis 的3主3从的安装配置)的详细说明[附加步骤图]
  • Linux(ubuntu)下载ollama速度慢解决办法
  • 今日写题06work(链表)
  • Golang GORM系列:GORM数据库迁移
  • Apache 服务启动失败的故障诊断
  • Leetcode 221-最大正方形
  • 使用css实现镂空效果
  • 小初高各学科教材,PDF电子版下载
  • 数据库-通用数据接口标准