jjzjj

python - Core ML 模型转换失败,返回 "Unable to infer input name and dimensions"

coder 2023-09-25 原文

我正在尝试从 Places205 - GoogLeNet 制作一个 Core ML 模型,如 Apple 所述 here .

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

根据 Apple 的 WWDC session ,我们可以使用 Coremltools 转换该模型。在他们的 session 中,我们不知道他们使用哪个 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.

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

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

如何修复这个错误?

最佳答案

看起来 Matthijs 用他上面的评论解决了你的核心问题,但我可以为 future 遇到其他模型的人扩展这个问题。

当使用 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 描述之一中看到以下内容:

input: "data"
input_shape {
  dim: 1
  dim: 3
  dim: 227
  dim: 227
}

如果您的 .prototxt 文件缺少此输入,您可以在文件中的第一个 layer { 实例之前添加上述任一内容。维度依次为:批量大小(被 Core ML 忽略)、颜色 channel 、图像宽度、图像高度。您可以调整这些以匹配网络的预期。

您可能还需要验证“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')

关于python - Core ML 模型转换失败,返回 "Unable to infer input name and dimensions",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44697524/

有关python - Core ML 模型转换失败,返回 "Unable to infer input name and dimensions"的更多相关文章

  1. ruby-on-rails - 在 Rails 中将文件大小字符串转换为等效千字节 - 2

    我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,

  2. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  3. ruby-on-rails - rails : "missing partial" when calling 'render' in RSpec test - 2

    我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou

  4. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  5. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  6. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  7. ruby - 将数组的内容转换为 int - 2

    我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]

  8. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  9. ruby - 将散列转换为嵌套散列 - 2

    这道题是thisquestion的逆题.给定一个散列,每个键都有一个数组,例如{[:a,:b,:c]=>1,[:a,:b,:d]=>2,[:a,:e]=>3,[:f]=>4,}将其转换为嵌套哈希的最佳方法是什么{:a=>{:b=>{:c=>1,:d=>2},:e=>3,},:f=>4,} 最佳答案 这是一个迭代的解决方案,递归的解决方案留给读者作为练习:defconvert(h={})ret={}h.eachdo|k,v|node=retk[0..-2].each{|x|node[x]||={};node=node[x]}node[

  10. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

随机推荐