Core ML iOS 11 无法正确识别图像
Core ML iOS 11 not recognizing images properly
我尝试了最近在 iOS 中引入的 Core ML 来识别和 class 化图像。问题是,它没有为发送的图像提供正确的结果。
如果我发送地球图像(地球仪),它会给我 class 作为气泡。下面是我使用的代码,
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)
Core ML 只能用于已训练模型的推理。您将不得不使用一些其他工具来预先训练您的模型,然后使用 Core ML 工具将其转换为 Core ML。您可以在文档中找到支持的第三方机器学习工具和格式:
https://developer.apple.com/documentation/coreml/converting_trained_models_to_core_ml
为了扩展 Matusalem 的答案,当使用图像分类网络时,您只能在其训练所针对的 类 之一中获得结果。在这种情况下,您似乎正在使用 Apple has made available for download.
预训练的 ResNet50 Core ML 模型
该图像分类网络与您在那里发现的许多其他网络一样,已经在 ImageNet 大规模视觉识别挑战赛 2012 数据集(通常称为 ImageNet 或 ILSVRC2012)上进行了训练。该数据集在 2012 年比赛后成为卷积神经网络设计的基准,因此您会发现许多使用它的预训练网络。它有 1000 种可以在图像中识别的事物类别,以及完整的标签列表 here。您会注意到 "globe" 不在其中,因此网络将提供最接近其训练对象的匹配类别。
如果您以前从未见过地球仪,甚至从未接触过 "globe" 这个词,您能认出一个吗?这些网络可以以令人惊讶的方式进行概括,但如果它们甚至没有您想要分类的类别,它们将无法提供您想要的结果。
ImageNet 数据集是一个有趣的起点,但可能不是最适合实际使用的数据集。它有一个奇怪的 类 分布,大约有 200 种狗,但没有人类。它可能是预训练网络的一个很好的起点,然后使用迁移学习将该网络改进为您的特定数据集,但您很可能想要训练您自己的特定于应用程序的网络。那是另一个话题。
我尝试了最近在 iOS 中引入的 Core ML 来识别和 class 化图像。问题是,它没有为发送的图像提供正确的结果。
如果我发送地球图像(地球仪),它会给我 class 作为气泡。下面是我使用的代码,
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)
Core ML 只能用于已训练模型的推理。您将不得不使用一些其他工具来预先训练您的模型,然后使用 Core ML 工具将其转换为 Core ML。您可以在文档中找到支持的第三方机器学习工具和格式:
https://developer.apple.com/documentation/coreml/converting_trained_models_to_core_ml
为了扩展 Matusalem 的答案,当使用图像分类网络时,您只能在其训练所针对的 类 之一中获得结果。在这种情况下,您似乎正在使用 Apple has made available for download.
预训练的 ResNet50 Core ML 模型该图像分类网络与您在那里发现的许多其他网络一样,已经在 ImageNet 大规模视觉识别挑战赛 2012 数据集(通常称为 ImageNet 或 ILSVRC2012)上进行了训练。该数据集在 2012 年比赛后成为卷积神经网络设计的基准,因此您会发现许多使用它的预训练网络。它有 1000 种可以在图像中识别的事物类别,以及完整的标签列表 here。您会注意到 "globe" 不在其中,因此网络将提供最接近其训练对象的匹配类别。
如果您以前从未见过地球仪,甚至从未接触过 "globe" 这个词,您能认出一个吗?这些网络可以以令人惊讶的方式进行概括,但如果它们甚至没有您想要分类的类别,它们将无法提供您想要的结果。
ImageNet 数据集是一个有趣的起点,但可能不是最适合实际使用的数据集。它有一个奇怪的 类 分布,大约有 200 种狗,但没有人类。它可能是预训练网络的一个很好的起点,然后使用迁移学习将该网络改进为您的特定数据集,但您很可能想要训练您自己的特定于应用程序的网络。那是另一个话题。