Core ML iOS 11无法正确识别图像

时间:2017-07-04 05:55:40

标签: swift image-recognition ios11 coreml

我尝试了最近在iOS中引入的Core ML来识别和分类图像。问题是,它没有为发送的图像提供正确的结果。

如果我发送一个地球图像(Globe),它会给我作为泡泡的课程。以下是我使用的代码,

            let model = Resnet50()

            let pixelBuffer: CVPixelBuffer =  (modelImg.pixelBuffer())!

            if let prediction = try? model.prediction(image: pixelBuffer) {
                print( "Found it!! It is a/an \(prediction.classLabel)")
            }

是否可以在现有Core ML模型的基础上使用自定义用例训练模型?(例如Resnet50)

2 个答案:

答案 0 :(得分:5)

要扩展Matusalem的答案,在使用图像分类网络时,您只能在其中一个训练过的课程中获得结果。在这种情况下,您似乎使用了Apple has made available for download预训练的ResNet50 Core ML模型。

该图像分类网络与您在那里发现的许多其他网络一样,已经在ImageNet大规模视觉识别挑战2012数据集上进行了培训,通常称为ImageNet或ILSVRC2012。该数据集成为2012年竞赛后卷积神经网络设计的基准,因此您可以找到许多使用它的预训练网络。它有1000种可以在图像中识别的东西,以及标签here的完整列表。你会注意到" globe"不在其中,因此网络将提供与其训练过的最接近的匹配类别。

如果您之前从未见过地球仪,或者甚至没有看过地球仪,那么您能识别一个吗?这些网络可以以令人惊讶的方式进行推广,但如果他们甚至没有针对您要分类的内容的类别,他们将无法提供您想要的结果。

ImageNet数据集是一个有趣的起点,但对于实际使用来说可能并不是最好的。它有一个奇怪的类分布,类似于200种犬种,但没有人类。它可以是预训练网络的一个很好的起点,然后使用传输学习将该网络优化为您的特定数据集,但您很可能希望训练您自己的特定于应用程序的网络。这是一个完整的话题。

答案 1 :(得分:3)

核心ML只能用于已经训练过的模型的推理。您将不得不使用其他工具预先训练您的模型,然后使用Core ML Tools将其转换为Core ML。您可以在文档中找到支持的第三方机器学习工具和格式:

https://developer.apple.com/documentation/coreml/converting_trained_models_to_core_ml