gpt4 book ai didi

ios - 将 Caffe 模型转换为 CoreML

转载 作者:可可西里 更新时间:2023-11-01 05:49:25 25 4
gpt4 key购买 nike

我正在努力理解 CoreML。对于入门模型,我下载了 Yahoo's Open NSFW咖啡模型。您给它一张图片,它会给出该图片包含不当内容的概率分数(介于 0 和 1 之间)。

使用 coremltools,我已将模型转换为 .mlmodel 并将其引入我的应用程序。它像这样出现在 Xcode 中:

enter image description here

在我的应用中,我可以成功传递图像,输出显示为 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(一旦我弄清楚了,我将开始使用 Vision)。

如果我提供不同的图像,我打印到控制台的两个索引确实会发生变化,但它们的分数与我在 Python 中运行模型时得到的结果大不相同。在 Python 中测试时传递到模型中的相同图像给出了 0.16 的输出,而根据上面的示例,我的 CoreML 输出与我期望看到的有很大不同(和字典,不像 Python 的双输出)。

是否需要做更多的工作才能获得我期望的结果?

最佳答案

您似乎没有按照模型期望的方式转换输入图像。
大多数 caffe 模型都期望“均值减去”图像作为输入,这个模型也是如此。如果您检查 Yahoo's Open NSFW 提供的 python 代码( classify_nsfw.py ):

# Note that the parameters are hard-coded for best results
caffe_transformer = caffe.io.Transformer({'data': nsfw_net.blobs['data'].data.shape})
caffe_transformer.set_transpose('data', (2, 0, 1)) # move image channels to outermost
caffe_transformer.set_mean('data', np.array([104, 117, 123])) # subtract the dataset-mean value in each channel
caffe_transformer.set_raw_scale('data', 255) # rescale from [0, 1] to [0, 255]
caffe_transformer.set_channel_swap('data', (2, 1, 0)) # swap channels from RGB to BGR

图像也有一种特定的方式 resized to 256x256 and then cropped to 224x224 .

要获得完全相同的结果,您需要在两个平台上以完全相同的方式转换输入图像。

参见 this thread了解更多信息。

关于ios - 将 Caffe 模型转换为 CoreML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44663214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com