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

告别Anchor和NMS:用PyTorch从零开始手搓DETR,理解Transformer如何颠覆目标检测

从零实现DETR用Transformer重构目标检测范式当YOLO和Faster R-CNN仍在目标检测领域占据主导地位时Facebook Research在2020年提出的DETR(DEtection TRansformer)带来了一场范式革命。这个将Transformer引入计算机视觉的架构彻底摒弃了沿用多年的anchor设计和NMS后处理用最纯粹的端到端方式重新定义了目标检测。1. 传统检测器的先天缺陷与DETR的革新在计算机视觉领域目标检测任务长期被两阶段如Faster R-CNN和单阶段如YOLO、SSD方法统治。这些方法虽然效果显著但都存在一些根本性限制Anchor机制的束缚需要精心设计anchor的大小、长宽比和数量NMS后处理的矛盾既要去除冗余框又可能误删正确预测复杂pipeline区域提议、ROI对齐等多步骤处理引入大量超参数# 传统检测器典型流程示例 anchors generate_anchors(image_size) # 生成预设anchor proposals region_proposal_network(features) # 区域提议 rois roi_align(proposals, features) # ROI对齐 predictions classification_head(rois) # 分类预测 final_boxes non_max_suppression(predictions) # NMS处理DETR的创新在于用Transformer的全局注意力机制替代了这些手工设计组件传统方法组件DETR对应方案优势对比Anchor boxesObject queries无需预设形状可学习NMS二分图匹配避免启发式阈值设置多阶段处理单阶段端到端简化训练流程2. DETR核心架构深度解析2.1 骨干网络与位置编码DETR使用标准CNN如ResNet作为骨干网络提取图像特征但与传统方法不同这些特征会与位置编码结合后输入Transformerclass DETRBackbone(nn.Module): def __init__(self, resnet): super().__init__() self.body IntermediateLayerGetter(resnet, return_layers{layer4: 0}) def forward(self, images): features self.body(images.tensors) pos_encoding self.position_encoding(images) # 位置编码 return features, pos_encoding位置编码有两种实现方式正弦位置编码固定模式具有平移不变性可学习位置编码通过训练自适应调整实际应用中正弦编码在小数据集上表现更好而可学习编码在大规模数据时可能更具优势2.2 Transformer编码器-解码器结构DETR的Transformer模块是其核心创新点与传统NLP中的Transformer有所不同class DETRTransformer(nn.Module): def __init__(self, d_model512, nhead8, num_layers6): encoder_layer TransformerEncoderLayer(d_model, nhead) self.encoder TransformerEncoder(encoder_layer, num_layers) decoder_layer TransformerDecoderLayer(d_model, nhead) self.decoder TransformerDecoder(decoder_layer, num_layers) def forward(self, src, mask, query_embed, pos_embed): memory self.encoder(src, src_key_padding_maskmask, pospos_embed) hs self.decoder(query_embed, memory, memory_key_padding_maskmask, pospos_embed, query_posquery_embed) return hs, memory关键设计细节编码器处理图像特征建立全局上下文关系解码器接收固定数量的object queries可学习参数每层解码器都会输出中间预测辅助训练2.3 Object queries的奥秘Object queries是DETR中最富创意的设计之一它们作为解码器的输入数量决定了最大检测目标数每个query对应一个潜在的检测目标通过注意力机制与全局图像特征交互# 典型实现方式 num_queries 100 # COCO数据集常用值 query_embed nn.Embedding(num_queries, hidden_dim)3. 二分图匹配替代NMS的优雅方案传统检测器使用NMS去除冗余预测框而DETR采用匈牙利算法进行一对一匹配class HungarianMatcher(nn.Module): def __init__(self, cost_class1, cost_bbox1, cost_giou1): self.cost_class cost_class self.cost_bbox cost_bbox self.cost_giou cost_giou torch.no_grad() def forward(self, outputs, targets): bs, num_queries outputs[pred_logits].shape[:2] out_prob outputs[pred_logits].flatten(0, 1).softmax(-1) out_bbox outputs[pred_boxes].flatten(0, 1) tgt_ids torch.cat([v[labels] for v in targets]) tgt_bbox torch.cat([v[boxes] for v in targets]) cost_class -out_prob[:, tgt_ids] cost_bbox torch.cdist(out_bbox, tgt_bbox, p1) cost_giou -generalized_box_iou(box_cxcywh_to_xyxy(out_bbox), box_cxcywh_to_xyxy(tgt_bbox)) C self.cost_bbox * cost_bbox self.cost_class * cost_class self.cost_giou * cost_giou C C.view(bs, num_queries, -1).cpu() sizes [len(v[boxes]) for v in targets] indices [linear_sum_assignment(c[i]) for i, c in enumerate(C.split(sizes, -1))] return [(torch.as_tensor(i, dtypetorch.int64), torch.as_tensor(j, dtypetorch.int64)) for i, j in indices]匹配成本由三部分组成分类概率成本边界框L1距离成本GIoU相似度成本4. 从零实现DETR关键组件4.1 模型构建流程完整DETR模型的搭建遵循清晰的结构def build_detr(args): # 1. 构建骨干网络 backbone build_backbone(args) # 2. 构建Transformer transformer build_transformer(args) # 3. 组合成完整模型 model DETR( backbone, transformer, num_classesargs.num_classes, num_queriesargs.num_queries ) # 4. 构建匹配器和损失函数 matcher build_matcher(args) criterion SetCriterion( num_classesargs.num_classes, matchermatcher, weight_dictweight_dict ) return model, criterion4.2 训练技巧与参数设置DETR训练需要特别注意以下方面学习率调度通常采用带warmup的分步下降策略梯度裁剪防止Transformer训练不稳定损失权重精心平衡分类与回归损失# 典型训练配置 optimizer torch.optim.AdamW([ {params: [p for n, p in model.named_parameters() if backbone not in n and p.requires_grad]}, {params: [p for n, p in model.named_parameters() if backbone in n and p.requires_grad], lr: args.lr_backbone} ], lrargs.lr, weight_decayargs.weight_decay) lr_scheduler torch.optim.lr_scheduler.StepLR(optimizer, args.lr_drop)5. DETR的局限与改进方向尽管DETR带来了创新但仍存在一些挑战训练收敛慢通常需要500epoch才能达到最佳效果小目标检测性能全局注意力可能忽略细小物体计算资源需求Transformer的自注意力复杂度随图像尺寸平方增长后续改进模型如Deformable DETR通过引入可变形注意力机制有效缓解了这些问题。

