使用 Create ML 创建模型并在元数据中查找类

Posted

技术标签:

【中文标题】使用 Create ML 创建模型并在元数据中查找类【英文标题】:Create a model using Create ML and find classes in metaData 【发布时间】:2021-02-20 23:44:12 【问题描述】:

我正在使用 Create ML 创建一个使用图像分类器项目的.mlmodel 文件。 创建 ML,为 2 个类创建此文件。

将创建的ML模型文件拖入编译源后,下面的代码就可以找到该文件并创建模型了。

但是元数据没有显示类,为什么?我如何知道 mlmodel 文件中的类?

let error: NSError! = nil
        
        guard let modelURL = Bundle.main.url(forResource: "ObjectDetector", withExtension: "mlmodelc") else 
            return 
        
        do 
            let model = try MLModel(contentsOf: modelURL)
            let visionModel = try VNCoreMLModel(for: model)
            let metaData =  model.modelDescription.metadata[.creatorDefinedKey] as! [String:String]
             // ERROR: It  could not find metaData["classes"]
            let allClasses = metaData["classes"]!.components(separatedBy: ",")


            let objectRecognition = VNCoreMLRequest(model: visionModel, completionHandler:  (request, error) in
                DispatchQueue.main.async(execute: 
                    // perform all the UI updates on the main queue
                    if let results = request.results 
                        self.drawVisionRequestResults(results)
                    
                )
            )
            self.requests = [objectRecognition]
         catch let error as NSError 
            print("Model loading went wrong: \(error)")
        

请注意,我没有收到“尚未生成模型类。”。 https://***.com/questions/462476…

点击 ML Model 文件显示自动生成的 Swift 模型类。

【问题讨论】:

【参考方案1】:

类数据是 mlmodel 文件的一部分,但不在元数据中。如果需要,您可以将其添加到元数据中,但您必须为此编写一个简短的 Python 脚本。

ios 14 开始,MLModelDescription.classLabels 还允许您访问类名列表。

【讨论】:

以上是关于使用 Create ML 创建模型并在元数据中查找类的主要内容,如果未能解决你的问题,请参考以下文章

Create ML 中的“指定数据源中的空表”错误

Core ML 和 Turi Create 使用啥模型?

覆盖模型的create方法

Azure ML:在模型部署期间包括其他文件

跨行查找关系的 ML 模型

是否可以在python Web应用程序中使用经过预训练的R ML模型?