最近我想看看 CoreML 和 CreateML,所以我创建了带有对象识别的简单应用程序。
我只为香蕉和胡萝卜创建了模型(只是为了尝试)。我使用了 60 多张图像来训练我的模型,在 Create ML 应用程序中训练过程看起来很好。
一切都很顺利,直到我在控制台中打印出结果,我看到我的模型 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"]
图像看起来像这样:
谢谢你的帮助 !