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.py | 3.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曲线比旧版更加丰富。每个类别的曲线都包含以下关键信息:
- AP值标注:直接显示在曲线图例中
- 置信度阈值标记:曲线上会标注不同阈值点
- 多尺度表现:可选显示不同尺度目标的PR曲线
提示:生成的图片默认保存在output_dir目录下,文件名格式为
[类别名]_pr_curve.png
4. 高级技巧与个性化定制
官方工具虽然强大,但有时我们需要更灵活的定制。以下是几个实用技巧:
4.1 筛选特定类别
如果只想分析部分类别,可以使用--classwise参数:
python tools/analysis_tools/coco_error_analysis.py \ [...] \ --classwise person car4.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. 常见问题解决方案
在实际使用过程中,可能会遇到以下问题:
JSON文件生成失败
- 检查
format_only和outfile_prefix配置是否正确 - 确保
ann_file路径准确 - 验证模型权重文件是否兼容
- 检查
可视化工具报错
- 确认JSON文件格式正确(应该是COCO结果格式)
- 检查标注文件与测试集匹配
- 确保MMdetection版本≥3.0.0
PR曲线显示异常
- 低AP值可能是模型在该类别表现不佳
- 曲线剧烈波动可能是测试样本太少
- 全零曲线可能是类别ID不匹配
经过多次项目实践,我发现新版工具虽然学习曲线略陡,但一旦掌握,能提供的分析维度远比旧版丰富。特别是在模型调优阶段,综合的误差分析功能可以帮我们快速定位问题所在。