英语| 简体中文
介绍
要编辑ONNX模型,一种常见的方法是可视化模型图,并使用ONNX Python API进行编辑。这很好。但是,我们必须编码进行编辑,然后可视化以进行检查。这两个过程可能会迭代多次,这很耗时。
如果我们有一个工具,该工具使我们能够以完全可视化的方式编辑和预览编辑效果怎么办?
然后Onnx模型来了。有了它,我们可以专注于在可视化平台中编辑模型图。所有编辑信息将终于会自动汇总和处理。然后我们的时间可以节省!
ONX-Modifier是基于流行的网络查看器Netron和轻量级Web应用程序框架瓶构建的。
目前,支持以下编辑操作:
✅删除节点
✅添加新节点
✅重命名节点输入和输出
✅重命名模型输入和输出
✅添加新的型号输出
✅添加新模型输入
✅编辑模型输入形状
✅节点的编辑属性
✅编辑模型初始化器
这是更新日志和待办事项列表。这是设计概述,这可能对想要为该项目做出贡献的人有帮助。
希望它有帮助!
入门
我们现在有三种启动ONNX模型的方法。
从安装轮发射
安装预构建的车轮
pip install onnx-modifier
然后运行
onnx-modifier
从源代码启动
克隆回购并通过
git clone https://githu**b.c*om/ZhangGe6/onnx-modifier.git
cd onnx-modifier
pip install -r requirements.txt
然后运行
python entry.py
单击烧瓶生成的输出信息中的URL(默认为http://127.***0.0.1:5000/),然后将在Web浏览器中启动ONNX-modifier。
从可执行文件启动
单击以展开
- Windows:下载onnx-modifier.exe(28.3MB)Google驱动器 /百度网络驱动器,双击它并享受。
- Edge浏览器默认情况下用于运行时环境。
我记录了如何在app_desktop.py中制作可执行文件。其他平台的可执行文件将供将来的工作。
单击“打开”模型…上传ONNX模型进行编辑。该模型将被解析并显示在页面上。
用法
图级操作元素放在页面的左上角上。当前,有三个按钮:重置,下载和添加节点。他们可以做:
- 重置:将整个模型图重置为其初始状态;
- 下载:将修改的模型保存到磁盘中。注意右侧的两个复选框
- (实验)选择“保存模型”时选择形状推理以进行形状推断。
- 形状推断功能建立在Onnx-Tool上,这是一个强大的ONNX第三方工具。
- (实验)选择清洁以删除未使用的节点和张量(例如Onnx GraphSurgeon)。
- (实验)选择“保存模型”时选择形状推理以进行形状推断。
- 添加节点:在模型中添加一个新节点。
节点级操作元素都在侧边栏中,可以通过单击特定节点来调用。
让我们仔细看一下。
删除节点
有两种模式用于删除节点:带有孩子的删除和删除单节点。 DELETE单节点仅删除单击节点,而带有孩子的删除也删除了扎根于单击节点上的所有节点,如果我们想删除长节点的长路径,这很方便且自然。
与儿童删除的实施是基于回溯算法。
为了预览,删除的节点首先处于灰色模式。如果错误删除了节点,则恢复节点按钮可以帮助我们将其恢复回图。单击输入按钮将删除操作生效,然后更新的图将在页面上自动显示。
下图显示了一个典型的删除过程:
添加新节点
有时,我们希望将新节点添加到现有的模型中。 ONX-Modifier现在实验支持此功能。
请注意,有一个添加节点按钮,然后在索引页面的左上方带有选择器元素。为此,我们需要做的是3个步骤一样容易:
-
选择选择器中的节点类型,然后单击“添加节点”按钮。然后,所选类型的空节点将在图表上出现。
选择器包含AI.ONX(171),AI.ONNX.PREVIEW.TRAINN(4),AI.ONNX.ML(18)和COM.MICROSOFT(1)的域中的所有受支持的操作员类型。
-
单击新节点,然后在调用的Siderbar中进行编辑。我们需要填充的是节点属性(默认情况下未定义)及其输入/输出(它们决定将节点插入在图中的位置)。
-
我们完成了。
以下是此功能的一些注释:
-
通过单击?在节点属性 – >类型元素或每个属性元素中的 +中,我们可以获取一些参考来帮助我们填写节点信息。
-
建议填充所有属性,而不会使其不确定。在当前版本中,默认值可能不受很好的支持。
-
对于带有类型列表的属性,项目用\’\’(逗号)分开。请注意,不需要[]。
-
对于带有类型列表的输入/输出,当前版本中它最多是8个元素。如果实际输入/输出数量小于8,则可以将未使用的项目留下以list_custom开头的名称,并且将自动省略。
重命名节点输入和输出
通过更改节点的输入/输出名称,我们可以更改模型向前路径。如果我们要重命名模型输出,也可能会有所帮助。
使用ONNX模型,我们可以通过在其相应的输入占位符中输入节点输入/输出的新名称来实现这一目标。根据新名称,将自动,立即更新图形拓扑。
例如,现在我们要删除下图中显示的预处理操作员(子 – > mul-> sub-> transpose)。我们可以
- 单击第一个Conv节点,将其输入(X)重命名为serving_default_input:0 (node data_0的输出)。
- 模型图会自动更新,我们可以看到输入节点链接到第一个汇总。此外,预处理操作员已从主要例程分开。删除它们。
- 我们完成了! (单击下载,然后我们可以获取修改后的ONNX模型)。
注意:要链接节点 $ a $ (在上面示例中的data_0)到节点 $ b $ (上面示例中的第一个Conv),建议编辑节点的输入 $ b $到节点A的输出,而不是编辑节点的输出 $ a $到节点B的输入。因为 $ b $也可以是其他节点的输出(在上面的示例中转置),并且会发生意外结果。
该过程如下图所示:
重命名模型输入和输出
单击模型输入/输出节点,在侧边栏中键入新名称,然后我们完成。
添加新的模型输出
有时,我们想将某个节点的输出设置为模型输出。例如,我们想提取中间层输出以进行细粒分析。在ONNX模型中,我们可以通过单击相应节点的侧边栏中的添加输出按钮来实现这一目标。然后,我们可以按照相应的节点获得一个新的模型输出节点。它的名称与相应节点的输出相同。
在下面的示例中,我们添加了2个新的模型输出,它们分别是第一个Conv节点和第二个Conv节点的输出。
添加新模型输入
有时,我们需要将输入添加到模型(例如从原始模型中提取的子模型)。在ONNX模型中,我们可以通过:
- 单击节点以添加输入,然后单击调用侧栏中的“添加输入”按钮。
- 在弹出的对话框中,选择选择器中的输入名称,然后输入其形状。然后Cilck“确认”。
- 我们完成了。
注意:输入形状在“ dtype [dim0,dim1,…]”格式中假定,例如“ float32 [1,3,224,224]”。否则警告显示,“确认”按钮将被禁用。此外,有时可以通过分析模型(我们可以信任)预先填充输入形状。如果没有,我们应该手动设置它。
编辑节点的属性
将原始属性更改为新值,然后我们完成了。
通过单击占位符右侧的 +,我们可以获得一些有用的参考。
编辑模型输入形状
ONNX模型现在支持编辑输入形状。单击目标模型输入,然后单击更改输入形状(静态)按钮。在弹出对话框中,为输入设置一个新形状,然后单击“确认”。下载的修改模型将更新DownsRteam Tensor形状(而不是立即在Pannel中进行更新,因为单击“下载”后将应用形状推理过程)。
ONX-Modifier还支持更改输入为动态。目前,仅支持批处理维度。只需单击设置的动态批量尺寸按钮,我们就会获得一个支持动态批处理大小推理的模型。
编辑模型初始化器
有时,我们想编辑存储在模型初始化器中的值,例如卷积层的重量/偏差或Reshape节点的形状参数。 ONNX模型现在支持此功能!在调用的侧边栏中输入一个初始化器的新值,然后单击下载,然后我们完成。
注意:对于新添加的节点,我们还应输入初始化器的数据类型。 (如果我们不确定数据类型是什么,请单击节点属性 – > type->?,我们可能会得到一些线索。)
最新版本(2023.12.10之后)支持从Numpy文件读取初始化器值!只需单击“打开 *.npy”按钮,然后选择numpy文件,该值将在上述占位符中解析并显示。可以进一步编辑这些值。
样本模型
为了进行快速测试,提供了一些典型的样本模型如下。其中大多数来自ONNX模型动物园
- Squeezenet链接(4.72MB)
- Mobilenet链接(13.3MB)
- Resnet50-Int8链接(24.6MB)
- Movenet亮点链接(9.01MB)
- 使用TensorFlow-Onnx从验证的Tflite模型转换;
- 该模型中有预处理节点和大量后处理节点。
ONX-Modifier处于主动开发范围内。欢迎使用,创建问题并提取请求! ?
学分和推荐材料
- 网络
- 烧瓶
- onnx ir官方文档
- Onnx Python API官方文档,Leimao的博客
- onnx io流leimao的博客
- onnx-utils
- Sweetalert
- 烧瓶
- Onnx-Tool?
- 上升/AIT
