model_a = onnx.load("yolov5s_v6_0.onnx")
model_b = onnx.load("yolov5s_rknn.onnx")
diff = OnnxDiff(model_a, model_b,)
results = diff.summary(output=True)
print(results)
Difference Detected (91.84504%)
╭────────────────────┬─────────┬─────────╮
│ Matching Fields │ A │ B │
├────────────────────┼─────────┼─────────┤
│ Graph.Initializers │ 0/142 │ 0/122 │
│ Graph.Inputs │ 0/1 │ 0/1 │
│ Graph.Outputs │ 0/4 │ 0/3 │
│ Graph.Nodes │ 117/392 │ 117/201 │
│ Graph.Misc │ 4/5 │ 4/5 │
│ Misc │ 9/10 │ 9/10 │
╰────────────────────┴─────────┴─────────╯
SummaryResults(exact_match=False, score=0.9184503979065958, a_valid=True, b_valid=True, graph_matches={'initializers': Matches(same=0, a_total=142, b_total=122), 'inputs': Matches(same=0, a_total=1, b_total=1), 'outputs': Matches(same=0, a_total=4, b_total=3), 'nodes': Matches(same=117, a_total=392, b_total=201), 'misc': Matches(same=4, a_total=5, b_total=5)}, root_matches={'misc': Matches(same=9, a_total=10, b_total=10)})
rknn demo里的yolov5 onnx模型非v6.0版本
以下参考是过程中尝试用Bing Chat功能来实现脚本,但问题挺多。
核心是使用OnnxDiff对象中的summary方法,但Chat中给出的方法不存在。
如何对比两个onnx文件
你好,这是必应。😊
ONNX 是一个开放的机器学习模型格式,可以让你在不同的框架和工具之间交换模型⁵⁸。要对比两个 ONNX 文件,你可以使用一些专门的工具或库,例如:
onnx-diff
:一个命令行工具,可以比较两个 ONNX 模型的结构和权重⁹。
Netron
:一个可视化工具,可以打开和检查 ONNX 模型的图形表示。
onnxruntime
:一个运行时库,可以加载和执行 ONNX 模型,并提供一些实用函数,例如
compare_model_outputs
和
compare_model_predictions
。
你想要对比两个 ONNX 文件的什么方面呢?
Source: Conversation with Bing, 2023/2/18(1) Open Neural Network Exchange - Wikipedia.
en.wikipedia.org/wiki/Open_N…
Accessed 2023/2/18.
(2) ONNX | Home.
onnx.ai/
Accessed 2023/2/18.
(3) GitHub - onnx/onnx: Open standard for machine learning interoperability.
github.com/onnx/onnx
Accessed 2023/2/18.
(4) 怎样快速对两个excel文件对比比较-百度经验.
jingyan.baidu.com/article/2fb…
Accessed 2023/2/18.
(5) 教程:使用 ONNX 深度学习模型检测对象 - ML.NET | Microsoft Learn.
learn.microsoft.com/zh-cn/dotne…
Accessed 2023/2/18.
(6) ONNX简明教程_Ericam_的博客-CSDN博客_onnx模型用法.
blog.csdn.net/xjm85055258…
Accessed 2023/2/18.
(7) 深度学习之ONNX框架互通生态 - 知乎.
zhuanlan.zhihu.com/p/165225746
Accessed 2023/2/18.
(8) ONNX models | Microsoft Learn.
learn.microsoft.com/en-us/windo…
Accessed 2023/2/18.
(9) What is ONNX? - AI
@Edge
Community.
microsoft.github.io/ai-at-edge/…
Accessed 2023/2/18.
如何使用onnx-diff工具,比较onnx模型结构,请举例
要使用 onnx-diff 工具,你需要先安装它。你可以在 GitHub 上找到它的源代码和安装说明。
onnx-diff 的基本用法是:
onnx-diff model1.onnx model2.onnx
这会比较两个 ONNX 模型的结构和权重,并输出差异的报告。
例如,如果你有两个模型
model1.onnx
和
model2.onnx
,它们的结构如下:
model1.onnx
graph(%x : Float(3:4, 4:1, requires_grad=0, device=cpu)):
%y : Float(3:4, 4:1, requires_grad=0, device=cpu) = onnx::Add(%x, %x)
return (%y)
model2.onnx
graph(%x : Float(3:4, 4:1, requires_grad=0, device=cpu)):
%y : Float(3:4, 4:1, requires_grad=0, device=cpu) = onnx::Mul(%x, %x)
return (%y)
那么运行 onnx-diff model1.onnx model2.onnx
后,你会得到类似这样的输出:
--- a/model1.onnx
+++ b/model2.onnx
@@ -6 +6 @@
- op_type = "Add"
+ op_type = "Mul"
这表示两个模型在第六行有不同,一个是用 Add
操作,一个是用 Mul
操作。
你还可以使用一些选项来控制 onnx-diff 的行为,例如:
-v
或 --verbose
:显示更多细节。
-w
或 --weights-only
:只比较权重,不比较结构。
-t THRESHOLD
或 --threshold THRESHOLD
:设置权重差异的阈值。默认为 0.00001。
你可以使用 -h
或 --help
查看所有可用的选项。
Source: Conversation with Bing, 2023/2/18(1) JbPasquier/stable-diffusion-onnx-ui - GitHub. github.com/JbPasquier/… Accessed 2023/2/18.
(2) GitHub - HighCWu/DiffSinger-ONNX-Infer: DiffSinger ONNX Inference. github.com/HighCWu/Dif… Accessed 2023/2/18.
(3) onnx/Operators.md at main · onnx/onnx · GitHub. github.com/onnx/onnx/b… Accessed 2023/2/18.
(4) ONNX Concepts — ONNX 1.14.0 documentation. onnx.ai/onnx/intro/… Accessed 2023/2/18.
(5) ONNX Runtime Inference Examples - GitHub. github.com/microsoft/o… Accessed 2023/2/18.
(6) microsoft/onnxruntime-training-examples - GitHub. github.com/microsoft/o… Accessed 2023/2/18.
(7) Gallery of examples — sklearn-onnx 1.11 documentation. onnx.ai/sklearn-onn… Accessed 2023/2/18.
如何使用pip安装onnx-diff
要使用 pip 安装 onnx-diff,你可以在终端中输入以下命令:
pip install onnx-diff
这会从 PyPI 下载并安装 onnx-diff 的最新版本⁵。
如果你遇到任何问题,你可以在 GitHub 上查看 onnx-diff 的源代码和文档。
Source: Conversation with Bing, 2023/2/18(1) onnx-diff · PyPI. pypi.org/project/onn… Accessed 2023/2/18.
(2) GitHub - HighCWu/DiffSinger-ONNX-Infer: DiffSinger ONNX Inference. bing.com/search?q=pi… Accessed 2023/2/18.
(3) onnx · PyPI. pypi.org/project/onn… Accessed 2023/2/18.
(4) GitHub - onnx/onnx: Open standard for machine learning interoperability. github.com/onnx/onnx Accessed 2023/2/18.
(5) GitHub - HighCWu/DiffSinger-ONNX-Infer: DiffSinger ONNX Inference. github.com/HighCWu/Dif… Accessed 2023/2/18.
使用python如何调用onnx-diff
要使用 python 调用 onnx-diff,你可以在 python 代码中导入 onnx-diff 模块,并使用它的函数来比较两个 ONNX 模型。
例如,你可以写一个类似这样的代码:
import onnx
import onnx_diff
model1 = onnx.load("model1.onnx")
model2 = onnx.load("model2.onnx")
diff_report = onnx_diff.diff(model1, model2)
print(diff_report)
这会输出两个模型的差异报告,类似于命令行工具的输出。
你也可以使用其他参数来控制比较的方式,例如:
ignore_weights
:是否忽略权重的比较。
threshold
:设置权重差异的阈值。
verbose
:是否显示更多细节。
你可以在 GitHub 上查看 onnx-diff 的源代码和文档⁵,或者在 PyPI 上查看它的版本信息⁵。
Source: Conversation with Bing, 2023/2/18(1) onnx-diff · PyPI. pypi.org/project/onn… Accessed 2023/2/18.
(2) numpy.diff — NumPy v1.24 Manual. numpy.org/doc/stable/… Accessed 2023/2/18.
(3) Python | onnxruntime. onnxruntime.ai/docs/get-st… Accessed 2023/2/18.
(4) onnxruntime-directml · PyPI. pypi.org/project/onn… Accessed 2023/2/18.
(5) ONNX with Python — ONNX 1.14.0 documentation. onnx.ai/onnx/intro/… Accessed 2023/2/18.
(6) GitHub - leimao/ONNX-Python-Examples: ONNX Python Examples. github.com/leimao/ONNX… Accessed 2023/2/18.
(7) numpy.diff — NumPy v1.24 Manual. numpy.org/doc/stable/… Accessed 2023/2/18.
(8) Python NumPy Diff With Examples - Python Guides. pythonguides.com/python-nump… Accessed 2023/2/18.
(9) ONNX with Python — ONNX 1.14.0 documentation. onnx.ai/onnx/intro/… Accessed 2023/2/18.
(10) Gallery of examples — sklearn-onnx 1.11 documentation. onnx.ai/sklearn-onn… Accessed 2023/2/18.
(11) Python | onnxruntime. onnxruntime.ai/docs/get-st… Accessed 2023/2/18.
如何使用OnnxDiff,比较onnx请举例
你好,这是必应。我猜你想知道如何使用 OnnxDiff 类比较两个 ONNX 模型。根据网上搜索的结果¹²³⁴,我尝试给你一个简单的例子:
假设你有两个 ONNX 模型,model1.onnx 和 model2.onnx,它们都是类似的深度学习模型,但是最后一层针对不同的数据集进行了优化或重新训练。
你可以使用 onnx_diff 包中的 OnnxDiff 类来创建一个对象,用来比较这两个模型的结构和参数。例如,你可以这样写:
from onnx_diff.diff import OnnxDiff
diff = OnnxDiff("model1.onnx", "model2.onnx")
然后,你可以使用 diff 对象的各种方法来查看模型之间的差异。例如,你可以这样写:
print(diff.diff_nodes())
print(diff.diff_params())
print(diff.diff_attrs())
这些方法会返回一个字典,其中键是节点或参数或属性的名称,值是一个元组,表示两个模型中对应的值。如果值相同,则元组中只有一个值。如果值不同,则元组中有两个值,分别表示两个模型中的值。
我希望这能帮助你使用 OnnxDiff 类比较两个 ONNX 模型。祝你好运!😊
Source: Conversation with Bing, 2023/2/18(1) Inference Comparison Between ONNX and Imported Networks for ... - MathWorks. www.mathworks.com/help/deeple… Accessed 2023/2/18.
(2) Tutorial: Detect objects using an ONNX deep learning model - ML.NET. learn.microsoft.com/en-us/dotne… Accessed 2023/2/18.
(3) nabarunbaruaAIML/onnx_model_size_compression - GitHub. github.com/nabarunbaru… Accessed 2023/2/18.
(4) How to merge two ONNX deep learning models - Stack Overflow. stackoverflow.com/questions/6… Accessed 2023/2/18.