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

如何从转成CoreML模型的YOLOv5中提取iOS应用可用的边界框坐标?

解决CoreML模型导出及检测结果解析问题

一、正确导出带后处理的CoreML模型

你当前导出的模型仅输出原始检测张量,未包含非极大值抑制(NMS)等后处理步骤,因此无法直接得到结构化的边界框、置信度结果。需要修改导出命令,让模型内置后处理逻辑:

!python export.py --weights /content/drive/MyDrive/best.pt --include coreml --nms --coreml-metadata
  • --nms:启用内置NMS后处理,模型直接输出过滤后的有效检测框
  • --coreml-metadata:添加CoreML所需的元数据,确保输出结果的结构可被正确识别

如果是YOLOv5版本,命令逻辑一致,若遇到输入尺寸问题,可额外添加--img-size 640 640指定固定输入尺寸。

二、解析CoreML模型的预测结果

导出后的模型会输出结构化的检测结果,而非原始张量。以下是Python环境下的解析示例:

import coremltools as ct
import cv2
import numpy as np

# 1. 加载CoreML模型
model = ct.models.MLModel("best.mlmodel")

# 2. 预处理输入图像(需与YOLO训练时的预处理逻辑一致)
img = cv2.imread("test_image.jpg")
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # 转换为RGB格式
img = cv2.resize(img, (640, 640))  # 调整为模型输入尺寸
img = img.astype(np.float32) / 255.0  # 归一化(根据训练配置调整)
# 若模型输入为CHW格式,需转置:img = img.transpose(2, 0, 1)[np.newaxis, ...]

# 3. 执行预测
input_dict = {"image": img}
predictions = model.predict(input_dict)

# 4. 提取检测结果
# 输出键通常为'detections',每个元素对应一个检测框,结构为[xmin, ymin, xmax, ymax, confidence, class_idx]
for det in predictions["detections"]:
    xmin, ymin, xmax, ymax = det[:4]
    confidence = det[4]
    class_idx = int(det[5])
    # 替换为你的类别映射表
    class_names = ["class1", "class2", "class3"]
    class_name = class_names[class_idx]
    
    print(f"类别: {class_name}, 置信度: {confidence:.2f}, 边界框: [{xmin:.2f}, {ymin:.2f}, {xmax:.2f}, {ymax:.2f}]")

关键注意事项

  • 输入图像的预处理必须与训练阶段完全匹配,包括尺寸、归一化方式、通道顺序
  • 不同YOLO版本导出的CoreML模型输出键可能略有差异,若detections不存在,可查看模型的输出描述(用model.spec.description查看)
  • 若需在iOS端使用该模型,Xcode会自动识别检测框结构,可直接通过CoreML框架获取结构化的检测结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 04:05:19