无法通过任何方式将 .h5 模型转换为 ONNX 进行推理

2024-02-11

我在 .h5 中构建了一个自定义模型Matterport Mask RCNN 实现 https://github.com/matterport/Mask_RCNN。我成功地保存了完整的模型,而不是单独使用的权重model.keras_model.save(),并假设它工作正常。

我需要将此模型转换为 ONNX,以便在 Unity Barracuda 中进行推理,在此过程中我遇到了一些错误。 我试过:

T1。 .h5 到 ONNX 使用本教程 https://medium.com/analytics-vidhya/how-to-convert-your-keras-model-to-onnx-8d8b092c4e4f和 keras2onnx 包,我遇到了一个错误:

model = load_model('model.h5')

Error:
ValueError: Unknown layer: BatchNorm

T2。使用定义自定义层这个 GitHub 代码 https://github.com/vagomundo21/Save-Load-MaskRCNN-model:

 model = keras.models.load_model(r'model.h5', custom_objects={'BatchNorm':BatchNorm, 
'tf':tf, 'ProposalLayer':ProposalLayer, 
'PyramidROIAlign1':PyramidROIAlign1, 'PyramidROIAlign2':PyramidROIAlign2,
'DetectionLayer':DetectionLayer}, compile=False)

Error:
ValueError: No model found in config file.
ValueError: Unknown layer: PyramidROIAlign

T3。 .h5 到 .pb (冻结图)和 .pbtxt,然后在找到输入和输出节点后使用 tf2onnx 从 .pb 到 ONNX(似乎只有一个?):

assert d in name_to_node, "%s is not in graph" % d
AssertionError: output0 is not in graph

T4。使用 tf-serving 代码将 .h5 转换为 SavedModel从这里 https://github.com/moganesyan/tensorflow_model_deployment进而python -m tf2onnx.convert --saved-model exported_models\coco_mrcnn\3 --opset 15 --output "model.onnx"转换为 ONNX:

ValueError: make_sure failure: variable mrcnn_detection/map/while/Enter already exists as state variable.

TLDR: 有没有办法通过任何直接/间接方式将我的 .h5 模型转换为 ONNX?我已经被这个问题困扰好几天了!

提前致谢。

编辑1: 看起来keras.models.load_model()抛出前两个错误 - 想知道是否有一种方法可以使用 .pb/.pbtxt 模型,或者不使用的方法load_model(),或者解决问题的方法load_model() issue?

Edit 2:

T1 代码 https://file.io/tp8AOZBISJNc: 自定义数据集修改自Matterport Mask RCNN 实现 https://github.com/matterport/Mask_RCNN

T4 代码 https://file.io/ZEnstfO8t4Vs


尝试将其转换为保存的模型格式,然后转换为 onnx。

import numpy as np
import tensorflow as tf
from tensorflow import keras


def get_model():
    # Create a simple model.
    inputs = keras.Input(shape=(32,))
    outputs = keras.layers.Dense(1)(inputs)
    model = keras.Model(inputs, outputs)
    model.compile(optimizer="adam", loss="mean_squared_error")
    return model

model = get_model()
# Train the model.
test_input = np.random.random((128, 32))
test_target = np.random.random((128, 1))
model.fit(test_input, test_target)

# Calling `save('my_model.h5')` creates a h5 file `my_model.h5`.
model.save("my_h5_model.h5")

# It can be used to reconstruct the model identically.
model = keras.models.load_model("my_h5_model.h5")
tf.saved_model.save(model, "tmp_model")

然后使用 tf2onnx 进行转换。

python3 -m tf2onnx.convert --saved-model tmp_model --output "model.onnx"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法通过任何方式将 .h5 模型转换为 ONNX 进行推理 的相关文章

