CoreML2 一直告诉我一切都是一样的

CoreML2 keeps telling me everything is the same thing

我正在尝试从小处着手,并用 2 个项目训练了我的模型。它能很好地识别两者,但是当我向它展示它所知道的 2 项以外的其他内容时,它一直告诉我这始终是同一项。例如,我有一个苹果和一个香蕉。如果我给它看苹果,它会正确地给我苹果,如果我给它看香蕉,它会正确地给 returns 香蕉。但如果我给它看一只狗,它会告诉我这是一个苹果。如果我给它看一架直升机,它会告诉我这是一个苹果。我什至尝试了一个 if 语句来说明如果它不是苹果或香蕉,那么就 return 它无法被识别,但这永远不会发生,因为除了香蕉之外的所有东西都是苹果?!

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

这是return分类的代码

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 个项目(在您的例子中是 Apple 和 Banana)进行训练,您不能指望您的 ML 模型识别出这 2 个项目之外的其他东西。 您编写的代码总是 returns 项最有信心。


无论如何,如果您有更多项目,您可以执行以下操作:如果没有项目与测试图像匹配至少 x%,请执行此操作

guard let topResult = classifications.first else { return }

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

在作为分类器的模型中,您总是得到与 类 一样多的 VNClassificationObservation 个对象。不多也不少。仅当模型 运行 出现问题时数组才为空。