-2

最近我想看看 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"]

图像看起来像这样:

瀑布图像

谢谢你的帮助 !

4

1 回答 1

2

如果您只对香蕉和胡萝卜的图像进行训练,那么该模型应该只用于香蕉和胡萝卜的图像。

当你给它一种完全不同的图像时,它会尝试将它与它学到的模式相匹配,要么是香蕉,要么是胡萝卜,没有别的。

换句话说,这些模型并没有按照您期望的方式工作。

于 2020-05-03T10:31:18.313 回答