跳至主要內容

本機編譯 CoreML 模型 (coreml.compile_model)

聲明

編譯好的模型路徑, 錯誤資訊 = coreml.compile_model(模型檔案路徑)

參數

  • 模型檔案路徑
    文字型,需要編譯的模型路徑。iOS 15 及以上支援 .mlpackage 格式;iOS 13、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 不是必選項
    # 如果你希望把 NMS 內聯進導出模型,可以開啓它
    # 如果準備在 XXTouch 側使用 coreml.nms / coreml.rotated_nms 自己做後處理,也可以不帶 nms=True

回傳值

  • 編譯好的模型路徑
    文字型 | nil,編譯成功返回編譯好的模型路徑,編譯失敗返回 nil

  • 錯誤資訊
    文字型 | nil,編譯成功返回 nil,失敗時返回錯誤資訊

說明

  • 軟體版本在 1.3.8 或以上方可使用

  • 不支援 iOS 12 以下版本系統

  • 這個函式用於將 .mlpackage.mlmodel 格式的模型編譯成裝置可直接載入的 .mlmodelc 格式

  • 不同型號或系統版本的裝置上編譯的 .mlmodelc 不一定可以通用

    NVIDIA 顯卡電腦上的 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

    # 如果已安裝 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' -- 編譯好的模型存放位置

file.remove(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
file.move(tmp_path, compiled_model_path, 'mo') -- 將編譯好的模型移動到指定位置
end