CoreML2不断告诉我一切都是一样的

时间:2018-11-12 19:33:40

标签: swift coreml

我尝试从小做起,并用2个项目训练了我的模型。它可以很好地识别这两个项目,但是当我向其显示除它所知道的2个项目之外的其他项目时,它总是告诉我这始终是同一项目。例如,我有一个苹果和香蕉。如果我给它看苹果,它可以正确地给我苹果,如果我给它显示香蕉,它可以正确地返回香蕉。但是,如果我给它看狗,它就告诉我这是一个苹果。如果我给它看直升机,它告诉我这是一个苹果。我什至尝试了一个if语句,说如果它不是苹果或香蕉,则只是返回无法识别它,但这永远不会发生,因为除了香蕉以外,其他所有东西始终都是苹果?!

编辑 我的问题被否决了,也许是因为误解。我不是在问为什么我只训练一个苹果和香蕉时为什么它不能识别狗,我是在问为什么当我给它看狗时它不能告诉我该图像无法识别,而不是告诉我这是一个苹果。显然,如果我只训练了2个项目,那么它只会识别2个项目。

这是返回分类的代码

func processClassifications(for request: VNRequest, error: Error?) {
    DispatchQueue.main.async {
        guard let results = request.results else {
            self.classificationLabel.text = "Unable to classify image"
            return
        }

        let classifications = results as! [VNClassificationObservation]

        if classifications.isEmpty {
            self.classificationLabel.text = "Nothing recognized"
        } else {
            //Display top classifications ranked by confidence in the UI
            let topClassifications = classifications.prefix(1)
            let descriptions = topClassifications.map { classification in
                return String(format: " (%.2f) %@", classification.confidence, classification.identifier)

            }


            self.classificationLabel.text = descriptions.joined(separator: "\n")

        }
    }
}

2 个答案:

答案 0 :(得分:2)

如果您仅对模型进行了2个项目的训练(在您的情况下为Apple和Banana),那么您就不能指望机器学习模型可以识别这2个项目以外的东西。 您编写的代码总是返回最有把握的项目。


无论如何,如果您有更多物品,则可以执行以下操作:如果没有物品与测试图像的匹配度至少达到x%,请执行此操作

guard let topResult = classifications.first else { return }

if topResult.confidence > 0.75 {
    print(topResult.identifier)
} else {
    print("Match is less than 75%")
}

答案 1 :(得分:0)

在作为分类器的模型中,您总是获得与类一样多的VNClassificationObservation对象。不多不少。只有在运行模型时遇到问题,该数组才为空。