如何从MMDetection推理结果中提取坐标/形状并转换格式?
MMDetection检测结果(results)解析与格式转换
一、results格式说明
inference_detector返回的results是一个元组,不同任务下结构略有区别:
- 目标检测任务:元组仅包含检测框数据,第一个元素是长度等于类别数的列表。每个子列表对应一类的所有检测结果,每一项格式为
[x1, y1, x2, y2, score]:x1, y1:检测框左上角的像素坐标x2, y2:检测框右下角的像素坐标score:该检测结果的置信度(0-1之间)
- 实例分割任务:元组会多一个掩码数据元素,第二个元素同样是按类别划分的列表,每个子列表对应一类的实例掩码,掩码是二维数组,标记对应像素是否属于该实例
二、提取坐标/形状的示例代码
如果是目标检测任务,提取所有检测框、置信度和类别ID的代码如下:
# 初始化存储变量 all_boxes = [] all_scores = [] all_class_ids = [] # 遍历每个类别的检测结果 for class_id, bboxes in enumerate(results[0]): for bbox in bboxes: # 拆分坐标和置信度 x1, y1, x2, y2, score = bbox all_boxes.append([x1, y1, x2, y2]) all_scores.append(float(score)) all_class_ids.append(class_id)
如果是实例分割任务,提取掩码的逻辑类似,直接遍历results[1]即可。
三、转换为COCO格式的方法
MMDetection内置了工具可以直接把results转成COCO数据集格式:
单张图片结果转换
使用bbox2result(目标检测)或segm2result(实例分割)工具函数,先转成标准格式再导出为JSON:
from mmdet.core.evaluation import bbox2result import json # model.CLASSES是模型的类别名称列表,比如['cat', 'dog', ...] # 如果是实例分割,传入results[1]作为第二个参数 coco_style_result = bbox2result(results[0], model.CLASSES) # 导出为JSON文件 with open('single_image_coco_result.json', 'w') as f: json.dump(coco_style_result, f, indent=4)
批量图片结果转换
如果需要批量处理并生成符合COCO评估要求的JSON(包含图片ID等信息),可以参考MMDetection官方测试脚本的逻辑,结合数据集标注信息来生成,核心还是用上述转换函数来处理单张结果后汇总。
内容的提问来源于stack exchange,提问作者Firok
相关产品推荐
相关产品推荐

