1

我一直在尝试开始使用 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
}

这两种方法有什么区别,哪一种更推荐,因为这两种方法都可以用来传递像素缓冲区并显示结果?

4

2 回答 2

3

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

于 2017-10-22T05:23:25.450 回答
1

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

使用 pure CoreML,您必须自己实现所有这些功能,因为CoreML责任只是设置您的模型并在其上获取简单的 API。

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

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

于 2017-11-01T13:22:10.237 回答