相关文章:

告别Anchor和NMS:用PyTorch从零开始手搓DETR,理解Transformer如何颠覆目标检测

从零实现DETR:用Transformer重构目标检测范式 当YOLO和Faster R-CNN仍在目标检测领域占据主导地位时,Facebook Research在2020年提出的DETR(DEtection TRansformer)带来了一场范式革命。这个将Transformer引入计算机视觉的架构,彻底摒弃了沿用…...

保姆级教程:用drawio亲手绘制YOLOv5到v7的网络结构图(附源文件)

从零绘制YOLO系列网络结构:用drawio掌握目标检测模型精髓 在计算机视觉领域,YOLO(You Only Look Once)系列算法以其高效的实时目标检测能力闻名。但对于初学者来说,仅通过阅读论文或查看代码往往难以直观理解其网络架构…...

YOLOv8预测实战:如何用predict函数快速实现目标检测(附参数详解)

YOLOv8预测实战:从参数调优到工业级部署的全链路指南 引言:为什么predict函数是YOLOv8的核心入口 在计算机视觉领域,目标检测始终是技术落地的关键环节。YOLOv8作为当前最先进的实时检测框架,其predict函数就像一把瑞士军刀——看…...

照着用就行:8个降AIGC网站测评,专科生降AI率必备攻略

在如今的学术写作中,AI生成内容(AIGC)已经成为许多学生和研究者必须面对的问题。无论是论文初稿还是最终定稿,如何有效降低AI痕迹、避免查重率过高,成为了关键任务。而AI降重工具的出现,正是为了解决这一痛…...

突破Soop直播录制瓶颈:DouyinLiveRecorder全方位优化指南

突破Soop直播录制瓶颈:DouyinLiveRecorder全方位优化指南 【免费下载链接】DouyinLiveRecorder 项目地址: https://gitcode.com/gh_mirrors/do/DouyinLiveRecorder 一、录制异常现象解析 在使用DouyinLiveRecorder进行Soop平台直播录制时,用户常…...

用C#给AutoCAD加个‘皮肤‘:手把手教你开发可视化Ribbon面板(含图标资源处理)

用C#打造高颜值AutoCAD工作台:从零构建现代化Ribbon界面 在工程设计领域,AutoCAD作为行业标准工具,其原生界面往往难以满足专业团队的个性化需求。许多设计院开发者发现,通过定制Ribbon界面可以显著提升设计效率——常用工具触手可…...

FUTURE POLICE一键部署教程:基于Ubuntu20.04的快速环境搭建

