使用onnx-coreml转换ONNX到CoreML时遇模块缺失等错误,如何修复?
问题说明
尝试使用onnx-coreml库转换ONNX模型到CoreML,执行代码如下:
import onnx from onnx_coreml import convert onnx_model = onnx.load('model.onnx') coreml_model = convert(onnx_model) coreml_model.save('model.mlmodel')
运行后触发多类错误,核心异常包括:
scikit-learn version 1.3.2 is not supported. Minimum required version: 0.17. Maximum required version: 1.1.2. Disabling scikit-learn conversion API.
Failed to load _MLModelProxy: No module named 'coremltools.libcoremlpython'
ModuleNotFoundError: No module named 'coremltools.converters.nnssa'
修复步骤
1. 安装兼容版本的coremltools
onnx-coreml已停止维护,仅支持coremltools 3.x系列,高版本coremltools会缺失nnssa模块。执行以下命令切换版本:
pip uninstall -y coremltools pip install coremltools==3.3
2. 降级scikit-learn到指定范围
报错提示当前scikit-learn版本超出支持区间,需降级到1.1.2及以下:
pip uninstall -y scikit-learn pip install scikit-learn==1.1.2
3. 调整Python版本
onnx-coreml对Python 3.11兼容性较差,建议切换到Python 3.7~3.9版本,用conda创建虚拟环境示例:
conda create -n py38_coreml python=3.8 conda activate py38_coreml
激活环境后重新安装所有依赖:
pip install onnx onnx-coreml coremltools==3.3 scikit-learn==1.1.2
4. 官方替代方案(推荐)
由于onnx-coreml已废弃,官方推荐直接使用coremltools内置的ONNX转换能力,无需依赖onnx-coreml,代码示例:
import coremltools as ct import onnx onnx_model = onnx.load('model.onnx') coreml_model = ct.convert(onnx_model, source='onnx') coreml_model.save('model.mlmodel')
此方案要求coremltools版本≥4.0,Python版本≥3.8,无需额外安装废弃库。
内容的提问来源于stack exchange,提问作者Franck Dernoncourt

