已训练CoreML模型转ONNX上传Azure遇TypeError问题求助
CoreML转ONNX并解决TypeError问题
问题原因
出现TypeError: isinstance() arg 2 must be a type, a tuple of types, or a union的核心原因是coremltools、onnxmltools及onnx三者版本不兼容,或是加载模型的方式与转换工具的预期不匹配。
解决方案
1. 安装兼容的版本组合
卸载现有冲突包,安装经过验证的兼容版本:
pip uninstall -y coremltools onnxmltools onnx pip install coremltools==4.1 onnxmltools==1.9.0 onnx==1.8.1
注:Python版本建议使用3.7或3.8,高版本Python(如3.10+)可能存在兼容性问题。
2. 修改转换代码
将原代码中用coremltools.utils.load_spec加载模型的方式,改为coremltools.models.MLModel,确保转换工具能正确识别模型对象:
import coremltools import onnxmltools # 加载CoreML模型(使用MLModel类) coreml_model = coremltools.models.MLModel('MobileNet.mlmodel') # 转换为ONNX模型 onnx_model = onnxmltools.convert_coreml(coreml_model, 'Example Model') # 保存ONNX模型 onnxmltools.utils.save_model(onnx_model, 'example.onnx')
3. 验证转换结果
运行修改后的代码后,检查生成的example.onnx文件是否可用,可以用onnxruntime验证:
pip install onnxruntime python -c "import onnxruntime; sess = onnxruntime.InferenceSession('example.onnx'); print('模型加载成功')"
内容的提问来源于stack exchange,提问作者GMR
相关产品推荐
相关产品推荐

