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

为何YOLOv5转CoreML模型不返回VNRecognizedObjectObservation?

问题

我使用Ultralytics的YOLOv5在PyTorch中训练了机器学习模型,通过Apple的CoreMLTools将PyTorch(.pt)模型转换为CoreML模型(.mlmodel)。转换过程正常,模型可在iOS应用中使用,但需手动访问模型预测输出——模型输出形状为MultiArray : Float32 1 × 25500 × 46 array。通过VNCoreMLRequest仅能获取VNCoreMLFeatureValueObservation,需从中提取MultiArray并遍历以获取所需数据。但Apple为目标检测模型提供的VNRecognizedObjectObservation类型并未被我的模型返回。请问:

  1. 模型无法返回VNRecognizedObjectObservation类型的原因是什么?
  2. 能否通过CoreMLTools启用该类型?
回答

无法返回VNRecognizedObjectObservation的原因

  • CoreML的Vision框架返回VNRecognizedObjectObservation的前提是,模型输出严格符合Apple定义的目标检测模型标准格式。而YOLOv5原生输出的是未经后处理的原始检测张量,属于通用多维数组,并非CoreML预设的目标检测结构化输出。
  • 原生YOLOv5输出包含所有候选锚框的坐标、置信度和类别概率,没有执行非极大值抑制(NMS)、坐标归一化等后处理步骤,也没有将结果封装为CoreML能识别的目标检测结构,因此Vision框架只会将其视为普通张量输出,返回VNCoreMLFeatureValueObservation。

能否通过CoreMLTools启用该类型?

可以,关键是让转换后的CoreML模型输出符合Apple的目标检测规范,具体操作如下:

  1. 嵌入后处理逻辑:在转换过程中,将YOLOv5的后处理步骤(NMS、坐标转换、筛选置信度阈值等)整合到CoreML模型中,让模型直接输出过滤后的检测结果,而非原始张量。
  2. 指定输出格式:使用CoreMLTools转换时,配置模型的输出类型为CoreML的ObjectDetector格式,这样Vision框架就能识别并返回VNRecognizedObjectObservation。

实操建议

  • 直接使用YOLOv5官方提供的导出脚本:运行export.py时添加--include coreml --nms参数,脚本会自动处理后逻辑并导出符合CoreML目标检测规范的模型,此时用VNCoreMLRequest就能直接拿到VNRecognizedObjectObservation。
  • 手动转换时,可通过CoreMLTools的NeuralNetworkBuilder添加后处理层,或修改模型的输出描述,将输出映射为ObjectDetector的结构化输出(包含边界框、置信度、类别标签等字段)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 05:40:22