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

如何在Xcode中使用自训练YOLO OBB模型并规避MultiArray输出

解决YOLOv8-OBB转CoreML输出结构化数据的问题

一、重新导出正确格式的CoreML模型

你之前的导出命令缺少关键参数,导致CoreML模型没有生成结构化输出。使用Ultralytics官方导出工具时,需要明确指定OBB任务类型和自定义类别名,让导出器正确映射输出结构:

from ultralytics import YOLO

# 加载你训练好的OBB模型
model = YOLO('path/to/your/trained-model.pt')

# 导出配置:明确OBB任务、指定类别名、启用NMS
model.export(
    format='coreml',
    imgsz=640,
    nms=True,
    int8=True,
    task='obb',  # 必须指定为obb,避免自动识别为普通检测任务
    class_names=['你的自定义标签名'],  # 替换成你的单标签名称
    coreml_package=False  # 导出为单个.mlmodel文件,更适配Xcode预览
)

二、为什么之前的导出是MultiArray?

OBB模型的输出结构和普通YOLO检测不同(包含旋转框的角度/顶点信息),如果不指定task='obb'和class_names,Ultralytics导出器会默认输出原始预测张量(MultiArray),而不是结构化的检测结果。加上这两个参数后,导出器会自动将输出映射为CoreML的MLRotatedObjectDetectionFeature,包含置信度、类别标签、旋转框坐标等结构化字段。

三、Xcode预览与iOS端使用

  1. 将导出的.mlmodel文件拖入Xcode项目,勾选"Copy items if needed"。
  2. 点击模型文件,Xcode会自动生成对应的模型类,此时预览功能应该能正常工作:上传测试图片即可看到带旋转框的检测结果。
  3. 在iOS代码中调用模型时,输出会包含一个detections数组,每个元素包含:
    • confidence: 检测置信度(Float类型)
    • classLabel: 你的自定义类别名(String类型)
    • rotatedBoundingBox: 旋转框信息(包含中心坐标、宽度、高度、旋转角度)

四、关于你尝试的coremltools转换错误

你用ct.convert直接转换Keras模型的方法不适用,因为YOLOv8-OBB不是原生Keras模型,Ultralytics的导出工具已经针对CoreML做了OBB任务的适配,无需额外用coremltools二次转换,直接用官方导出命令即可解决问题。

如果导出后仍然是MultiArray,先去掉int8=True导出float32模型测试,确认输出结构正常后再添加量化参数——部分情况下int8量化可能会影响导出器的结构映射,需要确保训练数据集的标签格式完全符合Ultralytics OBB要求(标签格式为x1,y1,x2,y2,x3,y3,x4,y4,class_id)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 13:39:53