跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
PythonAI算法

DEIM 实时目标检测算法及 Visdrone2019 数据集实战

综述由AI生成DEIM 是 DETR 的改进版,通过密集 O2O 匹配和匹配感知损失加速收敛。在 Visdrone2019 数据集上验证了 D-FINE-S 模型,对比 YOLOv8/11 显示精度提升但显存占用高、推理稍慢。提供了从环境搭建、配置修改到 ONNX 导出的完整流程及常见报错解决方案。

MqEngine发布于 2026/3/26更新于 2026/5/1411 浏览
DEIM 实时目标检测算法及 Visdrone2019 数据集实战

DEIM:最强实时目标检测算法 -Visdrone2019 无人机数据集实战

主要内容

  1. 论文解析
  2. 基于 DEIM-D-FINE-S 训练 Visdrone2019 无人机数据集
    • Visdrone2019 数据集介绍
    • 模型训练、验证及测试
    • ONNX 导出与测试
    • 与 YOLOv8/11 进行结果对比

服务器:NVIDIA RTX4090 24G
运行环境:Python=3.8(要求>=3.8),torch2.3.1+cu121(要求>=2.0.1)

arXiv: https://arxiv.org/abs/2412.04234
Project webpage: https://www.shihuahuang.cn/DEIM/
GitHub: https://github.com/ShihuaHuang95/DEIM

训练和使用结果:

  1. map50 高于 YOLOv8 将近 6 个点达 47%,训练显存占用较大,batchsize 为 8 需要 20G,训练速度比 YOLOv8 慢一倍,12 小时左右;
  2. ONNX 推理速度要慢于 YOLOv8,需要 9-10ms;
  3. 检出率比较高,但是误检和同一个目标出现两个重叠框但不同类别现象较多。

一、论文解析

DEIM(DETR with Improved Matching for Fast Convergence)是一篇关于加速基于 Transformer 架构(DETR)的实时目标检测的训练框架的论文。以下是该论文的详细解析:

1 研究背景

目标检测是计算机视觉中的一个基本任务,广泛应用于自动驾驶、机器人导航等领域。实时目标检测要求模型不仅能精准检测目标,还要以极低的延迟运行。DETR(Detection Transformer)是一种基于 Transformer 的端到端目标检测框架,通过使用匈牙利算法进行一对一(O2O)匹配,消除了对手工设计的非极大值抑制(NMS)的需求,但其收敛速度慢成为一大挑战。

2 研究问题

DETR 模型在训练过程中存在慢收敛的问题,主要原因是其一对一(O2O)匹配机制导致正样本数量稀少,且存在大量低质量匹配。这限制了模型的有效学习,尤其是对小目标的检测。

3 解决方案

为了解决上述问题,DEIM 提出了以下两个主要策略:

密集 O2O 匹配(Dense O2O):
通过增加每张图像中的目标数量,生成更多的正样本,从而提供更密集的监督信号,加速模型收敛。
这可以通过经典的数据增强技术(如马赛克和混合)轻松实现,这些技术在保持一对一匹配框架的同时,每张图像生成额外的正样本。

匹配感知损失(MAL, Matchability-Aware Loss):
一种新的损失函数,优化不同质量级别的匹配,特别是低质量匹配,提升模型性能。
MAL 通过将匹配查询与目标之间的 IoU(交并比)与分类置信度结合,根据匹配质量调整惩罚。
相比传统的 Varifocal Loss(VFL),MAL 在处理低质量匹配时更有效,特别是在训练的早期阶段。

在这里插入图片描述

4 实验验证

在 COCO 数据集上的实验表明,DEIM 显著加速了 DETR 模型的收敛,减少了 50% 的训练时间,同时提升了检测精度。与现有的实时检测器(如 YOLO 系列和 RT-DETR)相比,DEIM 在性能和训练效率上均表现出色,尤其是在小目标检测方面有显著提升。

当与 RT-DETR 和 D-FINE 集成时,DEIM 在减少训练时间的同时提高了性能。
特别是与 RT-DETRv2 集成时,DEIM 在 NVIDIA 4090 GPU 上单天训练就达到了 53.2% 的平均精度(AP)。

在这里插入图片描述

DEIM 训练的实时模型在没有额外数据的情况下,超越了领先的实时目标检测器。例如,DEIM-D-FINE-L和DEIM-D-FINE-X在 NVIDIA T4 GPU 上分别以 124 FPS 和 78 FPS 的速度达到了 54.7% 和 56.5% 的 AP。

