告别eval_pr_curve.py!MMdetection 3.X版本PR曲线绘制保姆级教程(附完整配置文件修改)
2026/6/13 4:40:00 网站建设 项目流程

MMdetection 3.X版本PR曲线绘制全攻略:从配置文件修改到可视化分析

还在为MMdetection 3.X版本中消失的eval_pr_curve.py而烦恼?作为从2.X版本迁移过来的开发者,我完全理解这种工具链断裂带来的困扰。本文将带你彻底解决这个痛点,不仅详细介绍新版可视化工具的使用方法,还会分享几个官方文档没提到的实用技巧。

1. 版本变迁与核心工具链变化

MMdetection从2.X升级到3.X版本后,整个工具链发生了显著变化。最让开发者头疼的莫过于原先常用的eval_pr_curve.py脚本无法再使用。这是因为3.X版本重构了数据集加载方式,移除了mmdet.datasets中的builder.py模块,导致旧脚本依赖的build_datasets功能失效。

新版其实提供了更强大的可视化工具——coco_error_analysis.py,它不仅能绘制PR曲线,还能提供全面的误差分析。以下是两个版本工具的主要对比:

功能特性2.X版本eval_pr_curve.py3.X版本coco_error_analysis.py
PR曲线绘制
多类别对比需要手动修改代码原生支持
误差分析功能
输出可视化类型单一PR曲线多种分析图表
配置文件兼容性需要特殊处理与新版配置完全兼容

2. 生成测试结果JSON文件

要使用coco_error_analysis.py工具,首先需要生成包含检测结果的JSON文件。这个步骤的关键在于正确配置测试评估器(test_evaluator)。

2.1 配置文件修改实战

找到你的训练配置文件(通常位于configs目录下),定位到test_evaluator部分。以下是需要添加的关键参数:

test_evaluator = dict( type='CocoMetric', metric='bbox', format_only=True, # 关键参数,确保输出JSON文件 outfile_prefix='./work_dirs/coco_detection/test', # 输出文件前缀 ann_file=data_root + 'annotations/instances_val2017.json' # 标注文件路径 )

重要提示:不要在基础配置文件(如coco_detection.py)上直接修改,而应该在你的训练配置文件中覆盖这些设置。这样可以避免影响其他实验。

2.2 运行测试命令

配置完成后,使用以下命令生成JSON文件:

python tools/test.py \ configs/your_config.py \ checkpoints/your_model.pth \ --work-dir work_dirs/your_exp

成功执行后,你会在work_dirs/your_exp目录下找到test.bbox.json文件。这个文件包含了模型在所有测试图片上的检测结果,是后续可视化分析的基础。

3. 使用coco_error_analysis.py进行可视化

有了JSON结果文件后,就可以利用新版工具进行全面的可视化分析了。

3.1 基础使用命令

python tools/analysis_tools/coco_error_analysis.py \ work_dirs/your_exp/test.bbox.json \ output_dir \ --ann=data/coco/annotations/instances_val2017.json

这个命令会生成一系列分析图表,包括:

  • 每个类别的PR曲线
  • 误差类型分布
  • 不同面积目标的检测表现
  • 置信度分布分析

3.2 解读生成的PR曲线

工具生成的PR曲线比旧版更加丰富。每个类别的曲线都包含以下关键信息:

  1. AP值标注:直接显示在曲线图例中
  2. 置信度阈值标记:曲线上会标注不同阈值点
  3. 多尺度表现:可选显示不同尺度目标的PR曲线

提示:生成的图片默认保存在output_dir目录下,文件名格式为[类别名]_pr_curve.png

4. 高级技巧与个性化定制

官方工具虽然强大,但有时我们需要更灵活的定制。以下是几个实用技巧:

4.1 筛选特定类别

如果只想分析部分类别,可以使用--classwise参数:

python tools/analysis_tools/coco_error_analysis.py \ [...] \ --classwise person car

4.2 对比不同模型结果

要比较两个模型的PR曲线,可以先分别生成它们的JSON结果,然后:

from mmdet.evaluation import analyze_results analyze_results.compare_pr_curves( 'work_dirs/model1/test.bbox.json', 'work_dirs/model2/test.bbox.json', ann_file='data/coco/annotations/instances_val2017.json', output_dir='comparison_results' )

4.3 自定义可视化样式

如果想修改曲线样式(如颜色、线宽等),可以找到coco_error_analysis.py中的绘图代码部分。主要修改位置在:

# 大约在文件第150行附近 plt.plot(recall, precision, linewidth=2, # 修改线宽 color='red', # 修改颜色 label=f'{class_name} (AP={ap:.3f})')

5. 常见问题解决方案

在实际使用过程中,可能会遇到以下问题:

  1. JSON文件生成失败

    • 检查format_onlyoutfile_prefix配置是否正确
    • 确保ann_file路径准确
    • 验证模型权重文件是否兼容
  2. 可视化工具报错

    • 确认JSON文件格式正确(应该是COCO结果格式)
    • 检查标注文件与测试集匹配
    • 确保MMdetection版本≥3.0.0
  3. PR曲线显示异常

    • 低AP值可能是模型在该类别表现不佳
    • 曲线剧烈波动可能是测试样本太少
    • 全零曲线可能是类别ID不匹配

经过多次项目实践,我发现新版工具虽然学习曲线略陡,但一旦掌握,能提供的分析维度远比旧版丰富。特别是在模型调优阶段,综合的误差分析功能可以帮我们快速定位问题所在。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询