我一直在努力开始使用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
}
这两种方法之间的区别是什么,更推荐哪种方法,因为这两种类型都可用于传递像素缓冲区并显示结果?
答案 0 :(得分:2)
在第一个教程中,您需要自己处理将图像大小调整为299×299。 在第二个教程中,他们使用Vision框架自动完成。 我认为Vision方法更清晰
答案 1 :(得分:0)
Vision
框架是一组工具,可帮助您设置所有图像处理管道。这些工具中有CoreML
和您提供的模型,但它不仅限于机器学习。 Vision可帮助您:预处理,重新缩放,裁剪图像,检测矩形,条形码,面部等等。有关详细信息,请查看docs。除了直接对图像执行的工作外,它还有助于对模型执行请求,如果您有复杂的请求序列或者想要将这些操作与其他处理连接起来,这非常重要。
使用纯CoreML
,您必须自己实现所有这些功能,因为CoreML
职责只是设置您的模型并通过它获得简单的API。
Vision
不是CoreML
的纯粹包装器,因为它不仅仅是请求执行和初始化模型,而是使用CoreML
来实现某些功能(具体来说 - 的 VNCoreMLRequest
强>)。
在您提供的链接中:1st(appcoda)是关于纯CoreML,第二(Ray)是关于Vision。