mmdetection test
时间: 2025-05-13 16:56:22 浏览: 25
### 使用 MMDetection 进行模型测试
#### 测试已有的预训练模型
对于已经存在的预训练模型,可以利用 `tools/test.py` 脚本来完成测试过程。该脚本会加载指定的配置文件和权重文件,并基于验证集进行性能评估[^1]。
命令如下所示:
```bash
python tools/test.py ${CONFIG_FILE} ${CHECKPOINT_FILE} [--out ${RESULT_FILE}] [--eval ${EVAL_METRICS}]
```
其中 `${CONFIG_FILE}` 是用于定义网络结构和其他参数的配置文件路径;`${CHECKPOINT_FILE}` 则是指向经过训练得到的最佳模型权重文件的位置;可选参数 `--out` 可以用来存储最终结果至特定位置;而通过设置 `--eval` 参数可以选择不同的评价指标来衡量模型表现情况,比如 COCO 数据集中常用的 AP 值等[^2]。
#### 对单张图像执行推理
如果仅需针对某一张具体图片做预测,则可通过调用 `mmdet.apis.inference_detector()` 函数实现这一功能。此外还可以借助于项目自带的例子程序 `image_demo.py` 来快速上手体验整个流程[^3]:
代码片段如下:
```python
from mmdet.apis import init_detector, inference_detector
import mmcv
config_file = 'configs/faster_rcnn_r50_fpn_1x_coco.py'
checkpoint_file = 'checkpoints/faster_rcnn_r50_fpn_1x_coco.pth'
model = init_detector(config_file, checkpoint_file)
img = 'test.jpg' # 或者也可以传入 numpy 数组形式的数据
result = inference_detector(model, img)
mmcv.imshow_det_bboxes(img, result, model.CLASSES, show=True)
```
上述代码首先初始化了一个 Faster R-CNN 的实例化对象 `model` ,接着读取了一幅名为 test.jpg 的待测样本并将其送入到先前建立好的神经网络当中获取分类标签以及边界框坐标信息组成的元组变量 `result` 。最后一步则是可视化这些检测出来的目标所在区域及其类别名称。
#### 计算每种类别的 mAP (mean Average Precision)
当希望了解不同物体类型的平均精确率时,可以通过修改评测选项中的 eval_metrics 参数值为 bbox 来获得更加详细的统计报告。此部分详情可见相关视频讲解资料。
另外值得注意的是,在某些特殊场景下可能还会涉及到额外定制化的处理逻辑或者调整默认阈值等情况发生,因此建议开发者们仔细阅读官方文档说明以便更好地满足实际需求。
#### 模型复杂度分析(FLOPs 和 Params)
为了估算所构建系统的运算负担大小,我们可以采用 flops_count_table 方法来进行初步判断。尽管如此,由于其本身的局限性决定了所得数值仅供参考之用而已,正式发表前仍有必要采取更为严谨的方式重新核实一遍准确性[^4]。
```python
from mmdet.models import build_detector
from mmcv.cnn.utils.flops_counter import get_model_complexity_info
cfg = Config.fromfile('configs/faster_rcnn_r50_fpn_1x_coco.py')
model = build_detector(cfg.model).cuda()
if hasattr(model, 'forward_dummy'):
model.forward = model.forward_dummy
input_shape = (3, 1280, 800) # 输入分辨率设定
flops, params = get_model_complexity_info(model, input_shape)
split_line = '=' * 30
print(f'{split_line}\nInput shape: {input_shape}\n'
f'Flops: {flops}\nParams: {params}\n{split_line}')
print('!!!Please be cautious if you use the results in papers. '
'You may need to check if all ops are supported and verify that the '
'flops computation is correct.')
```
阅读全文
相关推荐


















