【好物分享】onnx-modifier:可视化操作助力模型更改,让你不再为更改模型烦恼!

简介: 【好物分享】onnx-modifier:可视化操作助力模型更改,让你不再为更改模型烦恼!

前言

  在人工智能领域中,深度学习模型的训练和部署是非常重要的环节。而ONNX是一种开放的深度学习模型表示格式,可以让不同的深度学习框架之间进行模型的转换和共享。而ONNX-Modifier则是一个能够对ONNX模型进行修改的工具,可以对模型进行简化、优化等操作,以达到更好的性能和效果。在本篇博客中,我们将详细介绍ONNX-Modifier的使用方法和优势。

安装

源码+命令行启动

  • 拉取onnx-modifier,安装所需要的Python库
  • bash
  • 复制代码
git clone git@github.com:ZhangGe6/onnx-modifier.git
cd onnx-modifier
pip install onnx flask
  • 运行
  • 复制代码
python app.py

从可执行文件启动

  • 默认使用Edge浏览器作为运行环境。

生成可执行文件的步骤记录在app_desktop.py文件中。未来会为其他平台生成可执行文件。

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

目前已支持下列操作:

✅ 删除/恢复节点

✅ 修改节点输入输出名

✅ 修改模型输入输出名

✅ 增加模型输出节点

✅ 编辑节点属性值

✅ 增加新节点

✅ 修改模型batch size

✅ 修改模型initializers

实操

  我们采用从可执行文件启动方式为例子,为大家逐一介绍如何进行实操。这里我们使用一个随意的onnx文件导入到onnx-modifier中:

image.png

删除/恢复节点

  删除节点有两种模式:Delete With ChildrenDelete Single Node. 后者只删除当前单个节点;而前者还会自动删除以这个节点为根节点的所有子节点,当我们需要删除一长串节点时,这个功能会比较有用。

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

  执行删除操作后,被删除的节点首先会变灰显示,以供预览。如果某一个节点被误删了,在该节点的侧边栏点击Recover Node即可以将其恢复到图中。预览确认删除操作无误后,点击Enter,图结构会刷新,显示节点删除后的状态。

例如我们需要删除第一个sigmoid节点:

image.png

修改节点输入输出名

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

  那在onnx-modifer中要怎么做呢?很简单,找到节点侧边栏的输入输出对应的输入框,键入新的名称就可以啦。图结构会根据键入的名称即时自动刷新。

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

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

如果我们希望通过修改,让节点AAA(比如上例中的data_0节点)连向节点BBB(比如上例中的第一个Conv节点),建议的方式是:将节点BBB的输入名称修改为节点AAA的输出名称,而不是把AAA的输出名称修改为节点BBB的输入名称。 因为节点BBB的输入名称可能同时为其他节点(比如上例中的Transpose节点)的输出名称,会导致一些预料外的结果。

上例的修改过程如下图所示:

image.png

修改模型输入输出名称

点击模型输入或输出节点,在弹出的侧边栏中,为模型输入输出键入新的名称即可。

image.png

增加模型输出节点

  有时候我们需要增加/抽取某个特定节点的输出作为整个模型的输出。比如之前的模型输出节点在编辑过程中被删除了,需要增加新的,或者有时候我们需要抽取一些中间层特征输出做更细致的分析。

  通过onnx-modifier,我们只需要在对应节点的侧边栏中,点击Add Output按钮即可在该节点后部增加一个模型输出节点,其名称与原节点的输出名相同。

  如下图,我们增加了两个模型输出节点,分别为第一个卷积层的输出和第二个卷积层的输出。

image.png

编辑节点属性值

在节点侧边栏对应的属性值输入框中,键入新的属性值即可。

点击属性值输入框右侧的+,可显示该属性的参考信息。

image.png

增加新节点

  有时候我们希望向模型中添加新节点。onnx-modifier已开始支持该功能。

  在主页面的左上方,有一个Add node按钮和一个selector选择器,我们可以通过这二者的配合,完成节点的添加,只需3步:

  1. 在selector中选择要添加的节点类型,在点击Add node按钮后,一个对应类型的新节点将自动出现在图上。

selector中包含来自ai.onnx(171), ai.onnx.preview.training(4), ai.onnx.ml(18) 和 com.microsoft(1)的所有节点类型。

  1. 点击这个新节点,在弹出的侧边栏中进行节点的编辑:
  • 节点属性:初始化为null (显示为undefined)。同上节,在对应的属性框中输入新值即可。
  • 修改节点输入输出名。输入输出名决定了节点将插入在图结构中的位置。
  1. 完工(点击Download即可获得编辑后的ONNX模型)。

以下是该功能的一些提醒和小tip:

  1. 点击节点侧边栏的NODE PROPERTIEStype框右侧的?,和节点属性框右侧的+,可以显示关于当前节点类型/属性值的参考信息。
  2. 为确保正确性,节点的各属性值建议全部填写(而不是留着undefined)。默认值在当前版本可能支持得还不够好。
  3. 如果一个属性值是列表类型,则各元素之间使用‘,’分隔,无需'[]'。
  4. 在当前版本中,如果一个节点的输入/输出是一个列表类型(如Concat),限制最多显示8个。如果一个节点实际输入/输出小于8个,则填写对应数目的输入输出即可,多出来的应以list_custom开头,它们会在后续处理中自动被忽略。

修改模型batch size

动态batch size和固定batch size均已支持。

  • 动态batch size:点击Dynamic batch size即可;
  • 动态bacth size:在Fixed batch size后方输入框内填入预期的batch size值;

修改模型initializers

