iOS模拟器CoreML报错Code=9:无法创建推理上下文,求助解决
CoreML + Vision 报错:Could not create inference context 解决办法
问题场景
按照苹果官方文档《使用Vision和Core ML分类图像》操作时,使用官方提供的MobileNetV2模型正常,但自行创建的CoreML模型在iPhone模拟器上触发报错:
- some : Error Domain=com.apple.vis Code=9 "Could not create inference context" UserInfo={NSLocalizedDescription=Could not create inference context}
排查与解决步骤
检查模型输入格式兼容性
Vision要求CoreML模型的主输入为Image类型(对应CVPixelBuffer),若自定义模型输入为MLMultiArray或尺寸、色彩空间不匹配,会导致上下文创建失败。打开Xcode中的.mlmodel文件,在"Model Inspector"中确认输入类型为Image,且尺寸(如224x224)、色彩空间(如RGB)与代码中VNImageRequestHandler处理的图像一致。验证模型转换流程
若从PyTorch/TensorFlow转换模型,确保coremltools版本与目标iOS版本兼容(如coremltools 6.x对应iOS 15+)。转换时显式指定图像输入参数,示例:import coremltools as ct # 以PyTorch模型为例 converted_model = ct.convert( pytorch_model, inputs=[ct.ImageType(name="input_image", shape=(1, 224, 224, 3), scale=1/255.0)] ) converted_model.save("CustomModel.mlmodel")转换后检查
.mlmodel在Xcode中无红色警告,确保模型结构完整。重置模拟器环境
模拟器的硬件加速缓存可能导致异常,尝试:- 关闭模拟器与Xcode,重新启动
- 重置模拟器内容:菜单栏选择
Device → Erase All Content and Settings - 关闭Metal API验证:
Window → Show Device Inspector,取消勾选"Metal API Validation"
核对代码实现细节
确保代码正确用VNCoreMLModel包装自定义模型,示例:// 正确加载并包装模型 guard let coremlModel = try? CustomModel().model, let visionModel = try? VNCoreMLModel(for: coremlModel) else { fatalError("Failed to initialize model") } // 创建Vision请求 let classificationRequest = VNCoreMLRequest(model: visionModel) { request, error in // 处理分类结果 } // 执行请求 let imageHandler = VNImageRequestHandler(cgImage: targetImage.cgImage!, options: [:]) try? imageHandler.perform([classificationRequest])避免直接将CoreML模型传入Vision请求,必须通过
VNCoreMLModel转换。
内容的提问来源于stack exchange,提问作者Qazi Ammar
相关产品推荐
相关产品推荐