FUTURE POLICE一键部署教程:基于Ubuntu20.04的快速环境搭建 你是不是也对语音处理技术感兴趣,想快速搭建一个能分析、解构语音的AI环境?今天,我就带你手把手在Ubuntu 20.04系统上,把FUTURE POLICE这个语音解构模型给跑…...

Jimeng AI Studio镜像免配置实战:bash start.sh三步完成高性能影像终端搭建

Jimeng AI Studio镜像免配置实战:bash start.sh三步完成高性能影像终端搭建 1. 引言:告别繁琐配置,三步开启AI艺术创作 如果你曾经尝试过搭建一个AI图像生成环境,大概率会被各种依赖安装、环境配置、模型下载和参数调试搞得焦头…...

Swagger3.0高效实践:RuoYi-Vue接口文档自动生成指南

Swagger3.0高效实践:RuoYi-Vue接口文档自动生成指南 【免费下载链接】RuoYi-Vue :tada: (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统,同时提供了 Vue3 的版本 …...

【与AI+】英语——ABAP基础与数据类型

以下内容由AI生成一、单词ABAP /ˈeɪbp/ ABAP语言 (Advanced Business Application Programming)Dictionary /ˈdɪkʃəneri/ 数据字典Table /ˈteɪbl/ 数据库表Structure /ˈstrʌktʃər/ 结构体Data Element /ˈdeɪtə ˈelɪmənt/ 数据元素Domain /dəˈmeɪn/ 域Type…...

如何用ER-Save-Editor轻松掌控你的艾尔登法环游戏体验

如何用ER-Save-Editor轻松掌控你的艾尔登法环游戏体验 【免费下载链接】ER-Save-Editor Elden Ring Save Editor. Compatible with PC and Playstation saves. 项目地址: https://gitcode.com/GitHub_Trending/er/ER-Save-Editor 艾尔登法环存档编辑工具、游戏角色管理神…...

掌握CREO转URDF全攻略:从理论到实践的机器人模型转换技术

掌握CREO转URDF全攻略:从理论到实践的机器人模型转换技术 【免费下载链接】creo2urdf Generate URDF models from CREO mechanisms 项目地址: https://gitcode.com/gh_mirrors/cr/creo2urdf 理论基础:为什么需要CREO到URDF的转换? 在…...

为什么越来越多公司开始为企业网盘买单?看看企业文件管理的三个阶段就知道了

作为一家从业5年的企业网盘服务商,在我接触的上千家企业里,有个场景重复出现得太多次了:一家发展了5年的公司,突然发现核心项目资料找不到。不是被删了,是散落在十几个不同的地方:员工的个人微信、个人网盘…...

Ubuntu22.04手动编译GCC12.2全流程解析与避坑指南

1. 为什么要手动编译GCC12.2? 在Ubuntu22.04系统中,默认的软件仓库可能不会立即提供最新版本的GCC编译器。虽然可以通过添加PPA源来安装较新版本,但手动编译安装GCC12.2能带来几个独特优势: 首先,你可以完全控制编译选…...

从零开始:ESP8266/ESP32智能LED控制完全指南

从零开始:ESP8266/ESP32智能LED控制完全指南 【免费下载链接】WLED Control WS2812B and many more types of digital RGB LEDs with an ESP8266 or ESP32 over WiFi! 项目地址: https://gitcode.com/GitHub_Trending/wl/WLED 在物联网与智能家居快速发展的今…...

高效整合3300+品牌图标:Simple Icons全场景应用指南

高效整合3300品牌图标:Simple Icons全场景应用指南 【免费下载链接】simple-icons SVG icons for popular brands 项目地址: https://gitcode.com/GitHub_Trending/si/simple-icons 你是否曾在设计项目中花费数小时寻找合适的品牌图标?从打开浏览…...

Hadoop+Spark+Hive招聘推荐系统 招聘大数据分析 招聘数据分析数据仓库 职位推荐系统 就业推荐系统

1、项目介绍 技术栈:Python3.9、Django框架、Sqlite 数据库、Scrapy爬虫框架、Echarts可视化、协同过滤推荐算法、Layui前端研究背景: 拉勾网每日新增数万技术岗位,信息过载使求职者难以快速定位匹配职位;传统搜索缺乏个性化&…...

VSCode搭配Keil开发STM32:从环境配置到代码跳转全流程(避坑指南)

VSCode搭配Keil开发STM32:从环境配置到代码跳转全流程(避坑指南) 在嵌入式开发领域,STM32系列芯片因其强大的性能和丰富的生态备受欢迎。然而,传统的Keil开发环境虽然稳定,但在代码编辑体验上略显陈旧。本文…...

安防监控/视频存储/云存储平台EasyCVR全场景智能视频监控解决方案深度解析

在科技高速迭代的现代社会,视频监控系统早已从单一的画面录制,升级为场所安全防控、智能化管理的核心技术支撑,一套稳定、先进、智能的视频监控系统,是保障运营安全、提升管理效率的关键。针对各行业视频监控的多元化、智能化需求…...

2026年农学林学论文降AI率推荐:理工农交叉方向用哪款

2026年农学林学论文降AI率推荐:理工农交叉方向用哪款 室友花了200多找人代降AI率,我花了不到15块自己搞定,最后检测结果还更好。 现在农学论文降AI工具不少,但真正好用的就那么几个。我前后试了六七款,留下来三四个常…...

香飘飘大力出海东南亚,香飘飘的全球之路该咋看?

据香飘飘近期公告,该公司将在泰国建设即饮饮料生产基地,预计总投资为3800万美元,折合人民币超2.6亿元,于今年5月开工。香飘飘在接受调研者提问时表示,出海系公司看到了海外市场较大的发展机会,计划将泰国作…...

Halcon点云匹配避坑指南:从STL模型到精准差异显示的5个关键步骤

Halcon点云匹配避坑指南:从STL模型到精准差异显示的5个关键步骤 在工业检测和三维重建领域,Halcon的点云匹配功能被广泛应用于产品质量控制、逆向工程等场景。然而,许多开发者在实际项目中常常遇到匹配精度不足、差异显示不直观等问题。本文将…...

MaterialSearch:用AI语义搜索技术重塑本地素材管理体验

MaterialSearch:用AI语义搜索技术重塑本地素材管理体验 【免费下载链接】MaterialSearch AI语义搜索本地素材。以图搜图、查找本地素材、根据文字描述匹配画面、视频帧搜索、根据画面描述搜索视频。Semantic search. Search local photos and videos through natura…...

3步掌握专业神经网络可视化:告别手绘尴尬,用代码生成高质量架构图

3步掌握专业神经网络可视化:告别手绘尴尬,用代码生成高质量架构图 【免费下载链接】PlotNeuralNet Latex code for making neural networks diagrams 项目地址: https://gitcode.com/gh_mirrors/pl/PlotNeuralNet 你是否曾在论文写作或技术报告中…...

【数据集】中国高分辨率国家土壤信息格网基本属性数据集(2010-2018)

一、数据集简介 在进行土壤、生态环境或农业相关研究时,高质量的空间数据至关重要。本文分享一份在国内广泛使用的权威数据集: 中国高分辨率国家土壤信息格网基本属性数据集(2010–2018) 数据贡献者:刘峰、张甘霖等&…...

Python实战:用遗传算法(GA)优化车间调度(JSP)的完整流程解析

1. 车间调度问题与遗传算法基础 车间调度问题(Job Shop Scheduling Problem, JSP)是制造业中的经典优化难题。想象一下,你管理着一个有5台机器的车间,接到10个不同产品的订单,每个产品需要按照特定顺序在不同机器上加工…...

StructBERT-Large效果展示:古汉语白话文复述识别能力实测

StructBERT-Large效果展示:古汉语白话文复述识别能力实测 1. 工具简介与核心能力 StructBERT-Large语义相似度分析工具是一款专门针对中文文本相似度判断的本地化解决方案。基于强大的StructBERT-Large中文模型,这个工具能够精准识别两个中文句子之间的…...

大学生现在这样学网络安全,明年春招offer手到擒来!

大学生现在这样学网络安全,明年春招 offer 手到擒来!(漏洞挖掘简历面试全攻略) 身边不少学网安的同学都有这困扰:学了大半年,简历上除了会用 BurpSuite啥干货没有,春招面试被问挖过什么实际漏洞…...

Fusion Pixel Font完整指南:免费开源像素字体快速入门终极教程

Fusion Pixel Font完整指南:免费开源像素字体快速入门终极教程 【免费下载链接】fusion-pixel-font 开源像素字体。支持 8、10 和 12 像素。 项目地址: https://gitcode.com/gh_mirrors/fu/fusion-pixel-font 想要为你的项目注入复古数字美学?Fus…...

AI 临床辅助与管理系统:给医院配个“智能医疗管家”

很多人觉得 AI 临床辅助与管理系统是高大上的黑科技,其实它更像医院的​全能智能助手​——既帮医生精准看病、少走弯路,又帮医院高效管流程、控风险,用技术把繁琐的临床工作和复杂的医院管理捏合在一起,让医疗更稳、更快、更省心…...