我试图拆分DNN模型,以便在edge上执行网络的一部分,在cloud__上执行其余的网络。因为它必须是跨平台的,并且与每个框架一起工作,所以我需要直接从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_/ list _列出输入和输出时,我并不真正了解它们是如何相互关联的。
任何帮助都将不胜感激。提前谢谢你。
发布于 2022-05-27 06:50:53
从Onnx规范中,您可以通过指定张量的输入名和输出名来拆分onnx模型。
发布于 2022-07-12 09:01:37
您可能需要做的第一件事是理解所拥有的onnx模型的下划线图。
onnx_graph = onnx_model.graph将返回图形对象。
在此之后,您需要了解要将此图划分为两个单独的图(因此运行两个模型)的位置。
您可以用Netron绘制图形(这就是sclblonnx所做的),也可以通过查看来手动查看内部。
onnx_graph_nodes = onnx_graph.node当然,查看图形输入(onnx_graph.input)和输出(onnx_graph.output)也很重要。
如果您查看sclblonnx中的"合并“文件,您将看到跳入图形的语法细节以及”拆分“函数可能对您有所帮助。
https://stackoverflow.com/questions/69439234
复制相似问题