极市平台 | 超越YOLO11和D-FINE!DEIM:最强实时目标检测算法

本文来源公众号“极市平台”,仅用于学术分享,侵权删,干货满满。

原文链接:超越YOLO11和D-FINE!DEIM:最强实时目标检测算法

极市导读

本文介绍了一种改进的DETR目标检测框架DEIM,通过增加正样本数量和优化匹配质量的损失函数,显著加快了DETR模型的收敛速度,并在多个数据集上提升了性能,成为当前最优的实时目标检测方案。DEIM通过Dense O2O和MAL两项技术改进,解决了DETR在监督信号和匹配质量上的不足,使其在实时目标检测领域的表现超越了YOLO系列模型。

DEIM: DETR with Improved Matching for Fast Convergence

arXiv: https://arxiv.org/abs/2412.04234

Project webpage:https://www.shihuahuang.cn/DEIM/
GitHub:https://github.com/ShihuaHuang95/DEIM

1. 背景:DETR目标检测框架

目标检测(Object Detection) 是计算机视觉中的核心任务,用于识别图像或视频中的所有目标,并为每个目标提供其类别和位置。简单来说,目标检测结合了分类和定位的能力,既要知道目标是什么,也要知道它们在哪儿。

目前主流的目标检测方法可以分为三类:

  • • 基于区域候选(Region Proposal)的方法:例如 R-CNN 系列(如 Faster R-CNN [1])。

  • • 基于锚点(Pixel Anchor)的方法:例如 YOLO 系列(You Only Look Once [2])。

  • • 基于可学习查询(Learnable Queries)的方法:例如 DETR 系列(Detection with Transformer [3])。

实时目标检测(Real-time Object Detection) 要求模型不仅要精准,还要以极低的延迟(Latency)运行,通常需要达到或超过 30FPS,以满足实时应用需求。YOLO 系列因其优秀的性能和速度平衡,长期是实时检测领域的主流框架。它采用密集锚点(Dense Anchors)和“一对多”(One-to-Many, O2M)匹配策略,即在训练节点单个GT框会有多个匹配框优化bbox regression损失。这样的好处是,在训练过程中,对匹配的容错性比较高。为去除冗余框,YOLO 会使用非极大抑制(Non-Maximum Suppression, NMS)等后处理方法。

Detection with Transformer(DETR [3]) 是近年来备受关注的一种基于 Transformer 架构的目标检测方法。DETR 使用稀疏的可学习查

### DEIM训练方法概述 DEIM是一种用于提升实时目标检测性能的方法,其核心在于改进匹配策略损失函数的设计[^2]。这种方法能够显著优化模型的训练效率以及最终的目标检测效果,在特定硬件条件下(如NVIDIA 4090 GPU),只需较短时间即可实现较高的平均精度(AP)[^1]。 然而,在实际操作过程中可能会遇到一些技术障碍。例如,当尝试运行某些代码片段时,可能触发`NotImplementedError`异常,这通常表明当前版本的库尚未完全支持所调用的功能[^3]。以下是针对此类问题的一个通用解决思路: 如果在执行 `torchvision.transforms.v2._transform.py` 文件中的某段逻辑时抛出了上述错误,则可以考虑以下几种方式来规避该问题: - **更新依赖项**:确认已安装最新版 PyTorch torchvision 库。 - **替代方案**:查阅官方文档或其他社区资源寻找功能相似但已被充分测试过的 API 替代品。 下面给出一段简单的 Python 脚本作为示例展示如何初始化并加载预定义配置文件来进行基础设置(假设存在这样的接口供开发者使用): ```python import torch from deim.models import build_model from deim.datasets import get_coco_api_from_dataset from deim.engine import train_one_epoch, evaluate def main(): device = 'cuda' if torch.cuda.is_available() else 'cpu' # 构建模型实例 model = build_model(pretrained=True).to(device) # 加载数据集 dataset_train = ... data_loader_train = ... # 定义优化器其他超参数 optimizer = torch.optim.AdamW(model.parameters(), lr=1e-4) for epoch in range(num_epochs): train_one_epoch(model, optimizer, data_loader_train, device, epoch) if __name__ == "__main__": main() ``` 此脚本仅为示意用途,请依据具体项目需求调整相应部分的实际编码细节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值