我正在开发一个机器学习应用程序,它可以对手绘的数字进行分类。我已经做了一个使用CreateML的模型,它的准确率被认为是100% (我承认我的样本数量只有50张左右)。然而,在我的应用程序上运行它时,它不起作用。为了查看我的应用程序是否出了问题,我下载了苹果Vision+CoreML实例 Xcode项目,并将MobileNet分类器替换为自己的分类器。我加载了从我自己的应用程序保存在手机上的图像,分类仍然不准确。有趣的是,我尝试在操场上的CreateML UI空间中测试完全相同的图像,在那里您可以测试图像和分类工作。
TL/DR:图像分类在操场上的CreateML直播视图上工作,但不对来自苹果的vision+coreML示例项目的确切副本进行分类。
发布于 2022-04-15 13:55:05
类似的问题我已经有好几天了,问题是CreateML可能会为BGR格式创建神经网络,而在Xcode项目中,colorSpace可以使用RGB创建神经网络。您可以使用coremltools和PIL库在Python上测试您的模型。
诊断问题
获取模型的元数据
import coremltools
from PIL import Image
#Import your model.
mlmodel = coremltools.models.MLModel('Path/To/Your/Model.mlmodel')
#print your metadata of your model, you will see input colorSpace.
print(mlmodel)输入可能如下所示
input {
name: "image"
shortDescription: "Input image to be classified"
type {
imageType {
width: 299
height: 299
colorSpace: BGR
imageSizeRange {
widthRange {
lowerBound: 299
upperBound: -1
}
heightRange {
lowerBound: 299
upperBound: -1
}
}
}
}
}转换输入的颜色空间
img = Image.open("Path/To/Your/Image")
img = img.convert("RGBA").
data = np.array(img)
red, green, blue, alpha = data.T
data = np.array([blue, green, red, alpha])
data = data.transpose()
img = Image.fromarray(data)
PIL_image = Image.fromarray(np.array(image))通过转换图像从模型中预测
print(str(mlmodel.predict({'image': PIL_image})) + '\n')这次你的预测应该是正确的。
我的解决方案
不幸的是,我不得不放弃了CreateML,在应用程序方面,我尝试在PixelBuffer中转换颜色空间,甚至通过导入OpenCV库将颜色空间转换成cv::Mat和cv::Mat到UIImage,但它们都不适合我。我用苹果的另一个简单的ML创建平台https://github.com/apple/turicreate解决了我的问题。您必须使用python来与这个API交互,但是文档非常清楚,而ML模板与CreatML是一样的。这个API比CreateML更好,因为您可以在培训前后与您的模型进行交互,而CreateML可以非常封闭,即使使用coremltools,您也不能经常与它交互。这个API对每个人来说都是非常容易访问的,它的文档中确实有很好的代码示例和场景。
https://stackoverflow.com/questions/55252394
复制相似问题