一种兼容多框架的深度学习模型导出至ONNX的方法和装置
未命名
08-13
阅读:95
评论:0
一种兼容多框架的深度学习模型导出至onnx的方法和装置
技术领域
1.本发明涉及计算机技术领域,具体涉及一种兼容多框架的深度学习模型导出至onnx的方法和装置。
背景技术:
2.目前,深度学习模型部署大都采用转换为一个中间表示onnx(open neural network exchange,开放神经网络交换)来实现,然后通过推理引擎onnx runtime进行推理,也有通过tensorrt进行部署的。然而,onnx已经占据深度学习部署的大部分市场,各个深度学习框架厂商纷纷将其所采用的的框架转换到onnx。
3.目前,用于将各个框架依次转换到onnx的工具有很多,例如,ensorflow2onnx、keras2onnx、paddle2onnx。上述这些工具均具有对应于其特定的一套转换规则。例如,tensorflow2onnx是将tensorflow算子一一对应到onnx的算子,然后再将整个tensorflow模型计算图转换为对应的onnx的图,然后导出onnx模型。
4.由于各个框架之间算子、算子参数不尽相同,在将各个框架中的任意一个框架转换到onnx时,都需要配置对应于该框架所采用的特定的一套转换规则。
5.目前,各个深度学习框架在模型部署方面,具有其对应的特定一套转换工具(例如,paddle有paddle2onnx转换工具,mindspore有mindspore2onnx转换工具)。由于上述各个深度学习框架具有其对应的特定的前端接口,且各个前端接口之间均存在差异,各个深度学习框架均有其对应的一套转换规则;因此,针对采用不同转换规则的不同深度学习框架,用户需要依次实现对应框架的代码,并通过对应框架的代码来进行模型的部署及迁移,这将使得模型的部署及迁移过程变得困难。
技术实现要素:
6.基于此,有必要针对现有的针对采用不同转换规则的不同深度学习框架,模型的部署及迁移过程是极其困难的问题,提供一种兼容多框架的深度学习模型导出至onnx的方法、装置、存储介质、电子设备和计算机程序产品。
7.第一方面,本技术实施例提供了一种兼容多框架的深度学习模型导出至onnx的方法,所述方法包括:
8.获取目标模型的每个层的层信息,以及广度优先搜索规则,所述目标模型为深度学习统一编程框架模型,所述目标模型能够兼容多个采用不同转换规则的框架;
9.根据所述目标模型的每个层的层信息,以及广度优先遍历规则,对所述目标深度学习模型的每个层依序进行层遍历,得到对应的模型拓扑结构;
10.根据所述模型拓扑结构,对所述目标模型的每个层依序进行映射,以将模型节点映射至开放神经网络交换onnx;
11.根据将模型节点映射到onnx的映射结果和多个关键函数,通过创建onnx计算图和创建onnx模型,生成包括所述onnx模型的模型文件。
12.在一种实施方式中,所述获取目标模型的每个层的层信息,包括:
13.获取模块节点的各项属性信息,模块节点的各项属性信息包括神经网络层、当前层神经网络层输入节点、当前层神经网络层输出节点、当前层神经网络层输入值、当前层神经网络层输出值、以及当前网络层节点名称;
14.通过调用所述模块节点执行一次前向传播,获取目标模型的每个层的层信息,所述目标模型的每个层的层信息包括目标神经网络层、任意一层作为当前层所对应当前层神经网络层输入节点、任意一层作为当前层所对应的当前层神经网络层输出节点、任意一层作为当前层所对应的当前层神经网络层输入值、任意一层作为当前层所对应的当前层神经网络层输出值和任意一层作为当前层所对应的当前网络层节点名称。
15.在一种实施方式中,所述根据所述模型拓扑结构,对所述目标模型的每个层依序进行映射,以将模型节点映射至开放神经网络交换onnx,包括:
16.获取所述模型拓扑结构;
17.根据所述模型拓扑结构确定对应的拓扑排序方式;
18.根据拓扑排序方式,依序对每个层进行映射处理,得到对应的onnx算子组合,以将模型节点映射至onnx。
19.在一种实施方式中,所述多个关键函数至少包括用于创建onnx计算图的第一函数和用于创建onnx模型的第二函数,所述根据将模型节点映射到onnx的映射结果和多个关键函数,通过创建onnx计算图和创建onnx模型,生成包括所述onnx模型的模型文件,包括:
20.获取将模型节点映射到onnx的所述映射结果;
21.根据所述映射结果、所述第一函数和所述第二函数,创建对应的onnx计算图和对应的onnx模型;
22.验证所述onnx模型是否为有效模型,并在验证所述onnx模型有效的情况下,生成包括所述onnx模型的模型文件。
23.在一种实施方式中,所述验证所述onnx模型是否为有效模型,包括:
24.在从tensorlayerx所使用的每一层均能映射到onnx统一格式的情况下,验证所述onnx模型为有效模型。
25.在一种实施方式中,所述验证所述onnx模型是否为有效模型,还包括:
26.在所述tensorlayerx中至少包括一个不能映射到onnx统一格式的层的情况下,验证所述onnx模型为无效模型。
27.在一种实施方式中,所述目标模型能够兼容的多个采用不同转换规则的框架包括以下至少一项:
28.tneosflow、mindspore、paddlepaddle和pytorch。
29.第二方面,本技术实施例提供了一种兼容多框架的深度学习模型导出至onnx的装置,所述装置包括:
30.获取模块,用于获取目标模型的每个层的层信息,以及广度优先搜索规则,所述目标模型为深度学习统一编程框架模型,所述目标模型能够兼容多个采用不同转换规则的框架;
31.遍历模块,用于根据所述目标模型的每个层的层信息,以及广度优先遍历规则,对所述目标深度学习模型的每个层依序进行层遍历,得到对应的模型拓扑结构;
32.映射模块,用于根据所述模型拓扑结构,对所述目标模型的每个层依序进行映射,以将模型节点映射至开放神经网络交换onnx;
33.生成模块,用于根据将模型节点映射到onnx的映射结果和多个关键函数,通过创建onnx计算图和创建onnx模型,生成包括所述onnx模型的模型文件。
34.第三方面,本技术实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序用于执行上述的方法步骤。
35.第四方面,本技术实施例提供一种电子设备,所述电子设备包括:
36.处理器;
37.用于存储所述处理器可执行指令的存储器;
38.所述处理器,用于从所述存储器中读取所述可执行指令,并执行所述可执行指令以实现上述的方法步骤。
39.第五方面,本技术实施例提供一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现上述的方法步骤。
40.在本技术实施例中,获取目标模型的每个层的层信息,以及广度优先搜索规则,目标模型为深度学习统一编程框架模型,目标模型能够兼容多个采用不同转换规则的框架;根据目标模型的每个层的层信息,以及广度优先遍历规则,对目标深度学习模型的每个层依序进行层遍历,得到对应的模型拓扑结构;根据模型拓扑结构,对目标模型的每个层依序进行映射,以将模型节点映射至开放神经网络交换onnx;以及根据将模型节点映射到onnx的映射结果和多个关键函数,通过创建onnx计算图和创建onnx模型,生成包括onnx模型的模型文件。本技术实施例提供的兼容多框架的深度学习模型导出至onnx的方法,由于目标模型为深度学习统一编程框架模型、且目标模型能够兼容多个采用不同转换规则的框架,从而兼容多框架的深度学习模型导出至onnx的方法,能够支持多种深度学习框架后端(例如,paddle、mindspore、tensorflow、pytorch),通过切换后端就能改变计算引擎,因此,用户在模型部署迁移上就不需要实现对应框架代码来进行部署,只需切换后端即可。采用本技术实施例的兼容多框架的深度学习模型导出至onnx的方法,能够做到:针对采用不同转换规则的不同深度学习框架,模型部署及迁移的过程与所使用的计算后端无关,从而避免了由于算子接口差异所导致的需要设计多个映射方法的问题。
附图说明
41.通过参考下面的附图,可以更为完整地理解本发明的示例性实施方式。附图用来提供对本技术实施例的进一步理解,并且构成说明书的一部分,与本技术实施例一起用于解释本发明,并不构成对本发明的限制。在附图中,相同的参考标号通常代表相同部件或步骤。
42.图1为具体应用场景下的兼容多框架的深度学习模型导出至onnx的整体设计示意图;
43.图2为根据本技术一示例性实施例提供的兼容多框架的深度学习模型导出至onnx的方法的流程图;
44.图3为具体应用场景下的通过modulenode类收集模型拓扑结构示意图;
45.图4为具体应用场景下的模型节点映射到onnx的示意图;
46.图5为具体应用场景下的onnx构图和保存模型的示意图;
47.图6为根据本技术一示例性实施例提供的兼容多框架的深度学习模型导出至onnx的装置600的结构示意图;
48.图7示出了本技术一示例性实施例提供的一种电子设备的示意图;
49.图8示出了本技术一示例性实施例提供的一种计算机可读介质的示意图。
具体实施方式
50.下面将参照附图更详细地描述本公开的示例性实施方式。虽然附图中显示了本公开的示例性实施方式,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
51.需要注意的是,除非另有说明,本技术使用的技术术语或者科学术语应当为本技术所属领域技术人员所理解的通常意义。
52.另外,术语“第一”和“第二”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
53.本技术实施例提供一种兼容多框架的深度学习模型导出至onnx的方法及装置、一种电子设备以及计算机可读介质,下面结合附图进行说明。
54.如图1所示,为具体应用场景下的兼容多框架的深度学习模型导出至onnx的整体设计示意图。
55.如图1所示,基于深度学习统一编程框架所提供的高层次接口,可得到支持多计算后端的模型;给定模型一个输入进行一次前向传播,就能收集到所有高层次接口层的信息,然后利用广度优先搜索得到模型拓扑结构;遍历访问拓扑结构,依照映射一一将接口层的信息转换到onnx算子信息;最后使用onnx提供的make_graph函数、make_model函数来创建onnx计算图,使用check_model检验onnx模型,检验通过后保存模型就得到了model.onnx文件;此时,就可以将模型部署到目标设备进行推理。
56.需要说明的是,上述计算图是用来描述运算的有向无环图,计算图有两个主要元素:结点node和边edge;结点表示数据,如向量、矩阵、张量。边表示运算,如加减乘除卷积等。
57.如图1所示的整体设计图所展示的流程主要包括了四个部分,四个部分具体如下所述:
58.模型拓扑结构(用于遍历访问,然后将统一框架的神经网络层映射到onnx算子)、模型节点映射到onnx(用于生成onnx算子信息)、onnx构图和onnx模型(依据onnx算子信息导出onnx文件)。
59.请参考图2,其示出了本技术的一些实施方式所提供的一种兼容多框架的深度学习模型导出至onnx的方法的流程图,如图2所示,兼容多框架的深度学习模型导出至onnx的方法可以包括以下步骤:
60.步骤s201:获取目标模型的每个层的层信息,以及广度优先搜索规则,目标模型为深度学习统一编程框架模型,目标模型能够兼容多个采用不同转换规则的框架。
61.在本技术实施例提供的兼容多框架的深度学习模型导出至onnx的方法中,目标模型能够兼容的多个采用不同转换规则的框架包括以下至少一项:tneosflow、mindspore、paddlepaddle和pytorch。
62.在一种可能的实现方式中,获取目标模型的每个层的层信息,包括以下步骤:
63.获取模块节点的各项属性信息,模块节点的各项属性信息包括神经网络层、当前层神经网络层输入节点、当前层神经网络层输出节点、当前层神经网络层输入值、当前层神经网络层输出值、以及当前网络层节点名称;
64.通过调用模块节点执行一次前向传播,获取目标模型的每个层的层信息,目标模型的每个层的层信息包括目标神经网络层、任意一层作为当前层所对应当前层神经网络层输入节点、任意一层作为当前层所对应的当前层神经网络层输出节点、任意一层作为当前层所对应的当前层神经网络层输入值、任意一层作为当前层所对应的当前层神经网络层输出值和任意一层作为当前层所对应的当前网络层节点名称。
65.步骤s202:根据目标模型的每个层的层信息,以及广度优先遍历规则,对目标深度学习模型的每个层依序进行层遍历,得到对应的模型拓扑结构。
66.如图3所示,为具体应用场景下的通过modulenode类收集模型拓扑结构示意图。
67.如图3所示,构建modulenode对象,这其中包含了当前层节点信息,当前层的输入输出层节点信息以及输入输出数据。因为深度学习模型是由一个个神经网络组件layer构建组成,因此,将modulenode模块节点类封装到函数中,在每个layer的前向传播方法中调用modulenode来收集每个layer的信息。因为输入输出是有方向的,因此,只要执行一次前向传播就能收集到所有的节点信息;最后将每个node节点的信息进行广度优先访问就能得到一个深度学习模型的模型拓扑结构。
68.如图3所示,通过调用modulenode来收集每个层的信息的具体过程如下所述:
69.如图3所示,modulenode类在最左边类图里展示了modulenode的属性和方法。其中,属性包括layer(神经网络层)、in_nodes(当前层神经网络层输入节点)、out_nodes(当前层神经网络层输出节点)、in_tensors(当前层神经网络层输入值)、out_tensors(当前层神经网络层输出值)、以及node_name(当前网络层节点名称);其中,所采用的方法是layer(inputs),即执行一次前向传播。
70.如图3所示,图3的第二个模块为深度学习模型。深度学习模型是通过一个个layer堆叠连接起来的网络结构。在每个layer的前向传播方法中调用了modulenode,那么,当模型执行前向传播时,每个layer都会调用一次modulenode,此时,就能够记录每个layer的信息,即modulenode描述的属性:layer、in_nodes、out_nodes、in_tensors、out_tensors、node_name。由此,得到了图3中的第三个模块:模型所有节点信息。
71.在本技术实施例提供的兼容多框架的深度学习模型导出至onnx的方法中,根据目标模型的每个层的层信息,以及广度优先遍历规则,对目标深度学习模型的每个层依序进行层遍历,得到对应的模型拓扑结构具体如下所述:
72.上述广度优先遍历规则就是层次遍历。首先遍历第1层,然后遍历第2层,同一层次按照从左到右的顺序访问,直到遍历最后一层。图3中已获知模型所有的节点信息。
73.例如:layer=layer1、in_nodes=[input]、out_nodes=[layer1_node]、in_tensors=[a]、out_tensors=[b]、node_name=layer1;
[0074]
layer=layer2、in_nodes=[input]、out_nodes=[layer2_node]、in_tensors=[a]、out_tensors=[c]、node_name=layer2;
[0075]
layer=layer3、in_nodes=[layer1_node、layer2_node]、out_nodes=[layer3_node]、in_tensors=[b,c]、out_tensors=[d]、node_name=layer3;
[0076]
layer=layer4、in_nodes=[layer3_node]、out_nodes=[layer4_node]、in_tensors=[d]、out_tensors=[output]、node_name=layer4;
[0077]
采用上述广度优先遍历规则进行遍历为:按照层次进行遍历,具体为:第一层有layerl和layer2,那么,从左往右layer2,layer1(其输入是input,输出是b,c)。第二层只有layer3(其输入是b,c的node,输出是d)。第三层是layer4(其输入是d,输出是output)。检查到输出flag是output,遍历结束。上述经由广度优先遍历所得到的模型拓扑结构为:a-》[b,c]-》[d]-》[e]-》[output]。
[0078]
步骤s203:根据模型拓扑结构,对目标模型的每个层依序进行映射,以将模型节点映射至开放神经网络交换onnx。
[0079]
如图4所示,为具体应用场景下的模型节点映射到onnx的示意图。有了上述如图3所示的模型拓扑结构后,只需按照拓扑排序,依次将每个layer转换到onnx算子组合,就能完成模型节点映射了。
[0080]
在实际应用场景中,模型节点映射到onnx所采用的映射规则是根据onnx提供的标准(一种表示深度学习模型的开放格式,定义了一套独立于环境和平台的标准格式。)
[0081]
例如,2d卷积层:在tensorlayerx中是conv2d,那么,映射到onnx需要用onnx的格式来描述。如果layer中检测到是conv2d,那么,需要映射为onnx的写法,使用make_node('transpose')转换输入,再调用make_node(
‘
conv’)执行卷积。
[0082]
线性层:在tensorlayerx中是linear,那么,映射到onnx需要用onnx的格式来描述。如果layer中检测到是linear这个操作,不能直接映射,需要拆分成乘法和加法。那么,需要映射为onnx的写法,使用make_node(
‘
matmul’)执行乘法,再调用make_node(
‘
add’)执行加法。
[0083]
上述onnx提供的'transpose'、
‘
conv’、
‘
matmul’、以及
‘
add’都是标准格式。
[0084]
在一种可能的实现方式中,根据模型拓扑结构,对目标模型的每个层依序进行映射,以将模型节点映射至开放神经网络交换onnx,包括以下步骤:
[0085]
获取模型拓扑结构;
[0086]
根据模型拓扑结构确定对应的拓扑排序方式;
[0087]
根据拓扑排序方式,依序对每个层进行映射处理,得到对应的onnx算子组合,以将模型节点映射至onnx。
[0088]
步骤s204:根据将模型节点映射到onnx的映射结果和多个关键函数,通过创建onnx计算图和创建onnx模型,生成包括onnx模型的模型文件。
[0089]
在一种可能的实现方式中,多个关键函数至少包括用于创建onnx计算图的第一函数和用于创建onnx模型的第二函数,根据将模型节点映射到onnx的映射结果和多个关键函数,通过创建onnx计算图和创建onnx模型,生成包括onnx模型的模型文件,包括以下步骤:
[0090]
获取将模型节点映射到onnx的映射结果;
[0091]
根据映射结果、第一函数和第二函数,创建对应的onnx计算图和对应的onnx模型;
[0092]
验证onnx模型是否为有效模型,并在验证onnx模型有效的情况下,生成包括onnx模型的模型文件。
[0093]
在实际应用场景中,多个关键函数除了包括用于创建onnx计算图的第一函数和用于创建onnx模型的第二函数之外,还包括:用于校验模型是否有效的第三函数。
[0094]
如图5所示,为具体应用场景下的onnx构图和保存模型的示意图。得到如图4所示的将模型节点映射到onnx的映射结果之后,利用onnx自带的函数来完成onnx构图和onnx导出。上述过程使用make_graph(第一函数)、make_model(第二函数)函数来创建onnx计算图,使用check_model(第三函数)检验模型,检验通过后,保存模型就得到了model.onnx文件。
[0095]
在实际应用场景中,根据将模型节点映射到onnx的映射结果和多个关键函数(第一函数和第二函数),创建onnx计算图的过程如下所述:
[0096]
如图3所示,模型拓扑结构a-》[b,c]-》[d]-》[e]-》[output];
[0097]
layer=linear、in_nodes=[input]、out_nodes=[layer1_node]、in_tensors=[a]、out_tensors=[b]、node_name=linear 1;
[0098]
layer=linear、in_nodes=[input]、out_nodes=[layer2_node]、in_tensors=[a]、out_tensors=[c]、node_name=linear 2;
[0099]
layer=linear、in_nodes=[layer1_node,layer2_node]、out_nodes=[layer3_node]、in_tensors=[b,c]、out_tensors=[d]、node_name=linear 3;
[0100]
layer=linear、in_nodes=[layer3_node]、out_nodes=[layer4_node]、in_tensors=[d]、out_tensors=[output]、node_name=linear 4;
[0101]
由此,模型拓扑结构可以描述为:input-》[linear 1,linear 2]-》[linear 3]-》[linear4]-》[output]。
[0102]
由此获知:输入给到线性层1和线性层2;线性层1和线性层2的结果给到线性层3;线性层3的结果给线性层4;最后输出。上述线性层都能用onnx提供的统一格式来表示。
[0103]
在一种可能的实现方式中,验证onnx模型是否为有效模型,包括以下步骤:
[0104]
在从tensorlayerx所使用的每一层均能映射到onnx统一格式的情况下,验证onnx模型为有效模型。
[0105]
在一种可能的实现方式中,验证onnx模型是否为有效模型,还包括以下步骤:
[0106]
在tensorlayerx中至少包括一个不能映射到onnx统一格式的层的情况下,验证onnx模型为无效模型。
[0107]
在实际应用场景中,检验是通过check_model来检验,为onnx所提供的一个函数。当从tensorlayerx所使用的layer都能映射到onnx统一格式时,则检验通过。
[0108]
检验不通过的情况,例如,tensorlayerx中有一个layer叫attention。由于attention在onnx无法像linear一样通过乘法加法组合表示映射到onnx。那么,有attention的layer所构建的网络就不能通过检验。
[0109]
本技术实施例提供的兼容多框架的深度学习模型导出至onnx的方法,由于目标模型为深度学习统一编程框架模型、且目标模型能够兼容多个采用不同转换规则的框架,从而兼容多框架的深度学习模型导出至onnx的方法,能够支持多种深度学习框架后端(例如,
paddle、mindspore、tensorflow、pytorch),通过切换后端就能改变计算引擎,因此,用户在模型部署迁移上就不需要实现对应框架代码来进行部署,只需切换后端即可。采用本技术实施例的兼容多框架的深度学习模型导出至onnx的方法,能够做到:针对采用不同转换规则的不同深度学习框架,模型部署及迁移的过程与所使用的计算后端无关,从而避免了由于算子接口差异所导致的需要设计多个映射方法的问题。此外,上述方法更具通用性。再者,上述方法提供了作为高层次深度学习库模型导出至onnx的一种实现方式。
[0110]
在上述的实施例中,提供了一种兼容多框架的深度学习模型导出至onnx的方法,与之相对应的,本技术还提供一种兼容多框架的深度学习模型导出至onnx的装置。本技术实施例提供的兼容多框架的深度学习模型导出至onnx的装置可以实施上述兼容多框架的深度学习模型导出至onnx的方法,该兼容多框架的深度学习模型导出至onnx的装置可以通过软件、硬件或软硬结合的方式来实现。例如,该兼容多框架的深度学习模型导出至onnx的装置可以包括集成的或分开的功能模块或单元来执行上述各方法中的对应步骤。
[0111]
请参考图6,其示出了本技术的一些实施方式所提供的一种兼容多框架的深度学习模型导出至onnx的装置的示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
[0112]
如图6所示,兼容多框架的深度学习模型导出至onnx的装置600可以包括:
[0113]
获取模块601,用于获取目标模型的每个层的层信息,以及广度优先搜索规则,目标模型为深度学习统一编程框架模型,目标模型能够兼容多个采用不同转换规则的框架;
[0114]
遍历模块602,用于根据目标模型的每个层的层信息,以及广度优先遍历规则,对目标深度学习模型的每个层依序进行层遍历,得到对应的模型拓扑结构;
[0115]
映射模块603,用于根据模型拓扑结构,对目标模型的每个层依序进行映射,以将模型节点映射至开放神经网络交换onnx;
[0116]
生成模块604,用于根据将模型节点映射到onnx的映射结果和多个关键函数,通过创建onnx计算图和创建onnx模型,生成包括onnx模型的模型文件。
[0117]
在本技术实施例的一些实施方式中,获取模块601具体用于:
[0118]
获取模块节点的各项属性信息,模块节点的各项属性信息包括神经网络层、当前层神经网络层输入节点、当前层神经网络层输出节点、当前层神经网络层输入值、当前层神经网络层输出值、以及当前网络层节点名称;
[0119]
通过调用模块节点执行一次前向传播,获取目标模型的每个层的层信息,目标模型的每个层的层信息包括目标神经网络层、任意一层作为当前层所对应当前层神经网络层输入节点、任意一层作为当前层所对应的当前层神经网络层输出节点、任意一层作为当前层所对应的当前层神经网络层输入值、任意一层作为当前层所对应的当前层神经网络层输出值和任意一层作为当前层所对应的当前网络层节点名称。
[0120]
在本技术实施例的一些实施方式中,映射模块603具体用于:
[0121]
获取模型拓扑结构;
[0122]
根据模型拓扑结构确定对应的拓扑排序方式;
[0123]
根据拓扑排序方式,依序对每个层进行映射处理,得到对应的onnx算子组合,以将模型节点映射至onnx。
[0124]
在本技术实施例的一些实施方式中,多个关键函数至少包括用于创建onnx计算图的第一函数和用于创建onnx模型的第二函数,生成模块604用于:
[0125]
获取将模型节点映射到onnx的映射结果;
[0126]
根据映射结果、第一函数和第二函数,创建对应的onnx计算图和对应的onnx模型;
[0127]
验证onnx模型是否为有效模型,并在验证onnx模型有效的情况下,生成包括onnx模型的模型文件。
[0128]
在本技术实施例的一些实施方式中,生成模块604具体用于:
[0129]
在从tensorlayerx所使用的每一层均能映射到onnx统一格式的情况下,验证onnx模型为有效模型。
[0130]
在本技术实施例的一些实施方式中,生成模块604具体还用于:
[0131]
在tensorlayerx中至少包括一个不能映射到onnx统一格式的层的情况下,验证onnx模型为无效模型。
[0132]
在本技术实施例的一些实施方式中,目标模型能够兼容的多个采用不同转换规则的框架包括以下至少一项:tneosflow、mindspore、paddlepaddle和pytorch。
[0133]
在本技术实施例的一些实施方式中本技术实施例提供的兼容多框架的深度学习模型导出至onnx的装置600,与本技术前述实施例提供的兼容多框架的深度学习模型导出至onnx的方法出于相同的发明构思,具有相同的有益效果。
[0134]
本技术实施方式还提供一种与前述实施方式所提供的兼容多框架的深度学习模型导出至onnx的装置对应的电子设备,电子设备可以是用于服务端的电子设备,例如服务器,包括独立的服务器和分布式服务器集群等,以执行上述兼容多框架的深度学习模型导出至onnx的方法;电子设备也可以是用于客户端的电子设备,例如手机、笔记本电脑、平板电脑、台式机电脑等,以执行上述兼容多框架的深度学习模型导出至onnx的方法。
[0135]
请参考图7,其示出了本技术的一些实施方式所提供的一种电子设备的示意图。如图7所示,电子设备70包括:处理器700,存储器701,总线702和通信接口703,处理器700、通信接口703和存储器701通过总线702连接;存储器701中存储有可在处理器700上运行的计算机程序,处理器700运行计算机程序时执行本技术前述的兼容多框架的深度学习模型导出至onnx的方法。
[0136]
其中,存储器701可能包含高速随机存取存储器(ram:random access memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口703(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网、广域网、本地网、城域网等。
[0137]
总线702可以是isa总线、pci总线或eisa总线等。总线可以分为地址总线、数据总线、控制总线等。其中,存储器701用于存储程序,处理器700在接收到执行指令后,执行所述程序,前述本技术实施例任一实施方式揭示的兼容多框架的深度学习模型导出至onnx的方法可以应用于处理器700中,或者由处理器700实现。
[0138]
处理器700可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器700中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器700可以是通用处理器,包括中央处理器(central processing unit,简称cpu)、网络处理器(network processor,简称np)等;还可以是数字信号处理器(dsp)、专用
集成电路(asic)、现成可编程门阵列(fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本技术实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本技术实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器701,处理器700读取存储器701中的信息,结合其硬件完成上述方法的步骤。
[0139]
本技术实施例提供的电子设备与本技术实施例提供的兼容多框架的深度学习模型导出至onnx的方法出于相同的发明构思,具有与其采用、运行或实现的方法相同的有益效果。
[0140]
本技术实施方式还提供一种与前述实施方式所提供的兼容多框架的深度学习模型导出至onnx的方法对应的计算机可读介质,请参考图8,其示出的计算机可读存储介质为光盘80,其上存储有计算机程序(即程序产品),所述计算机程序在被处理器运行时,会执行前述兼容多框架的深度学习模型导出至onnx的方法。
[0141]
需要说明的是,所述计算机可读存储介质的例子还可以包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他光学、磁性存储介质,在此不再一一赘述。
[0142]
本技术的上述实施例提供的计算机可读存储介质与本技术实施例提供的兼容多框架的深度学习模型导出至onnx的方法出于相同的发明构思,具有与其存储的应用程序所采用、运行或实现的方法相同的有益效果。
[0143]
需要说明的是,附图中的流程图和框图显示了根据本技术的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0144]
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0145]
在本技术所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0146]
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0147]
另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
[0148]
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0149]
最后应说明的是:以上各实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述各实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的范围,其均应涵盖在本技术的权利要求和说明书的范围当中。
技术特征:
1.一种兼容多框架的深度学习模型导出至onnx的方法,其特征在于,所述方法包括:获取目标模型的每个层的层信息,以及广度优先搜索规则,所述目标模型为深度学习统一编程框架模型,所述目标模型能够兼容多个采用不同转换规则的框架;根据所述目标模型的每个层的层信息,以及广度优先遍历规则,对所述目标深度学习模型的每个层依序进行层遍历,得到对应的模型拓扑结构;根据所述模型拓扑结构,对所述目标模型的每个层依序进行映射,以将模型节点映射至开放神经网络交换onnx;根据将模型节点映射到onnx的映射结果和多个关键函数,通过创建onnx计算图和创建onnx模型,生成包括所述onnx模型的模型文件。2.根据权利要求1所述的方法,其特征在于,所述获取目标模型的每个层的层信息,包括:获取模块节点的各项属性信息,模块节点的各项属性信息包括神经网络层、当前层神经网络层输入节点、当前层神经网络层输出节点、当前层神经网络层输入值、当前层神经网络层输出值、以及当前网络层节点名称;通过调用所述模块节点执行一次前向传播,获取目标模型的每个层的层信息,所述目标模型的每个层的层信息包括目标神经网络层、任意一层作为当前层所对应当前层神经网络层输入节点、任意一层作为当前层所对应的当前层神经网络层输出节点、任意一层作为当前层所对应的当前层神经网络层输入值、任意一层作为当前层所对应的当前层神经网络层输出值和任意一层作为当前层所对应的当前网络层节点名称。3.根据权利要求1所述的方法,其特征在于,所述根据所述模型拓扑结构,对所述目标模型的每个层依序进行映射,以将模型节点映射至开放神经网络交换onnx,包括:获取所述模型拓扑结构;根据所述模型拓扑结构确定对应的拓扑排序方式;根据拓扑排序方式,依序对每个层进行映射处理,得到对应的onnx算子组合,以将模型节点映射至onnx。4.根据权利要求1所述的方法,其特征在于,所述多个关键函数至少包括用于创建onnx计算图的第一函数和用于创建onnx模型的第二函数,所述根据将模型节点映射到onnx的映射结果和多个关键函数,通过创建onnx计算图和创建onnx模型,生成包括所述onnx模型的模型文件,包括:获取将模型节点映射到onnx的所述映射结果;根据所述映射结果、所述第一函数和所述第二函数,创建对应的onnx计算图和对应的onnx模型;验证所述onnx模型是否为有效模型,并在验证所述onnx模型有效的情况下,生成包括所述onnx模型的模型文件。5.根据权利要求4所述的方法,其特征在于,所述验证所述onnx模型是否为有效模型,包括:在从tensorlayerx所使用的每一层均能映射到onnx统一格式的情况下,验证所述onnx模型为有效模型。6.根据权利要求5所述的方法,其特征在于,所述验证所述onnx模型是否为有效模型,
还包括:在所述tensorlayerx中至少包括一个不能映射到onnx统一格式的层的情况下,验证所述onnx模型为无效模型。7.根据权利要求1所述的方法,其特征在于,所述目标模型能够兼容的多个采用不同转换规则的框架包括以下至少一项:tneosflow、mindspore、paddlepaddle和pytorch。8.一种兼容多框架的深度学习模型导出至onnx的装置,其特征在于,所述装置包括:获取模块,用于获取目标模型的每个层的层信息,以及广度优先搜索规则,所述目标模型为深度学习统一编程框架模型,所述目标模型能够兼容多个采用不同转换规则的框架;遍历模块,用于根据所述目标模型的每个层的层信息,以及广度优先遍历规则,对所述目标深度学习模型的每个层依序进行层遍历,得到对应的模型拓扑结构;映射模块,用于根据所述模型拓扑结构,对所述目标模型的每个层依序进行映射,以将模型节点映射至开放神经网络交换onnx;生成模块,用于根据将模型节点映射到onnx的映射结果和多个关键函数,通过创建onnx计算图和创建onnx模型,生成包括所述onnx模型的模型文件。9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序用于执行上述权利要求1至7中任一项所述的方法。10.一种电子设备,其特征在于,所述电子设备包括:处理器;用于存储所述处理器可执行指令的存储器;所述处理器,用于从所述存储器中读取所述可执行指令,并执行所述可执行指令以实现上述权利要求1至7中任一项所述的方法。
技术总结
本申请实施例公开了一种兼容多框架的深度学习模型导出至ONNX的方法和装置,其方法包括:获取目标模型的每个层的层信息,以及广度优先搜索规则,目标模型为深度学习统一编程框架模型,目标模型能够兼容多个采用不同转换规则的框架;根据目标模型的每个层的层信息,以及广度优先遍历规则,对目标深度学习模型的每个层依序进行层遍历,得到对应的模型拓扑结构;根据模型拓扑结构,对目标模型的每个层依序进行映射,以将模型节点映射至开放神经网络交换ONNX;以及根据将模型节点映射到ONNX的映射结果和多个关键函数,通过创建ONNX计算图和创建ONNX模型,生成包括ONNX模型的模型文件。生成包括ONNX模型的模型文件。生成包括ONNX模型的模型文件。
技术研发人员:董豪
受保护的技术使用者:北京大学
技术研发日:2023.04.27
技术公布日:2023/8/9
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
