我正在尝试从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.
所以,如果苹果的给定模型没有转换,那么我们怎么能说其他的开源模型会起作用呢?在
你可以在所附的屏幕截图中看到我的代码库。在
如何修复此错误?在
看起来Matthijs通过上面的评论解决了你的核心问题,但我可以为将来遇到其他模型的人进一步说明这一点。在
当使用Apple的coremltools将Caffe模型转换为.mlmodel文件时,Apple的转换器同时接受二进制的.caffemodel(包含模型结构和权重)以及基于文本的.prototxt模型描述(它可能比.caffemodel有更多的上下文)。在
通常,经过培训的Caffe模型会有一些不同的.prototxt文件(
deploy.prototxt
,solver.prototxt
,train.prototxt
),您通常希望使用deploy.prototxt
(或类似名称的prototxt)。在即使这样做了,您仍然可能会遇到coremltools“无法推断输入名称和维度”的错误。Caffe模型没有明确的要求来说明模型将接受的输入维度,因此coremltools试图从一些不同的来源推断出这一点。如果这些源文件丢失,您可能需要自己编辑到.prototxt文件中。在
在上面链接的
deploy_places205.protxt
中,此输入大小由文件顶部的以下代码指定:但您也可以在这些.prototxt描述中看到以下内容:
^{pr2}$如果有一个.prototxt文件的输入中缺少该文件,则可以在该文件的第一个
layer {
实例之前添加上述任何一个。这些尺寸依次为:批大小(被核心ML忽略)、颜色通道、图像宽度、图像高度。您可以调整这些以符合网络的期望。在您可能还需要验证“data”是否是模型使用的输入层,因此请查找第一个
layer {
实例,并检查它是否在其中显示bottom: "data"
。如果图层名称不同,则可能需要在此处或在数据层名称中更改它。在您可能还需要在coremltools转换器中设置数据层名称,以确保它选择了正确的名称。作为参考,下面是我用于转换如下模型的小Python脚本:
相关问题 更多 >
编程相关推荐