使用VNCoreMLModel和Inceptionv3.model()之间的区别?

时间:2017-10-22 05:07:20

标签: ios swift xcode machine-learning coreml

我一直在努力开始使用CoreML(Apple的机器学习库)。我正在按照这些教程开始

1)https://www.appcoda.com/coreml-introduction/

2)https://www.raywenderlich.com/164213/coreml-and-vision-machine-learning-in-ios-11-tutorial

第一个教程使用Inception V3,第二个教程使用Places205-GoogLeNet模型进行解释。

完成所有基本设置步骤

Places205-GoogLeNet教程使用以下代码

func detectScene(image: CIImage) {
    answerLabel.text = "detecting scene..."

    // Load the ML model through its generated class
    guard let model = try? VNCoreMLModel(for: GoogLeNetPlaces().model) else {
      fatalError("can't load Places ML model")
    }
  }

,第二个代码使用此

guard let prediction = try? model.prediction(image: pixelBuffer!) else {
    return
}

这两种方法之间的区别是什么,更推荐哪种方法,因为这两种类型都可用于传递像素缓冲区并显示结果?

2 个答案:

答案 0 :(得分:2)

在第一个教程中,您需要自己处理将图像大小调整为299×299。 在第二个教程中,他们使用Vision框架自动完成。 我认为Vision方法更清晰

答案 1 :(得分:0)

Vision框架是一组工具,可帮助您设置所有图像处理管道。这些工具中有CoreML和您提供的模型,但它不仅限于机器学习。 Vision可帮助您:预处理,重新缩放,裁剪图像,检测矩形,条形码,面部等等。有关详细信息,请查看docs。除了直接对图像执行的工作外,它还有助于对模型执行请求,如果您有复杂的请求序列或者想要将这些操作与其他处理连接起来,这非常重要。

使用纯CoreML,您必须自己实现所有这些功能,因为CoreML职责只是设置您的模型并通过它获得简单的API。

Vision不是CoreML的纯粹包装器,因为它不仅仅是请求执行和初始化模型,而是使用CoreML来实现某些功能(具体来说 - 的 VNCoreMLRequest )。

在您提供的链接中:1st(appcoda)是关于纯CoreML,第二(Ray)是关于Vision。