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

【已解决】ERROR:The testing results of the whole dataset is empty

解决MMdetection测试结果为空的问题:学习率设置不当的排查与修复

一、问题描述

在使用MMdetection进行对比实验时,遇到了如下错误:

Loading and preparing results... 05/30 15:29:43 - mmengine - ERROR - C:\Users\DaoXin\anaconda3\lib\site-packages\mmdet\evaluation\metrics\coco_metric.py - compute_metrics - 465 - The testing results of the whole dataset is empty.

错误信息明确指出:整个数据集的测试结果为空

二、初步排查:排除数据集问题

首先考虑常见原因:配置文件中的类别标签(class_name)与COCO数据集JSON文件中的标签不对应。但经过验证:

  • 相同的COCO数据集在MMdetection的其他算法(如Faster R-CNN、YOLOX)中可正常运行;
  • 手动检查配置文件的class_name与JSON文件的categories字段,标签完全一致。

结论:数据集本身及标签映射无问题,问题出在算法的参数设置上。

三、核心原因:学习率(LR)设置过高

进一步分析发现,在运行某些对比实验时(如尝试使用较大的学习率加速训练),模型可能因参数更新幅度过大而无法收敛,导致测试时未生成有效检测结果。

  • 默认学习率:MMdetection中部分算法(如Cascade R-CNN、Swin Transformer等)的默认学习率为0.01(针对8卡训练场景);
  • 问题场景:当使用单卡训练或数据集规模较小时,0.01的学习率可能导致梯度爆炸或模型震荡,最终输出空结果。
四、解决方案:降低学习率

将配置文件中的学习率从0.01调整为0.05,如果还是不行,就逐步对半向下调整,修改示例如下:

# 原配置文件中的学习率设置(通常在schedule.py或模型配置文件中)
optim_wrapper = dict(optimizer=dict(lr=0.01),paramwise_cfg=dict(bias_lr_mult=2., bias_decay_mult=0.),clip_grad=dict(max_norm=35, norm_type=2))# 修改后(关键改动:lr=0.005)
optim_wrapper = dict(optimizer=dict(lr=0.005),paramwise_cfg=dict(bias_lr_mult=2., bias_decay_mult=0.),clip_grad=dict(max_norm=35, norm_type=2))

修改后重新训练并测试,模型正常生成检测结果,错误消失。

五、扩展建议:学习率调整策略
  1. 根据训练卡数调整
    • 若使用单卡训练,默认学习率需除以GPU数量(如8卡默认0.01,单卡应设为0.01/8=0.00125,可近似取0.001)。
  2. 使用学习率预热(Warm-up)
    在训练初期使用更小的学习率(如0.0001)逐步提升,避免模型初始训练时因梯度不稳定而崩溃。
  3. 监控训练日志
    若训练过程中损失值(Loss)突然飙升或长时间不下降,可能是学习率过高,需及时调整。
六、总结

MMdetection中“测试结果为空”的错误可能由多种原因导致,当排除数据集标签问题后,学习率设置是需要重点排查的参数之一。合理的学习率设置需结合训练资源(GPU数量)、数据集规模和模型复杂度综合调整,建议从小值开始尝试并逐步优化。通过本次调整,不仅解决了报错问题,也为后续对比实验的稳定性提供了保障。

http://www.xdnf.cn/news/10007.html

相关文章:

  • 深入解析Go语言数据类型:从底层到高级应用
  • 抽奖系统抽奖活动管理流程
  • [3D GISMesh]三角网格模型中的孔洞修补算法
  • 在 Mac 下 VSCode 中的终端使用 option + b 或 f 的快捷键变成输入特殊字符的解决方案
  • 【python基础知识】变量和简单数据类型
  • 基于 HT for Web 轻量化 3D 数字孪生数据中心解决方案
  • 随记 配置服务器的ssl整个过程
  • Netty 实战篇:为 Netty RPC 框架增加超时控制与重试机制,防止系统雪崩
  • ⭐ Unity AVProVideo插件自带播放器 脚本重构 实现视频激活重置功能
  • 在日常管理服务器中如何防止SQL注入与XSS攻击?
  • STM32G4 电机外设篇(二) VOFA + ADC + OPAMP
  • CloudCompare-源码分析-处理滚轮事件
  • 【Elasticsearch】suggest_mode
  • LangChain整合Milvus向量数据库实战:数据新增与删除操作
  • Centos7.x内网环境Jenkins前端打包环境配置
  • C#定时器深度对比:System.Timers.Timer vs System.Threading.Timer性能实测与选型指南
  • PECVD 生成 SiO₂ 的反应方程式
  • 数据分类分级的实践与反思:源自数据分析、治理与安全交叉视角的洞察
  • Python训练day34
  • LangChain-LangGraph框架 应用实例
  • 超低延迟与高稳定性的行业领先直播解决方案
  • RocketMQ 三大消息类型深度解析:普通消息、延迟消息、事务消息
  • C++ —— B/类与对象(中)
  • Python字典键的使用与应用:从基础到高级实践
  • OCC笔记:BRepMesh_IncrementalMesh的使用
  • python打卡day40@浙大疏锦行
  • 汽车高速通信的EMC挑战
  • Langchain4j Function Calling (5)
  • 关于ffplay在macos上运行奔溃的问题
  • 嵌入式开发学习日志(linux系统编程--进程(4)——线程锁)Day30