在这里插入图片描述

在这里插入图片描述

5 结论

DEIM 通过密集 O2O 匹配和匹配感知损失,有效解决了 DETR 模型的慢收敛问题,提升了实时目标检测的性能,为该领域设定了新的基准。DEIM 通过增加正样本数量和优化低质量匹配,显著提升了 DETR 模型的训练效率和检测性能。

二、基于 DEIM-D-FINE-S 训练 Visdrone2019 无人机数据集

1 环境安装

步骤 1:创建环境

conda create -n deim python=3.8.13

步骤 2:安装 torch
版本:要求大于 2.0.1,这里安装 2.3.1

# CUDA 11.8 conda install pytorch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 pytorch-cuda=11.8-c pytorch -c nvidia 
# CUDA 12.1 conda install pytorch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 pytorch-cuda=12.1-c pytorch -c nvidia 
# CPU Only conda install pytorch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 cpuonly -c pytorch 

步骤 3:安装 deim 其他依赖
注意:calflops 安装或训练报错可见文末尾。

conda activate deim pip install -r requirements.txt 

2 Visdrone2019 数据集准备

2.1 简介

VisDrone 数据集是由天津大学等团队开源的一个大型无人机视角的数据集,官方提供的数据中训练集是 6471、验证集是 548、测试集 1610 张。数据集共提供了以下 12 个类,分别是:'忽略区域', 'pedestrian', 'people', 'bicycle', 'car', 'van','truck', 'tricycle', 'awning-tricycle', 'bus', 'motor', 'others',其中忽略区域、others 是非有效目标区域,本项目中予以忽略,只使用'pedestrian', 'people', 'bicycle', 'car', 'van','truck', 'tricycle', 'awning-tricycle', 'bus', 'motor'10 个类;

2.2 数据集制作

注意:这里直接下载已处理好的coco 格式的 Visdrone2019 数据集进行训练,同时注意该数据集图片命名已改变,但其他无影响。

3 配置文件修改

3.1 数据集配置文件修改

新建 DEIM-main/configs/dataset/custom_xulvisdrone.yml 文件,内容如下:
注意修改项:类别num_classes、训练集图像路径img_folder、训练集 coco 标签ann_file、验证集图像路径img_folder、验证集 coco 标签ann_file四项。
另外,验证测试集精度修改验证集图像路径 img_folder、验证集 coco 标签 ann_file 两项即可。

task: detection evaluator:type: CocoEvaluator iou_types:['bbox',] num_classes:10# your dataset classes remap_mscoco_category:False train_dataloader:type: DataLoader dataset:type: CocoDetection img_folder: DEIM-main/visdrone2019_coco/train2017 ann_file: DEIM-main/visdrone2019_coco/annotations/instances_train2017.json return_masks:False transforms:type: Compose ops:~ shuffle:True num_workers:4 drop_last:True collate_fn:type: BatchImageCollateFunction val_dataloader:type: DataLoader dataset:type: CocoDetection img_folder: DEIM-main/visdrone2019_coco/val2017 ann_file: DEIM-main/visdrone2019_coco/annotations/instances_val2017.json return_masks:False transforms:type: Compose ops:~ shuffle:False num_workers:4 drop_last:False collate_fn:type: BatchImageCollateFunction 
3.2 训练过程配置参数修改

注意:这边训练 configs/deim_dfine/deim_hgnetv2_s_coco.yml,它是层层调用其他配置文件,优先采用 configs/deim_dfine/dfine_hgnetv2_s_coco.yml 和 configs/base/deim.yml 内容。

在这里插入图片描述

所有具体步骤如下:【默认 640 训练只需修改步骤二和步骤四】
步骤一:保存路径+epoch 设置
configs/deim_dfine/deim_hgnetv2_s_coco.yml 修改 epoch 和保存路径等参数,默认 132epoch;

在这里插入图片描述

步骤二:设置自定义数据集
configs/deim_dfine/dfine_hgnetv2_s_coco.yml 修改自定义数据集文件调用,如下:

在这里插入图片描述

步骤三:训练尺寸
configs/base/deim.yml 修改训练尺寸,默认 640,Mosaic 尺寸设置【切成 4 块】:

在这里插入图片描述

步骤四:batch_size 设置
configs/base/dataloader.yml 修改 total_batch_size【由原先 32改为 8】,640*640 大概需要20G显存。

在这里插入图片描述

