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

使用ONNX格式YOLOv5在MAUI中目标检测框偏移问题求助

解决MAUI中YOLOv5 ONNX模型检测框偏移问题
  • 修正输入图像预处理逻辑
    YOLOv5模型要求输入为640×640,但必须保持原图宽高比进行缩放(即letterbox填充),不能直接拉伸图像:

    1. 计算原图与640×640的缩放比例:scale = min(640/原图宽度, 640/原图高度)
    2. 按比例缩放原图,得到缩放后的宽高:scaled_w = 原图宽度 * scale, scaled_h = 原图高度 * scale
    3. 计算填充的空白区域:pad_x = (640 - scaled_w) / 2, pad_y = (640 - scaled_h) / 2
    4. 用灰色(或其他颜色)填充缩放后的图像到640×640,同时记录scale、pad_x、pad_y这三个参数,用于后续坐标转换。
      另外要注意输入张量格式:模型要求1,3,640,640是CHW(通道在前)格式,需将图像的HWC格式转置为CHW,同时将像素值归一化到0-1(即每个像素值除以255)。
  • 调整输出坐标后处理逻辑
    模型输出的1,25200,6中,每个检测框的前4个值为x_center, y_center, width, height(相对640×640的比例值),需转换为原图的绝对坐标:

    1. 先将比例坐标转为640×640上的绝对坐标:
      x = x_center * 640
      y = y_center * 640
      w = width * 640
      h = height * 640
      
    2. 扣除填充偏移并还原到原图比例:
      original_x = (x - pad_x) / scale
      original_y = (y - pad_y) / scale
      original_w = w / scale
      original_h = h / scale
      
    3. 将中心坐标转为检测框的左上角、右下角坐标:
      left = original_x - original_w / 2
      top = original_y - original_h / 2
      right = original_x + original_w / 2
      bottom = original_y + original_h / 2
      
  • 确认模型输出格式
    务必核对输出的6个值的顺序是否为x_center, y_center, width, height, confidence, class_id。如果模型输出顺序不同(比如部分自定义训练的YOLOv5可能调整过输出顺序),需对应调整后处理的坐标提取逻辑。

  • 参考Yolov5Net的核心逻辑
    既然Yolov5Net能正常生成检测框,可拆解其预处理(letterbox实现)和后处理(坐标映射)的核心代码,移植到你的MAUI项目中,避开NuGet包的运行问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 22:22:19