我尝试了最近在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)
答案 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