onnx-modifier:ONNX可视化编辑

onnx-modifier:ONNX可视化编辑,第1张


ONNX (Open Neural Network Exchange) 是一种针对机器学习所设计的开放式的文件格式,经常作为不同框架模型转化的中间文件。有时我们拿到ONNX文件,想将它进行一些修改,比如:

  • 删除部分节点。 比如,ONNX文件中一些前后处理的算子节点。
  • 增加节点。
  • 修改节点属性。比如修改某一节点的输入输出名称。

目前常用的方法是,先可视化模型图结构,然后基于ONNX的Python API编写脚本,对模型图结构进行编辑。但这可能需要我们在可视化-脚本-可视化-…之间反复横跳。而且在一张庞大的图上搜集想要修改的节点,也比较花时间。

能不能有一个工具,可以实时预览编辑后的可视化效果,从而更方便,快捷,直观地实现ONNX模型的编辑呢?🚀 这便是onnx-modifier (github)开发的动机。所有的编辑信息将最终汇总,统一送由ONNX Python处理,得到编辑后的ONNX模型文件。

onnx-modifier基于流行的模型可视化工具 Netron 和轻量级Web应用框架 flask 开发。希望它能给社区带来一些贡献~

安装与运行
  • 拉取onnx-modifier,安装所需要的Python库

    git clone [email protected]:ZhangGe6/onnx-modifier.git
    cd onnx-modifier
    
    pip install onnx
    pip install flask
    
  • 运行

    python app.py
    

    点击输出中的url(如http://127.0.0.1:5000/),即可在浏览器中进入onnx-modifier界面。点击Open Model...,上传所需要编辑的模型文件,上传完毕后,网络可视化结构会自动显示。

编辑

图结构层级的 *** 作按钮放置在可视化页面的左上角,有三个:PreviewResetDownload. 它们的功能分别为:

  • Preview:预览当前编辑得到的模型图结构;
  • Reset:重置模型图结构为初始状态;
  • Download:保存编辑后的模型文件到本地。

节点层级的 *** 作都在节点属性栏里,点击某一节点后即可d出,一起来康康。

删除节点

删除节点有两种模式:Delete With ChildrenDelete Single Node. 后者只删除当前单个节点;而前者还会自动删除以这个节点为根节点的所有节点,就不用一个一个删除啦。

Delete With Children方法基于回溯算法实现。

被删除的节点会变灰显示。删除节点的效果如下:

重置节点

在节点对应的属性栏点击Recover Node按钮,可将被删除的节点重新恢复到图中。

修改节点输入输出名称

通过修改节点的输出输出名,我们可以对模型推理图进行修改(如删除一些预处理/后处理节点)。该功能同样可以用在更改模型的输出的名称(即修改模型叶子节点的输出名)。

那在onnx-modifer中要怎么做呢?在节点属性栏中有一个RENAME HELPER小节。当前节点的全部输入/输出名都会列在这里(不包含模型权重),每个输入/输出名后面跟着一个输入框,直接在对应的输入框中,键入新的名称就可以啦。

比如,在下图所示的模型中,我们想要删除预处理对应的节点(Sub->Mul->Sub->Transpose),可以这样做:

  1. 点击第一个Conv节点,在d出的属性栏中,将输入名称改为serving_default_input:0
  2. 预览一下,发现输入已经和第一个Conv直接相连,几个预处理节点也已经从前向图中分离出来,将它们删除;
  3. 完工,预览check一下(点击Download就可以获得编辑后的ONNX模型啦)。

onnx-modifer正在活跃地更新中🛠。 欢迎使用,提issue,如果有帮助的话,感谢给个⭐️~

参考资料
  • Netron
  • flask
  • ONNX Python API Official doc, Leimao’s Blog
  • ONNX IO Stream Leimao’s Blog
  • onnx-utils
  • sweetalert

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/801659.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-07
下一篇 2022-05-07

发表评论

登录后才能评论

评论列表(0条)

保存