You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将YoloV5模型结果转为Pandas后再转回原结果对象

解决方案:修改Results对象的pred属性复用官方方法

Yolov5的Results对象核心检测数据存储在pred属性中,它是一个张量列表,每个元素对应单张图片的检测结果,格式为[x1, y1, x2, y2, confidence, class](float32类型,形状为[N,6])。你只需将处理后的DataFrame转换成对应格式的张量,替换pred中对应位置的元素,即可继续使用官方的render()、crop()等方法。

具体步骤(单张图片示例)

假设你已经得到处理后的top_20 DataFrame(对应第一张图的检测结果):

  1. 提取必要列并转换为张量
    必须严格按照xmin, ymin, xmax, ymax, confidence, class的顺序提取列,保证和原始pred张量格式一致:

    import torch
    
    # 从DataFrame提取核心检测数据,转换为float32张量
    top_20_tensor = torch.tensor(
        top_20[['xmin', 'ymin', 'xmax', 'ymax', 'confidence', 'class']].values,
        dtype=torch.float32
    )
    
  2. 替换Results对象的检测数据
    直接修改results.pred列表中对应图片的元素:

    # 替换第一张图的检测结果(索引为0)
    results.pred[0] = top_20_tensor
    
  3. 复用官方方法
    现在可以直接调用官方提供的工具方法:

    # 渲染带框的图片
    imgs = results.render()
    # 裁剪检测目标
    crops = results.crop(save=True)
    

多张图片批量处理示例

如果你处理的是多张图片的检测结果,可以遍历每张图的DataFrame进行批量替换:

# 遍历所有图片的检测结果
for idx in range(len(results.pandas().xyxy)):
    # 获取当前图片的DataFrame,按置信度降序取前20
    df = results.pandas().xyxy[idx].sort_values('confidence', ascending=False).head(20)
    # 转换为符合格式的张量
    df_tensor = torch.tensor(
        df[['xmin', 'ymin', 'xmax', 'ymax', 'confidence', 'class']].values,
        dtype=torch.float32
    )
    # 替换对应位置的检测张量
    results.pred[idx] = df_tensor

注意事项

  • 坐标格式匹配:如果使用的是归一化坐标的DataFrame(如xyxyn),需要先将坐标转换为绝对坐标(乘以对应图片的宽高),再转换为张量:
    # 获取第一张图片的宽高
    img_h, img_w = results.imgs[0].shape[:2]
    # 归一化坐标转绝对坐标
    df['xmin'] = df['xmin'] * img_w
    df['ymin'] = df['ymin'] * img_h
    df['xmax'] = df['xmax'] * img_w
    df['ymax'] = df['ymax'] * img_h
    
  • 张量类型一致:确保转换后的张量 dtype 为torch.float32,和原始pred张量类型保持一致,避免报错。

内容的提问来源于stack exchange,提问作者C.Tale

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 16:50:25