跳到主要内容

本机编译 CoreML 模型 (coreml.compile_model)

声明

编译好的模型路径, 错误信息 = coreml.compile_model(模型文件路径)

参数

  • 模型文件路径
    文本型,需要编译的模型路径,iOS 15 以上支持 .mlpackage 格式的模型,iOS 13 和 iOS 14 仅支持旧版 .mlmodel 模型

    YOLO11 转 CoreML 相关文档

    macOS 模型下 YOLO11 格式转换命令参考
    # 这里假设你已经有 Python 3.10 环境,没有请自行创建(本人仅用 Python 3.10 环境测试,更高版本不确定是否可行)
    # 先安装 ultralytics,如果已安装则跳过这一步
    pip install ultralytics

    # 如下 iOS 13 或 iOS 14 可以指定 format 为 mlmodel 转换为旧版 mlmodel
    yolo export format=mlmodel nms=True model=best.pt

    # iOS 15 及以上可以指定 format 为 coreml 转换为 mlpackage 模型
    yolo export format=coreml nms=True model=best.pt

    # nms=True 是必选项

返回值

  • 编译好的模型路径
    文本型 | nil,编译成功返回编译好的模型路径,编译失败返回 nil

  • 错误信息
    文本型 | nil,编译成功返回 nil,失败这个是错误信息

说明

  • 软件版本在 1.3.8 或以上方可使用

  • 不支持 iOS 13 以下版本系统

  • 这个函数的用途为将 .mlpackage 或者 .mlmodel 格式的模型编译成设备可直接加载的 .mlmodelc 格式

  • 不同型号或系统版本设备上编译的 .mlmodelc 文件不一定可以通用

    N 卡电脑上 YOLO11 模型训练命令
    # 先在电脑安装 Visual Studio 的 C++ 桌面开发套件,如果已安装则跳过这一步,以下是链接
    # https://visualstudio.microsoft.com/
    # 在电脑上下载安装 CUDA 11.8 Toolkit,如果已安装则跳过这一步,以下是链接
    # https://developer.nvidia.com/cuda-11-8-0-download-archive

    # 这里假设你已经有 Python 3.10 环境,没有请自行创建(本人仅用 Python 3.10 环境测试,更高版本不确定是否可行)
    # 先安装 ultralytics,如果已安装则跳过这一步
    pip install ultralytics

    # 重新安装支持 nVIDIA CUDA 11.8 Toolkit 的 torch 库
    # 如果确认安装过了支持 CUDA 的 torch 库则跳过这一步
    pip uninstall torch torchvision torchaudio # 卸载掉电脑上已安装的 CPU 版 torch (假设安装了)
    pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu118

    yolo train model=yolo11m.pt data=COCO.yml epochs=300 imgsz=640 device=0 # 使用 GPU0 对样本进行训练
    macOS 上 YOLO11 模型训练命令
    # 这里假设你已经有 Python 3.10 环境,没有请自行创建(本人仅用 Python 3.10 环境测试,更高版本不确定是否可行)
    # 先安装 ultralytics,如果已安装则跳过这一步
    pip install ultralytics

    # 如果确认安装过了支持 CUDA 的 torch 库则跳过这一步
    pip install torch torchvision torchaudio

    yolo train model=yolo11m.pt data=COCO.yml epochs=300 imgsz=640 device=mps # 使用 Metal 着色器对加速训练

示例

compiled_model_path = XXT_HOME_PATH..'/models/yolo11m.mlmodelc' -- 编译好的模型存放位置

local noexecute = require('no_os_execute')
noexecute.rm_rf(compiled_model_path) -- 测试模型阶段每次都重新编译,模型训练完备不再修改可注释掉此行

if not file.exists(compiled_model_path) then -- 如果还没有编译好的模型,则编译一份
local tmp_path, err = coreml.compile_model(XXT_HOME_PATH..'/models/yolo11m.mlpackage') -- 编译模型
if not tmp_path then
error(err)
end
local noexecute = require('no_os_execute')
noexecute.cp_r(tmp_path, compiled_model_path) -- 将编译好的模型移动到指定位置
noexecute.rm_rf(tmp_path) -- 删除临时文件
end