我正在理解CoreML。对于初学者模型,我已经下载了Yahoo's Open NSFW caffemodel。您给它一张图片,它会给出一个概率分数(介于0和1之间)图片包含不适合的内容。将Caffe模型转换为CoreML
使用coremltools,我已经将模型转换为.mlmodel并将它带入我的应用程序。它出现在Xcode中,像这样:
在我的应用程序,我可以顺利过关的图像,输出显示为MLMultiArray。我遇到麻烦的是了解如何使用这个MLMultiArray来获得我的概率分数。我的代码是像这样:
func testModel(image: CVPixelBuffer) throws {
let model = myModel()
let prediction = try model.prediction(data: image)
let output = prediction.prob // MLMultiArray
print(output[0]) // 0.9992402791976929
print(output[1]) // 0.0007597212097607553
}
作为参考,CVPixelBuffer被调整到所需要的224x224,该模型问(我会得到与视觉打一次,我可以算出来)。
如果我提供了不同的图像,我已经打印到控制台的两个索引确实发生了变化,但是他们的分数与我在Python中运行模型时得到的结果大不相同。在Python中进行测试时,传递给模型的图像给出了0.16的输出,而根据上面的示例,我的CoreML输出与我期望看到的截然不同(和Python的双输出不同)。
需要更多的工作来获得像我期待的结果?
我不认为你需要手动调整缓冲区大小。我认为CoreML可以为你处理 – Guig
我相信在使用Vision时可能只是这种情况。如果只使用CoreML本身,我确实认为缓冲区确实需要调整大小(我可以确认;如果我通过CVPixelBuffer而不调整大小,则会引发错误)。 – ZbadhabitZ
对。除非您喜欢编写,重写和维护图像处理代码,否则使用Vision将图像传送到模型会简单得多。 – rickster