使用 Apple 的 Create ML 应用程序(Xcode 附带的开发工具),我训练了一个图像分类模型并下载了它。然后,我使用包将模型加载为 python 项目的coremltools
一部分:
import coremltools
import PIL.Image
def load_image(path, resize_to=None):
img = PIL.Image.open(path)
if resize_to is not None:
img = img.resize(resize_to, PIL.Image.ANTIALIAS)
r, g, b= img.split()
img = PIL.Image.merge("RGB", (b, g, r))
return img
model = coremltools.models.MLModel('classification1.mlmodel')
img_dir = "img1"
img = load_image(img_dir, resize_to=(299, 299))
result = model.predict({'image': img})
print(result)
此代码打印的classlabel
预测结果与我img1
直接在 Create ML 应用程序中预测标签时得到的预测结果不同。我相信应用程序在预测图像的类标签之前对输入图像进行了一些调整。当 I 时print(model)
,我得到了一些关于输入的信息:
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
}
}
}
}
}
我相信我已经通过调整图像大小和转换色彩空间进行了所需的调整。为什么代码和应用程序之间的预测不一致?