mmdetection模型测试实战:用`tools/test.py`一键可视化预测结果并保存到指定文件夹

张开发
2026/4/18 9:18:05 15 分钟阅读

分享文章

mmdetection模型测试实战:用`tools/test.py`一键可视化预测结果并保存到指定文件夹
mmdetection模型测试实战可视化预测结果与性能深度解析在计算机视觉项目的完整生命周期中模型训练只是第一步。真正考验模型实用价值的是它在真实场景中的表现。本文将带你深入掌握mmdetection框架下的模型测试全流程从基础命令解析到高级可视化技巧再到关键性能指标的深度解读。1. 模型测试的核心价值与准备工作模型测试环节常被开发者忽视但它实际上是连接研发与落地的关键桥梁。一个在测试集上表现良好的模型才能真正投入实际应用。在mmdetection框架中测试环节不仅能输出mAP等量化指标更重要的是能直观展示模型看世界的方式。测试前需要确认三个核心文件配置文件如retinanet_r50_fpn_1x_coco.py记录模型结构和训练参数训练权重如epoch_12.pth模型学习到的参数集合测试数据集通常与验证集相同需在配置文件中正确指定建议的目录结构示例project/ ├── configs/ │ └── retinanet_r50_fpn_1x_coco.py ├── work_dirs/ │ └── retinanet_r50_fpn_1x_coco/ │ └── epoch_12.pth └── results/ # 用于存放测试输出提示测试前建议使用python tools/print_config.py configs/xxx.py检查配置文件是否完整避免因路径错误导致测试失败。2. 基础测试命令全解析最基础的测试命令包含三个核心参数python tools/test.py \ configs/retinanet_r50_fpn_1x_coco.py \ work_dirs/retinanet_r50_fpn_1x_coco/epoch_12.pth \ --eval bbox这条命令会输出如下关键指标Average Precision (AP) [ IoU0.50:0.95 | area all | maxDets100 ] 0.389 Average Precision (AP) [ IoU0.50 | area all | maxDets100 ] 0.591 Average Precision (AP) [ IoU0.75 | area all | maxDets100 ] 0.421 ...2.1 可视化输出实战想要直观查看预测效果--show-dir参数是利器python tools/test.py \ configs/retinanet_r50_fpn_1x_coco.py \ work_dirs/retinanet_r50_fpn_1x_coco/epoch_12.pth \ --show-dir results/visualization生成的文件结构results/ └── visualization/ ├── img1.jpg ├── img2.jpg └── ...可视化效果要素解读边界框颜色不同类别使用不同颜色左上角标签格式为类别名 置信度背景透明度低置信度预测会半透明显示2.2 关键参数对比参数作用适用场景输出位置--eval计算mAP等指标量化评估终端/stdout--show实时显示图像快速调试弹出窗口--show-dir保存可视化结果报告/演示指定目录--eval-options自定义评估参数精细分析终端/stdout3. 高级测试技巧与性能优化3.1 类别级精度分析修改mmdet/datasets/coco.py中的evaluate函数def evaluate( self, results, metricbbox, loggerNone, jsonfile_prefixNone, classwiseTrue, # 改为True proposal_nums(100, 300, 1000), iou_thrs[0.5], # 指定IoU阈值 metric_itemsNone ):修改后输出示例Classwise AP: | class | AP0.5 | |----------|--------| | person | 0.723 | | car | 0.681 | | dog | 0.542 |3.2 置信度阈值调整通过model.test_cfg控制输出质量# 在配置文件中添加 model dict( test_cfgdict( score_thr0.3, # 只显示置信度0.3的预测 nmsdict(typenms, iou_threshold0.5), max_per_img100 ) )效果对比高阈值如0.7减少误检但可能漏检低阈值如0.1检出更多目标但噪声增加3.3 多尺度测试增强在配置文件中启用多尺度测试test_pipeline [ dict( typeMultiScaleFlipAug, img_scale[(1333, 800), (1000, 600), (666, 400)], # 多尺度 flipTrue, # 水平翻转增强 transforms[ ... ] ) ]4. 测试结果分析与问题定位4.1 常见问题模式识别通过可视化结果可以识别典型问题漏检问题目标尺寸过小遮挡严重类别不平衡导致少数类识别差误检问题背景被误判为目标类别混淆如哈士奇被识别为狼定位不准边界框偏移框体过大/过小4.2 量化指标深度解读关键指标解析表指标计算公式合理范围优化方向AP0.5IoU阈值0.5时的AP0.5-0.9提高定位精度AP0.75IoU阈值0.75时的AP0.3-0.7优化边界框回归AR100每图100个提案的召回率0.6-0.9改进RPN网络4.3 测试结果可视化增强使用第三方工具生成更专业的分析图表import matplotlib.pyplot as plt # 绘制PR曲线 plt.plot(recall, precision) plt.xlabel(Recall) plt.ylabel(Precision) plt.title(Precision-Recall Curve) plt.savefig(pr_curve.png)5. 工程化测试方案5.1 自动化测试脚本创建可复用的测试脚本run_test.sh#!/bin/bash CONFIG$1 CHECKPOINT$2 OUT_DIR$3 python tools/test.py \ $CONFIG \ $CHECKPOINT \ --out ${OUT_DIR}/results.pkl \ --eval bbox \ --show-dir ${OUT_DIR}/visualization \ --eval-options classwiseTrue iou_thrs[0.5,0.75]5.2 测试报告生成使用Pandas生成结构化报告import pandas as pd df pd.DataFrame({ Class: [person, car, dog], AP0.5: [0.72, 0.68, 0.54], AP0.75: [0.51, 0.47, 0.32] }) df.to_markdown(performance_report.md)5.3 持续集成方案GitLab CI示例配置test_model: stage: test script: - python tools/test.py $CONFIG $CHECKPOINT --eval bbox artifacts: paths: - results/ expire_in: 1 week在实际项目中我发现将测试环节纳入持续集成流程可以提前发现模型退化问题。特别是在数据分布随时间变化的场景中定期测试能确保模型始终保持最佳状态。

更多文章