如何将YOLOv8分割模型正确导出为CoreML以获取类别标签与多边形?
YOLOv8分割模型导出CoreML获取类别标签与分割多边形的正确方法
依赖版本适配
- 使用Ultralytics最新版(≥8.0.100),旧版本导出逻辑存在bug
- coremltools选择7.x版本,6.x对分割模型的后处理支持不足
导出命令示例
直接用Ultralytics的export方法,明确指定分割任务并开启后处理,不要设置nms=True(该参数仅适用于检测模型):
from ultralytics import YOLO # 加载训练好的分割模型 model = YOLO('best.pt') # 导出CoreML,关键参数必须配置 model.export( format='coreml', task='segment', predict=True, imgsz=640, # 和训练时的图像尺寸保持一致 batch_size=1 # 适配iPhone单图推理需求 )
参数说明
task='segment':必须明确指定任务为分割,否则工具会默认按检测模型处理,导致后处理逻辑错误predict=True:开启该参数后,导出的模型会包含完整后处理流程,直接输出检测框、类别ID、置信度、分割掩码,而非原始张量- 不要设置
nms=True:分割模型的后处理逻辑与检测模型不同,添加该参数只会触发无效警告
Xcode中的输出结构
导出后的.mlpackage在Xcode中会显示结构化输出:
detections:包含每个目标的bbox(检测框)、classLabel(类别ID)、confidence(置信度)masks:分割掩码的MultiArray,可在iOS代码中进一步转换为多边形
预训练模型验证注意事项
你之前测试的yolov8n.pt是检测模型,需对应设置task='detect'才能看到类别标签。如果使用预训练分割模型yolov8n-seg.pt,用上述命令导出后,Xcode中会显示正确的结构化输出。
iOS端转换分割多边形思路
模型输出的掩码数组可通过以下步骤转换为多边形:
- 将MultiArray转换为UIImage或二进制掩码
- 使用Core Graphics提取掩码轮廓
- 转换为
UIBezierPath得到多边形路径
内容的提问来源于stack exchange,提问作者flypicaso
相关产品推荐
相关产品推荐