4 模型训练

这里仅训练 deim_dfine-s 模型,模型输入尺寸 640*640,训练 132 轮,且利用官网 coco 预训练权重进行微调!

在这里插入图片描述

训练命令如下:

# deim_dfine_hgnetv2_s_coco_120e.pth 为 coco 预训练权重 python train.py -c configs/deim_dfine/deim_hgnetv2_s_coco.yml --use-amp --seed=0-t deim_dfine_hgnetv2_s_coco_120e.pth 

训练中,可利用tensorboard --logdir=outputs/deim_hgnetv2_s_coco/summary终端运行可视化训练过程,summary 中包含一个 events.out.tfevents.xxx 文件。将下面的网页用谷歌浏览器打开,如果没有内容大概率是路径错误。

在这里插入图片描述

可视化结果如下:

在这里插入图片描述

5 模型验证

对数据集进行验证的命令依然是 train.py,启用–test-only 参数仅验证不训练。
验证的命令如下:

# best_stg2.pth 为训练 132 轮最佳 map50:95 的精度权重 python train.py -c configs/deim_dfine/deim_hgnetv2_s_coco.yml --test-only -r outputs/deim_hgnetv2_s_coco/best_stg2.pth 
5.1 maxDets=100 验证

Visdrone 数据集验证结果如下【maxDets=100】,map50=0.474:

在这里插入图片描述

Visdrone 数据集测试集结果如下【maxDets=100】,map50=0.396:

在这里插入图片描述

5.2 maxDets=300 验证

maxDets:该指标的意思是分别保留测试集的每张图上置信度排名第 1、前 10、前 100 个预测框,根据这些预测框和真实框进行比对,来计算 AP、AR 等值。但是,在 WidePerson 等密集目标数据集中,尽管绝大部分图片中目标的数量在 100 以内,但却存在某些图片中包含近 200 个目标,那么我们再使用 maxDets=100 就不符合要求了,因此改成 300 进行验证测试。
修改:前往环境中 faster_coco_eval 依赖包进行修改,改一行即可:
anaconda3/envs/yolov7/lib/python3.8/site-packages/faster_coco_eval/core/cocoeval.py

在这里插入图片描述

Visdrone 数据集验证结果如下【maxDets=300】,map50=0.475:

在这里插入图片描述

Visdrone 数据集测试集结果如下【maxDets=300】,map50=0.397:

在这里插入图片描述

6 模型测试

测试的命令如下:

python tools/inference/torch_inf.py -c configs/deim_dfine/deim_hgnetv2_s_coco.yml -r outputs/deim_hgnetv2_s_coco/best_stg2.pth --input visdrone2019_coco/images/test/0000006_00159_d_0000001.jpg --device cuda:0

注意:原代码不带类别,只有索引,可自己在绘图时自行加入!
结果可视化如下,置信度阈值 0.4:

在这里插入图片描述

7 onnx 推理与可视化

注意:需安装 onnx 和 onnxruntime 等.

pip install onnx==1.14.1-i https://pypi.tuna.tsinghua.edu.cn/simple pip install onnxruntime-gpu==1.18.1-i https://pypi.tuna.tsinghua.edu.cn/simple 
7.1 导出 onnx
python tools/deployment/export_onnx.py -c configs/deim_dfine/deim_hgnetv2_s_coco.yml -r outputs/deim_hgnetv2_s_coco/best_stg2.pth 

利用 netron 打开,显示如下:

在这里插入图片描述

7.2 运行官方的 onnx 推理脚本

注意:结果与 pth 存在偏差,可能是预处理影响。

python tools/inference/onnx_inf.py --onnx outputs/deim_hgnetv2_s_coco/best_stg2.onnx --input visdrone2019_coco/images/test/0000006_00159_d_0000001.jpg 

可视化如下:onnx(左)、pth(右)

在这里插入图片描述

7.3 运行自定义 onnx 推理脚本

注意:该脚本无 torch,只包含 numpy、opencv 和 onnxruntime 三个依赖。
推理速度如下:

在这里插入图片描述

8 与 YOLOv8\11 结果比较

Visdrone2019 实验结果对比如下:

在这里插入图片描述

9 报错信息

报错 1:RuntimeError: CUDA error: device-side assert triggered
原因:数据集配置有误,导致类别 id 与 yaml 文件中的索引号匹配不上导致的,这边自定义数据集要求 ID 索引从 0 开始,如 10 个类,则对应 0-9。

