解决方案直达
说重点,官方文档-实用工具-误差分析的内容,实际上可视化的结果就已经包含了每个类别的PR曲线图。只是没有直说,下面详细介绍官方PR曲线图的出图过程。
1. 背景
MMdetection2.X版本绘制PR曲线的程序,网上常可搜到eval_pr_curve.py程序。但由于3.0以上版本已经移除了mmdet.datasets中的builder.py,导致无法载入build_datasets,整个程序修改变得困难。当然,可以选择装2.X版本,没试过,应该能解决。
2. 先生成test.bbox.json文件
打开以下路径的程序,找到末尾注释掉的format_only和outfile_prefix两个键值,如下图。
configs/_base_/datasets/coco_detection.py
将其重写到配置文件中的test_evaluator字典里,如下图。(自己的训练配置文件如何继承可以看官方文档,不建议在coco_detection.py等原配置文件上直接修改。)
在终端运行以下指令,将会在./work_dirs/coco_detection里生成test.bbox.json文件。注:我把训练生成的配置文件复制并修改后放在了work_dirs文件夹下,最佳权重放在了新建的checkpoints文件夹下,请对应修改。
python tools/test.py work_dirs/copy_lcq.py checkpoints/epoch25.pth --show-dir output
3. 生成PR曲线图及其他一些误差可视化图
在得到bbox的json格式文件后,运行如下指令。注:在mmdetection文件夹下新建results文件夹,用于存放生成的图片;--ann=后需要对应修改自己的测试集的标注文件路径。
python tools/analysis_tools/coco_error_analysis.py work_dirs/coco_detection/test.bbox.json results --ann=data/coco/annotations/test2017.json
生成的某个类别的PR曲线如下:
4. 后续
如何针对生成的PR曲线图进行修改(比如去除不想要的,引入同一类别的对比曲线), 需研究coco_error_analysis.py代码。欢迎大家一起分享修改心得。