Ios 为什么我预先训练的mlmodel在对象识别中会如此错误?
最近我想查看CoreML和CreateML,所以我创建了一个简单的应用程序,带有对象识别功能 我只为香蕉和胡萝卜创建了一个模型(只是为了一次尝试)。我使用了60多张图片来训练我的模型,在CreateML应用程序中,训练过程看起来很好 一切都很顺利,直到我在控制台上打印出结果,我看到我的模型100%相信瀑布是一个香蕉 理想情况下,我认为香蕉的输出为0%,胡萝卜的输出为0%(因为我使用了瀑布的图像) 你能给我解释一下为什么输出是这样的,并给我一些如何改进我的应用程序的建议吗 这是我的图像识别代码:Ios 为什么我预先训练的mlmodel在对象识别中会如此错误?,ios,swift,coreml,createml,Ios,Swift,Coreml,Createml,最近我想查看CoreML和CreateML,所以我创建了一个简单的应用程序,带有对象识别功能 我只为香蕉和胡萝卜创建了一个模型(只是为了一次尝试)。我使用了60多张图片来训练我的模型,在CreateML应用程序中,训练过程看起来很好 一切都很顺利,直到我在控制台上打印出结果,我看到我的模型100%相信瀑布是一个香蕉 理想情况下,我认为香蕉的输出为0%,胡萝卜的输出为0%(因为我使用了瀑布的图像) 你能给我解释一下为什么输出是这样的,并给我一些如何改进我的应用程序的建议吗 这是我的图像识别代码:
func recognizeObject (image: CIImage) {
guard let myModel = try? VNCoreMLModel(for: FruitVegeClassifier_1().model) else {
fatalError("Couldn't load ML Model")
}
let recognizeRequest = VNCoreMLRequest(model: myModel) { (recognizeRequest, error) in
guard let output = recognizeRequest.results as? [VNClassificationObservation] else {
fatalError("Your model failed !")
}
print(output)
}
let handler = VNImageRequestHandler(ciImage: image)
do {
try handler.perform([recognizeRequest])
} catch {
print(error)
}
}
在控制台中,我们可以看到:
[<VNClassificationObservation: 0x600001c77810> 24503983-5770-4F43-8078-F3F6243F47B2 requestRevision=1 confidence=1.000000 "banana", <VNClassificationObservation: 0x600001c77840> E73BFBAE-D6E1-4D31-A2AE-0B3C860EAF99 requestRevision=1 confidence=0.000000 "carrot"]
[24503983-5770-4F43-8078-F3F6243F47B2 requestRevision=1置信度=1.000000“香蕉”,E73BFBAE-D6E1-4D31-A2AE-0B3C860EAF99 requestRevision=1置信度=0.000000“胡萝卜”]
图像如下所示:
谢谢你的帮助 如果只对香蕉和胡萝卜的图像进行训练,则该模型应仅用于香蕉和胡萝卜的图像 当你给它一个完全不同类型的图像时,它会尝试将它与它所学的模式相匹配,要么是香蕉,要么是胡萝卜,别的什么都没有
换句话说,这些模型的工作方式与您期望的不同。您尝试过其他图像吗?是的,我尝试过,结果与我使用不匹配图像时的结果相同。没有“不匹配图像”这样的东西,一切都是香蕉或胡萝卜,您告诉模型的正是这一点。您只需要一个全新的模型/训练数据集。