自行编写YOLOv5自定义模型推理脚本时如何从预测结果获取类别与边界框坐标
自定义YOLOv5推理结果提取方法
通过torch.hub加载自定义训练的best.pt权重完成推理时,直接print推理返回值只能看到封装类的字符串描述,无法直接获取结构化的预测类别、边界框坐标。核心原因是推理返回值为封装完成的结果对象,而非可直接遍历的原生预测张量。
可直接落地的结果提取操作
- 提取表格格式的结构化检测结果
调用结果对象的pandas转换接口,可直接获取包含全部检测字段的DataFrame,默认字段包含对应原图尺寸的边界框像素坐标、检测置信度、类别索引、类别名称,无需手动完成坐标映射、类别解码操作。
示例代码:
# 获取单图检测的结构化表格 detect_df = predictions.pandas().xyxy[0] # 逐目标提取所需信息 for _, item in detect_df.iterrows(): bbox = [item["xmin"], item["ymin"], item["xmax"], item["ymax"]] target_class = item["name"] confidence = item["confidence"]
- 提取原生张量格式的检测结果
若需要对接自定义张量运算流程,可直接调用结果对象的xyxy属性。该属性为按推理输入拆分的张量列表,单图推理时取列表第0个元素即可,张量每行格式为[x1, y1, x2, y2, 置信度, 类别索引],坐标已对应原图尺寸,无需额外缩放计算。
示例代码:
# 获取单图检测的原生张量结果 raw_preds = predictions.xyxy[0] # 逐目标解析结果 for pred in raw_preds: x1, y1, x2, y2, conf, cls_id = pred.tolist() target_class = model.names[int(cls_id)]
- 模型加载的兼容注意事项
初始化自定义模型时,部分版本的torch.hub加载接口的自定义权重路径参数名为path,如果传参名称不匹配,可能出现模型加载不完整、输出结构异常的问题,建议采用兼容写法完成模型加载:
model = torch.hub.load('ultralytics/yolov5', 'custom', path='best.pt')
内容的提问来源于stack exchange,提问作者TechXpert
相关产品推荐
相关产品推荐

