动态加载 mlmodel

Posted

技术标签:

【中文标题】动态加载 mlmodel【英文标题】:Loading mlmodel dynamically 【发布时间】:2018-03-25 08:13:15 【问题描述】:

我正在为一个项目体验 CoreML 的能力。这是我设法做到的:

    在 Python 中使用 scikit-learn 创建 .pkl 文件 使用 coremltools 包将其转换为 .mlmodel 文件 将其下载到我的 ios 应用程序

    在运行时编译它:

    let classifierName = "classifier1"
    let fileName = NSString(format:"%@.mlmodel",classifierName)
    let documentsUrl:URL =  FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first as URL!
    let destinationFileUrl = documentsUrl.appendingPathComponent(fileName as String)
    
    let compiledModelUrl = try? MLModel.compileModel(at: destinationFileUrl)
    let model = try? MLModel(contentsOf: compiledModelUrl!)
    

现在,我想使用我的模型进行预测。我尝试在一个示例应用程序中直接嵌入 .mlmodel 文件,它允许 XCode 在构建时创建一个包装器类来实例化输入:

let multiArr = try? MLMultiArray.init(shape: [1], dataType: .double)
let input = classifier1Input(input: multiArr!)
let output = try? model.prediction(input: input)

但因为我是在运行时从服务器下载文件,所以我无权访问这种包装类。

let predict = model?.prediction(from: <MLFeatureProvider>)

有什么想法吗?

【问题讨论】:

【参考方案1】:

最简单的解决方案:将 Xcode 生成的包装类复制到 Swift 文件中,并将其添加到您的项目中。 (请注意,这个包装类还展示了如何制作MLFeatureProvider 等)

【讨论】:

以上是关于动态加载 mlmodel的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 MLModel.compileModel 加载 CoreML 模型

加载 mlmodel 时出现机器学习错误“No known class for loading model type > MLModelType_pipelineClassifier”

预热 CoreML MLModel

CocosCreator-如何动态加载资源

前端动态加载JS

vue动态加载视频问题