随机推荐

  • XXX_* 输入生成的 *.pb.go 文件

    我正在研究一个tutorial https ewanvalentine io microservices in golang part 1 关于 gRPC 当我生成 pb go文件 我得到一些XXX 输入我的结构 这是我的consignme
  • Eclipse > Javascript > 代码高亮不能使用对象表示法

    我在用Eclipse Helios 使用 PDT 以及当我使用默认值编辑 JavaScript 文件时JavaScript Editor JSDT 代码高亮 Mark Occurrences 不适用于 JSON style or Objec
  • 嵌套 vue.js 实例/元素

    这可能听起来像一个真正的菜鸟问题 但我对 MVVM 甚至 JS 中的 MVC 都很陌生 所以提前抱歉 我正在使用 vue js 并且到目前为止很喜欢它的简单性 但对于我想做的事情 我认为我需要以不同的方式去做 我想将 Vue 实例 元素嵌套
  • 从两个多态类继承

    给出以下代码 class T public virtual T virtual void foo 0 class U public U U void bar std cout lt lt bar lt lt std endl class A
  • 如何在 join linq 语法中比较 null

    处理 EF 4 C Face join 中的问题 SQL语法 Select a Code b Name from DepartmentMaster a Join DepartmentDetail b on isnull a ID 0 isn
  • 如何在 Snakemake 表格配置中使用列表,用于描述生物信息学管道的测序单元

    如何在 Snakemake 表格配置中使用列表 我使用 Snakemake Tabular 与 BWA mem 映射 配置来描述我的测序单元 在单独的行上测序的文库 在分析的下一阶段 我必须合并测序单元 映射的 bed 文件 并获取合并的
  • 使用 PORT=XXXX 启动节点永久脚本

    当通过特定端口运行节点命令时 我会这样启动应用程序 PORT 1234 node app js 我如何将端口传递给forever命令 无论我做什么 似乎都不想工作 我试过了 将端口作为参数传递 forever start app js 12
  • 循环浏览用户指定的根目录中的子文件夹和文件[重复]

    这个问题在这里已经有答案了 我通过各个文件的循环脚本工作正常 但我现在还需要它来查找多个目录 我被困住了 事情发生的顺序 提示用户选择他们需要的根目录 我需要脚本来查找该根目录中的任何文件夹 如果脚本找到一个 它将打开第一个 所有文件夹 因
  • 如何在Java中使用Graphics2D旋转文本?

    我想使用 Graphics2D 旋转 JPanel 上的文本 我的代码是这样的 double paso d width numeroBarras double alto datos i valor Font fBarras new Font
  • 在 MATLAB 中实现显式欧拉方法(适用于 ODE)

    我到处都找过了 但什么也没找到 首先 我想说我从未使用过 Mat Lab 所以我不知道我在做什么 我尝试了一些方法 但没有任何效果 显然 y 0 2 试图创建一个包含 0 个值为 2 的单位的列表 无论如何 有人可以帮助我吗 我需要在 Ma
  • 我们可以在透明窗口上应用着色器吗

    I am looking to apply a particular shader to a transparent window for example on a live desktop I want to create a trans
  • Perl XML::LibXML $node->findnodes($xpath) 找到它不应该找到的节点

    这是我遇到问题的一些代码 我处理一些 XML 并在 OO 类的方法中从文档中重复的几个节点中的每个节点提取一个元素 每个节点的子树中应该只有一个这样的元素 但我的代码获取所有元素 就好像它对整个文档进行操作一样 因为我只期望获得 oine
  • SSRS 报告显示为列出的目录

    如何获取 SSRS 报告以显示网页视图 当我转到 SSRS 报告页面时 它没有显示网页视图 它显示数据源 数据集和报告文件夹的列表 进入报告文件夹后 我可以通过单击它们来调用报告 没有任何问题 https docs google com f
  • 以分离模式启动的 docker 容器在进程执行后停止

    我使用以下命令以分离模式创建 docker 容器 docker run OPTIONS name my image d container name bin bash c opt init sh 所以我需要在创建的容器中执行 opt ini
  • 排序时保留 JSON 数组

    我有两个来自外部网站的 JSON 数组 我对两个数组进行排序和合并 对其进行解码 然后按 ID 从最高到最低对它们进行排序 目前 当单击 按字母顺序 选项时 sort alphabetical添加到 URL 的末尾 当页面完成重新加载时 J
  • 忽略 $Id 行的合并工具

    我需要合并一个分叉项目 不幸的是 CVS Id 行不同 因此我尝试的合并工具报告所有文件都不同 其中 95 只有这一行不同 是否有一个合并工具可以配置为忽略基于模式的行比较结果 编辑 我发现 WinMerge 有线路过滤器 正确设置它们实际
  • supertest的expect和then有什么区别?

    使用时supertest为了在 JavaScript 中测试异步 HTTP 请求 这两个片段有什么区别 其中一项是正确的 另一项是错误的吗 request http localhost 8080 get api people expect
  • 在 Fluent Migrator 中回滚到以前的版本

    我正在尝试使用流畅的迁移器来进行我的项目的迁移 但由于缺乏文档 我正在努力弄清楚如何回滚并拥有Down方法调用了我的迁移类 我使用初始版本 1 类设置了数据库 Migration 1 public class Baseline Migrat
  • Python:如何保存16位通道的图像(例如48 RGB)?

    我正在科学地处理显微镜图像 其中 3 个 RGB 通道均编码为 uint16 0 65536 目前 我使用 OpenCV2 和 NumPy 来处理图像 并使用标志 cv2 IMREAD UNCHANGED 读取一切正常 我可以对图像做一些工
  • 无法通过任何方式将 .h5 模型转换为 ONNX 进行推理

    我在 h5 中构建了一个自定义模型Matterport Mask RCNN 实现 https github com matterport Mask RCNN 我成功地保存了完整的模型 而不是单独使用的权重model keras model