报错 2:Could not load library 2 libcudnn cnn train.so.8. Error. /usr/local/cuda-12.1/lib64/ibcudnn cnn train.so.8: undefined symbol
原因:安装 calflops 会携带装 nvidia-cudnn-cu12,而环境 nvidia-cudnn-cu12 容易与系统的 cudnn 冲突导致报错。所以要么把系统里面的 cudnn 去掉 (不推荐,如果部署其他的如 Tensor t 时会出现问题,反而更麻烦)。要么把虚拟环境中的 cudnn 去掉 (推荐),如 pip uninstall nvidia-cudnn-cu12。

报错 3:ModuleNotFoundError: No module named 'calflops'
原因:与报错 2 冲突,因此我们将 engine/misc/profiler_utils.py 相关内容注释,该 calflops 仅计算 FLOPs 等功能。

在这里插入图片描述

目录

  1. DEIM:最强实时目标检测算法 -Visdrone2019 无人机数据集实战
  2. 主要内容
  3. 一、论文解析
  4. 1 研究背景
  5. 2 研究问题
  6. 3 解决方案
  7. 4 实验验证
  8. 5 结论
  9. 二、基于 DEIM-D-FINE-S 训练 Visdrone2019 无人机数据集
  10. 1 环境安装
  11. CUDA 11.8 conda install pytorch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 pytorch-cuda=11.8-c pytorch -c nvidia
  12. CUDA 12.1 conda install pytorch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 pytorch-cuda=12.1-c pytorch -c nvidia
  13. CPU Only conda install pytorch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 cpuonly -c pytorch
  14. 2 Visdrone2019 数据集准备
  15. 2.1 简介
  16. 2.2 数据集制作
  17. 3 配置文件修改
  18. 3.1 数据集配置文件修改
  19. 3.2 训练过程配置参数修改
  20. 4 模型训练
  21. deimdfinehgnetv2scoco120e.pth 为 coco 预训练权重 python train.py -c configs/deimdfine/deimhgnetv2scoco.yml --use-amp --seed=0-t deimdfinehgnetv2scoco120e.pth
  22. 5 模型验证
  23. beststg2.pth 为训练 132 轮最佳 map50:95 的精度权重 python train.py -c configs/deimdfine/deimhgnetv2scoco.yml --test-only -r outputs/deimhgnetv2scoco/best_stg2.pth
  24. 5.1 maxDets=100 验证
  25. 5.2 maxDets=300 验证
  26. 6 模型测试
  27. 7 onnx 推理与可视化
  28. 7.1 导出 onnx
  29. 7.2 运行官方的 onnx 推理脚本
  30. 7.3 运行自定义 onnx 推理脚本
  31. 8 与 YOLOv8\11 结果比较
  32. 9 报错信息
  • 💰 8折买阿里云服务器限时8折了解详情
  • GPT-5.5 超高智商模型1元抵1刀ChatGPT中转购买
  • 代充Chatgpt Plus/pro 帐号了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • AMD 显卡 llama.cpp 部署指南及兼容性优化方案
  • ROS 机器人开发第 1 天:Linux 终端命令与常用实践
  • OpenClaw 浏览器控制方案:使用 Chrome Debug 模式保留登录状态
  • Trae 集成 GitHub MCP Server 配置与自定义智能体
  • AI 辅助编程工具:GitHub Copilot 安装与使用指南
  • AI 数据标注平台的选型与实践:效率提升背后的技术逻辑
  • Java 后端架构演进:从单机到微服务及技术选型
  • GitHub 国内镜像站汇总与高速访问方案
  • 基于 Go 的开源企业级即时通讯系统 TangSengDaoDaoServer
  • Conda 升级 Python 版本与新建环境的差异分析
  • 区块链共识算法:时间长河(Time River Consensus)
  • Ubuntu 20.04 安装 ROS Noetic 指南
  • ESP32 无人机合规识别:ArduRemoteID 开源方案详解
  • Raphael AI:免费无限制的 AI 图像生成器
  • Stable Diffusion WebUI Docker 部署指南
  • Ollama 快速部署大模型:Windows/Linux/Mac 通用教程
  • 斯坦福 2025 AI Index Report 深度解读:技术扩散与产业变革
  • WebODM 免费开源无人机影像处理全流程指南
  • SpringBoot 整合轻量级安全框架 JWE 实战详解
  • Visual Studio 2022 无法使用 Copilot 的排查与解决

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online