有时候我们要修改一些保存在模型initializer中的数值,比如卷积层的权重/偏置参数,Reshape节点的shape参数等。使用onnx-modifier,这一操作将非常简单:在对应节点侧边栏的initializer中键入新的数值,点击Download即可。

如果要修改我们新增加的节点的initializer,除了键入其数值之外,还要键入其数据类型。(如果我们不确定数据类型,可以点击NODE PROPERTIES->type->?,在弹出的节点的详细介绍界面中,可能会找到线索。)

image.png

参考资料


相关文章
|
7月前
|
并行计算 Linux 计算机视觉
还在手工标注数据集?快来试一试自动化多模型标注大模型-gui交互式标注(部署运行教程-高效生产力)
还在手工标注数据集?快来试一试自动化多模型标注大模型-gui交互式标注(部署运行教程-高效生产力)
|
3月前
|
语音技术 计算机视觉 开发者
多模态模型评测框架lmms-eval发布!全面覆盖,低成本,零污染
【9月更文挑战第15天】LMMS-EVAL 是一项由多家研究机构联合开发的多模态模型评测框架,旨在为大型多模态模型提供全面、低成本且零污染的评测基准。该框架包含超过50个任务和10多个模型,覆盖图像分类、目标检测、语音识别等多个领域,使研究人员能够在有限资源下轻松评估和比较模型性能。通过利用实时更新的数据源,LMMS-EVAL 还确保了模型在真实世界中的泛化能力。论文地址: https://arxiv.org/abs/2407.12772
68 5
|
4月前
|
人工智能 JSON 算法
不是吧?这么好用的开源标注工具,竟然还有人不知道…
LabelU是一款专为AI项目设计的强大多模态数据标注工具,支持图像、视频、音频等多样化数据类型。它提供灵活的标注工具与自定义配置选项,让用户根据需求定制高效标注流程。特色功能包括一键载入预标注结果以简化修正工作,以及支持JSON、COCO等多种格式的导出选项。LabelU既可本地部署确保数据安全,也提供在线版本方便快速上手。此外,OpenDataLab还开源了Label-LLM对话标注工具和MinerU文档处理工具,进一步丰富了数据准备的工作流。欢迎访问[LabelU](https://github.com/opendatalab/labelU)了解更多详情,并为这些优秀工具点赞支持!
124 0
不是吧?这么好用的开源标注工具,竟然还有人不知道…
|
4月前
|
数据采集 人工智能 监控
赌你一定想要!OpenDataLab首款大模型多模态标注平台Label-LLM正式开源
Label-LLM 是一款专为大模型训练设计的多模态文本对话标注工具,支持团队协作,让标注工作变得简单高效。它不仅涵盖丰富的任务类型,如回答采集、偏好收集和内容评估等,还支持多模态数据标注,包括图像、视频和音频。Label-LLM具备预标注载入功能,能大幅提升工作效率,并提供全方位的任务管理与可视化分析,确保标注质量。快来体验这款强大的标注平台吧![部署文档](https://github.com/opendatalab/LabelLLM)
824 0
赌你一定想要!OpenDataLab首款大模型多模态标注平台Label-LLM正式开源
|
6月前
|
语音技术 计算机视觉
CVPR 2024 Highlight :北航等发布时间特征维护:无需训练,极致压缩加速Diffusion
【6月更文挑战第28天】在CVPR 2024会议上,北航等研究团队提出了**时间特征维护**技术,针对Diffusion模型实现无需训练的高效压缩与加速。通过选择性保留关键时间特征,他们在保持生成质量的同时,实现了模型4bit极致压缩和超过2.38倍硬件加速,简化了复杂模型,提升了运行效率。这一创新方法有望改善Diffusion模型在实际应用中的资源需求,但其鲁棒性和泛化能力尚需更多验证。[论文链接](https://arxiv.org/pdf/2311.16503)
73 5
|
6月前
|
人工智能 vr&ar
太炸裂了!SDXL Turbo在线图片实时生成,速度无与伦比【无需注册或登录】
太炸裂了!SDXL Turbo在线图片实时生成,速度无与伦比【无需注册或登录】
太炸裂了!SDXL Turbo在线图片实时生成,速度无与伦比【无需注册或登录】
|
机器学习/深度学习 人工智能 数据可视化
【网安AIGC专题10.19】论文4:大模型(CODEX 、CodeGen 、INCODER )+自动生成代码评估:改进自动化测试方法、创建测试输入生成器、探索新的评估数据集扩充方法
【网安AIGC专题10.19】论文4:大模型(CODEX 、CodeGen 、INCODER )+自动生成代码评估:改进自动化测试方法、创建测试输入生成器、探索新的评估数据集扩充方法
475 1
|
7月前
|
机器学习/深度学习 JSON 自然语言处理
python自动化标注工具+自定义目标P图替换+深度学习大模型(代码+教程+告别手动标注)
python自动化标注工具+自定义目标P图替换+深度学习大模型(代码+教程+告别手动标注)
|
机器学习/深度学习 自然语言处理 安全
【网安AIGC专题10.11】论文1:生成式模型GPT\CodeX填充式模型CodeT5\INCODER+大模型自动程序修复(生成整个修复函数、修复代码填充、单行代码生产、生成的修复代码排序和过滤)
【网安AIGC专题10.11】论文1:生成式模型GPT\CodeX填充式模型CodeT5\INCODER+大模型自动程序修复(生成整个修复函数、修复代码填充、单行代码生产、生成的修复代码排序和过滤)
198 0
|
机器学习/深度学习 缓存 人工智能
X-Anylabeling: 新一代自动标注工具
X-AnyLabeling:具备增强功能的高级自动标注解决方案
6364 0
X-Anylabeling: 新一代自动标注工具
下一篇
DataWorks