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

如何解码YOLOv8-n检测模型的.bin格式预测输出并提取检测结果?

解码YOLOv8-n原始.bin预测输出获取检测结果

步骤1:还原预测数组的正确维度

你读取的一维float32数组需要先还原成YOLOv8输出的张量形状,再调整维度顺序以匹配检测框的排列逻辑:

import numpy as np
from ultralytics.utils import ops

# 读取.bin文件
yolo_data_path = "你的预测文件路径.bin"
array = np.fromfile(yolo_data_path, dtype=np.float32)

# 还原为[1, 6, 10710]的形状,再转置为[1, 10710, 6](每个元素对应一个检测框的6个参数)
pred = array.reshape(1, 6, 10710).transpose(0, 2, 1)

这里的6个参数顺序确实如你推测:x_center, y_center, width, height, confidence, class_id,其中x_center/y_center是框的中心相对图像的比例,width/height是框的宽高相对图像的比例。

步骤2:执行非极大值抑制(NMS)

YOLOv8的原始输出包含大量冗余框,必须通过NMS过滤掉重叠度高的低置信框,保留最优结果。直接用ultralytics官方的non_max_suppression函数即可:

# 假设输入图像尺寸为(640, 640),根据你的实际输入尺寸修改
img_shape = (640, 640)  # (height, width)
conf_thres = 0.25  # 置信度阈值,可按需调整
iou_thres = 0.7    # IOU阈值,可按需调整

# 执行NMS
results = ops.non_max_suppression(
    pred,
    conf_thres=conf_thres,
    iou_thres=iou_thres,
    classes=None,  # 仅检测猫和狗,可留空或指定[0,1]
    max_det=100    # 最大检测框数量
)

步骤3:解码并打印检测结果

NMS后的结果是一个列表,每个元素对应一张图像的检测框(这里仅单张),每个框的格式为[x1, y1, x2, y2, confidence, class_id],其中x1/y1是框的左上角绝对像素坐标,x2/y2是右下角绝对像素坐标:

# 类别映射,根据你训练时的类别顺序调整,示例0对应猫、1对应狗
class_names = ["猫", "狗"]

# 遍历检测结果
for det in results:
    if len(det) == 0:
        print("未检测到目标")
        continue
    for *box, conf, cls in det:
        x1, y1, x2, y2 = map(int, box)
        class_name = class_names[int(cls)]
        print(f"检测到:{class_name} | 置信度:{conf:.2f} | 边界框:({x1}, {y1}) -> ({x2}, {y2})")

补充说明

  • 若不想依赖ultralytics库,也可自行实现NMS逻辑,但官方函数已做边界裁剪、类别过滤等优化,更推荐使用。
  • 图像尺寸img_shape必须和模型推理时的输入尺寸完全一致,否则边界框坐标会出现偏差。

内容的提问来源于stack exchange,提问作者Mary H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 00:52:38