核心ML模型转换失败,出现“无法推断输入名称和维度”

2024-10-01 07:45:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从Places205-GoogLeNet创建一个核心ML模型,如Applehere所述。在

我不想使用苹果现成的模型,所以我从这个链接得到了原始模型:https://developer.apple.com/machine-learning/model-details/Places205-GoogLeNet.txt

根据苹果的WWDC会议,我们可以使用Coremltools转换模型。在他们的会话中,我们不知道他们在使用哪个IDE进行Python编码,但目前我正在使用Pycharm进行Python编码。在

使用到模型的链接,我们可以得到两个东西:caffemodel和.prototext。我尝试使用coremltools转换这些,但收到以下错误:

RuntimeError: Unable to infer input name and dimensions. Please provide a .prototxt file with 'Input' layer and dimensions defined.

所以,如果苹果的给定模型没有转换,那么我们怎么能说其他的开源模型会起作用呢?在

你可以在所附的屏幕截图中看到我的代码库。在

如何修复此错误?在

enter image description here


Tags: andhttps模型苹果developerapple编码核心
1条回答
网友
1楼 · 发布于 2024-10-01 07:45:28

看起来Matthijs通过上面的评论解决了你的核心问题,但我可以为将来遇到其他模型的人进一步说明这一点。在

当使用Apple的coremltools将Caffe模型转换为.mlmodel文件时,Apple的转换器同时接受二进制的.caffemodel(包含模型结构和权重)以及基于文本的.prototxt模型描述(它可能比.caffemodel有更多的上下文)。在

通常,经过培训的Caffe模型会有一些不同的.prototxt文件(deploy.prototxtsolver.prototxttrain.prototxt),您通常希望使用deploy.prototxt(或类似名称的prototxt)。在

即使这样做了,您仍然可能会遇到coremltools“无法推断输入名称和维度”的错误。Caffe模型没有明确的要求来说明模型将接受的输入维度,因此coremltools试图从一些不同的来源推断出这一点。如果这些源文件丢失,您可能需要自己编辑到.prototxt文件中。在

在上面链接的deploy_places205.protxt中,此输入大小由文件顶部的以下代码指定:

input: "data"
input_dim: 10
input_dim: 3
input_dim: 224
input_dim: 224

但您也可以在这些.prototxt描述中看到以下内容:

^{pr2}$

如果有一个.prototxt文件的输入中缺少该文件,则可以在该文件的第一个layer {实例之前添加上述任何一个。这些尺寸依次为:批大小(被核心ML忽略)、颜色通道、图像宽度、图像高度。您可以调整这些以符合网络的期望。在

您可能还需要验证“data”是否是模型使用的输入层,因此请查找第一个layer {实例,并检查它是否在其中显示bottom: "data"。如果图层名称不同,则可能需要在此处或在数据层名称中更改它。在

您可能还需要在coremltools转换器中设置数据层名称,以确保它选择了正确的名称。作为参考,下面是我用于转换如下模型的小Python脚本:

import coremltools

coreml_model = coremltools.converters.caffe.convert(('mymodel.caffemodel', 'deploy.prototxt'),
                                                    image_input_names = "data",
                                                    is_bgr = True,
                                                    class_labels='labels.txt'
                                                   )


coreml_model.save('MyModel.mlmodel')

相关问题 更多 >