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

DETR 技术详解(Detection Transformer)

DETR 技术详解(Detection Transformer)

一、前言

DETR(DEtection TRansformer)是 Facebook AI 在 2020 年提出的一种端到端目标检测模型,它首次将 Transformer 结构引入目标检测任务中,取代了传统的 anchor-based 和 NMS 后处理机制。

它的核心思想是:

使用 Transformer 的 Set Prediction 框架,直接预测一组 bounding boxes,并通过匈牙利匹配机制进行 loss 计算。”

本文将围绕 DETR 的模型结构、训练流程、损失函数、推理过程等进行详细讲解。


二、DETR 的完整模型结构流程图(输入图像:800×800×3)

Input Image (800x800x3) │ ├— Backbone: ResNet-50 / Swin Transformer → 提取多尺度特征 P3/P4/P5 │ ├— 输出 feature map `[B, C, H, W]`(如 `[1, 2048, 25, 25]`) │ ├— Neck: Feature Pyramid Network(FPN)→ 可选模块(部分变体启用) │ ├— 上采样 + Concatenate(增强小目标识别能力) │ ├— Positional Encoding → 添加位置信息给 feature map │ ├— Transformer Encoder → 自注意力建模全局特征 │ ├— Transformer Decoder + Learnable Queries → 解码器生成 object queries │ └— Detection Head: ├— Bounding Box Reg Branch(回归 `(x_center, y_center, width, height)`) └— Class Confidence Branch(分类置信度)

三、DETR 的完整模型结构详解

1. 主干网络(Backbone)

  • 使用标准的 CNN 或 Vision Transformer 提取图像特征;
  • 常见 backbone:
  • ResNet-50(默认)
  • ResNet-101
  • Swin-Tiny/Swin-Base(DETR-DC5 / Deformable DETR 中使用)

输出为 feature map:[B, C, H, W]
例如:[1, 2048, 25, 25](ResNet-50 输出)


2. 特征编码(Positional Encoding)

  • 将 feature map 展平为[B, C, HW]
  • 添加可学习的位置编码(positional encoding);
  • 输入给 Transformer encoder;
pos_encoding=PositionEmbeddingSine()flatten_feature_map=feature_map.flatten(2).permute(2,0,1)# [HW, B, C]input_with_pos=flatten_feature_map+pos_encoding(flatten_feature_map)

3. Transformer Encoder

  • 标准 Transformer 编码器;
  • 对 feature map 进行全局自注意力建模;
  • 输出为[HW, B, C]形式的编码后特征;
classTransformerEncoder(nn.Module):def__init__(self,encoder_layer,num_layers):super().__init__()self.layers=_get_clones(encoder_layer,num_layers)defforward(self,src):forlayerinself.layers:src=layer(src)returnsrc

4. Learnable Object Queries(解码器输入)

  • 初始化为 learnable embeddings;
  • 数量通常设为 100(支持最多 100 个 objects);
  • 作为 decoder 的初始输入;
query_embed=nn.Embedding(num_queries=100,embedding_dim=d_model)queries=query_embed.weight.unsqueeze(1).repeat(1,batch_size,1)

5. Transformer Decoder

  • 使用 cross-attention 查询 encoder 输出;
  • 输出为[Q, B, D]形式的 object embeddings;
  • Q 为 object queries 数量(如 100);
classTransformerDecoder(nn.Module):def__init__(self,decoder_layer,num_layers):super().__init__()self.layers=_get_clones(decoder_layer,num_layers)defforward(self,tgt,memory,...):forlayerinself.layers:tgt=layer(tgt,memory,...)returntgt

6. Detection Head(边界框 + 分类分支)

  • 每个 object query 由两个 head 预测:
  • reg_head: 回归 bounding box;
  • cls_head: 分类 confidence;
classBBoxHead(nn.Module):def__init__(self,d_model,num_classes=91):super().__init__()self.bbox_embed=MLP(d_model,d_model,4,3)# 回归头self.class_embed=nn.Linear(d_model,num_classes)
http://www.jsqmd.com/news/672489/

相关文章:

  • Dify文档解析延迟超2s?立即停用默认配置!资深架构师亲授3种LLM友好的预处理范式
  • FPGA以太网升级程序:便捷升级QSPI Flash,无需额外电路与内存,支持Xilinx 7...
  • 2026真空冷冻干燥机排行榜:进口替代标杆品牌推荐,哪家好? - 速递信息
  • LeetCode 2078. 两栋颜色不同且距离最远的房子 技术解析
  • Gomega社区生态:如何贡献和扩展匹配器库
  • 别再只会./gradlew了!Windows下Android开发Terminal命令执行全攻略(含AS、PowerShell、Git Bash)
  • 3个步骤掌握ITK-SNAP:医学图像分割的实战手册
  • PowerShell创建自签名证书的5个高级玩法:从代码签名到邮件加密,不止于HTTPS
  • Apache Hamilton与LLM工作流:构建智能数据转换系统
  • 2026年亲测!家电维修前让商家明确费用明细的方法 - 小何家电维修
  • 2026年营养面包哪家好:健康烘焙产品选型指南与主流品牌实力解析 - 商业小白条
  • FPGA数字滤波避坑指南:为什么我不用System Generator做梯形成形算法?
  • 医疗系统集成避坑指南:HL7协议里的‘潜规则’与Z段自定义字段处理
  • Dify平台集成实战:快速接入Qwen1.5-1.8B GPTQ打造AI应用
  • CVPR 2017最佳论文DenseNet实战:在CIFAR-10上轻松超越ResNet的保姆级教程
  • SQLyog Community:免费MySQL数据库管理工具完全入门指南
  • 深度解析:AIPPT自动生成工具 重构办公效率的核心技术 - 速递信息
  • Xshell高效运维:连接与管理运行PyTorch深度学习镜像的GPU服务器
  • YOLOv7 技术详解(Real-Time Dynamic Label Assignment + Model Scaling)
  • Free Texture Packer终极指南:完全免费的精灵表制作神器
  • 告别复杂推导:用数学归纳法5步搞定Pinsker不等式的证明(思路拆解)
  • ECharts地图从入门到‘放弃’?我踩过的5个坑和3个性能优化技巧
  • 读懂 DeepSeek 创始人梁文锋,从这一本他亲自作序的书开始
  • Jaeles与Osmedeus集成:构建企业级自动化安全评估工作流
  • 2026年亲测:综合家电维修公司技术到底靠不靠谱? - 小何家电维修
  • FPGA数字钟课程设计避坑指南:调试蜂鸣器闹钟与0.01秒精度跑表的那些事儿
  • 避坑指南:辰华CHI软件宏命令(Macro Command)编写与调试的5个常见错误
  • IWOA算法复现:‘改进鲸鱼优化算法在机械臂时间最优轨迹规划的应用‘及其详细解读
  • 2026年亲测!冰箱门封不严换门封条费用大揭秘 - 小何家电维修
  • RoundedTB终极指南:为Windows任务栏添加圆角和边距的完整教程