拆分ONNX DNN模型



我正在尝试分割DNN模型为了在边缘上执行部分网络其余的在云中.因为它必须是跨平台的,并与每个框架一起工作,我需要直接从ONNX开始.

我知道如何从tensorflow/keras开始生成ONNX模型,以及如何运行ONNX模型,但我意识到在ONNX文件上工作真的很难,比如可视化和修改它。

是否有人可以帮助我理解如何分割和ONNX模型,或者至少运行ONNX模型的一部分(如从输入到N层和从N层到输出)?

我从这个情况开始:

# load MobileNetV2 model
model = MobileNetV2()
# Export the model
tf.saved_model.save(model, "saved_model")  
# export to .onnx
!python -m tf2onnx.convert --saved-model saved_model --output mobilenet_v2.onnx --opset 7
# open the saved ONNX Model
print("Import ONNX Model..")
onnx_model = onnx.load("mobilenet_v2.onnx")
tf_rep = prepare(onnx_model, logging_level="WARN", auto_cast=True)

我试图使用sclblonnx但是在这么大的模型上(虽然它是一个小模型),我不能真正打印图形,当我用textlist_inputs/list_outputs列出输入和输出时,我真的不知道它们是如何相互连接的。

任何帮助都将非常感激。提前谢谢你。

在Onnx PythonAPI规范中,您可以通过指定张量的输入名称和输出名称来分割Onnx模型。

您可能需要做的第一件事是理解下划线图形对于你的onnx模型。

onnx_graph = onnx_model.graph

将返回图形对象。

之后,您需要了解您想要在哪里将这个图分成两个单独的图(从而运行两个模型)。

你可以用中子绘制图形(这是sclblonnx所做的),或者你可以尝试通过查看

手动查看内部
onnx_graph_nodes = onnx_graph.node

当然,查看图的输入(onnx_graph.input)和输出(onnx_graph.output)也很重要。

如果你看"合并"从sclblonnx文件中,您将看到潜入图形以及"分割"的语法细节。函数可以帮助你。

相关内容

  • 没有找到相关文章

最新更新