一种基于TensorFlow框架至ONNX模型的转换工具

文档序号:32127116发布日期:2022-11-09 08:32阅读:204来源:国知局
一种基于TensorFlow框架至ONNX模型的转换工具
一种基于tensorflow框架至onnx模型的转换工具
技术领域
1.本发明属于人工智能技术领域,涉及一种基于tensorflow框架至onnx模型的转换工具。


背景技术:

2.近年来人工智能技术领域取得了飞速的发展,深度学习技术已经在多个行业领域内发挥出巨大的作用。伴随着深度学习技术的发展,涌现出了一大批深度学习框架,这些深度学习框架具有各自框架下独有的特点。然而这些框架之间没有形成统一的标准格式,不同框架之间彼此并不兼容,当需要将某一个框架下的神经网络模型移植到其它目标框架,开发人员需要在目标框架下重新编程实现,因此对开发人员提出了更高的要求,需要开发人员同时熟悉多个框架下的编程模式,使得框架之间模型移植具有较高的移植门槛。
3.tensorflow是谷歌公司开发的深度学习框架,可以用于深度学习开发以及数据挖掘算法的实现。它是一款端到端的深度学习平台,具有包括工具、库以及社区资源等部分。tensorflow框架目前作为最流行的深度学习框架之一,深度学习领域内的新算法经常会在tensorflow框架下复现,复现的tensorflow模型又经常需要部署在其它深度学习框架下,由于部署模型需要重新构建并且训练模型,因此部署的过程中会耗费大量的时间。
4.为了解决当前存在的问题,多家深度学习公司联合推出了开放神经网络交换格式onnx。onnx为深度学习的神经网络表示格式制定了统一的标准,用于存储训练好的神经网络模型,可以帮助ai开发人员更轻松地在不同深度学习框架下转换模型。onnx由可扩展计算图模型的定义、标准数据类型的定义、内置运算符的定义三部分组成。
5.tensorflow与onnx格式的定义中,既有等价的部分,同时也有互相冗余的部分。tensorflow模型作为输入,将tensorflow中onnx格式内容不需要的部分可以直接删除,onnx格式中特定存在的部分需要根据模型上下文关系进行自动填充。
6.有的深度学习框架转换技术经常采用直接转换方式构建框架之间转换的专用工具。tensorflow2caffe是一款用于将tensorflow框架下的模型转换为caffe框架下模型的专用工具,该工具不涉及onnx的使用,因此不具备通用性的特点,无法满足tensorflow框架下的模型向第三方框架下模型的转换。
7.因此,如何实现从tensorflow至onnx的模型转换工具,成为了亟待解决的问题。


技术实现要素:

8.为了解决现有技术中存在的上述问题,本发明提供了一种基于tensorflow框架至onnx模型的转换工具。本发明要解决的技术问题通过以下技术方案实现:
9.本发明实施例提供了一种基于tensorflow框架至onnx模型的转换工具,包括:
10.文件解析模块,用于获取已输入的.pb格式的tensorflow模型的模型对象;所述模型对象包括:tensorflow模型的信息、tensorflow计算图和tensorflow节点信息;
11.模型预处理模块,用于对所述模型对象进行预处理操作,以将所述tensorflow模
型内部的变量节点更新为常量节点,以及删除所述tensorflow模型内部的反向传播节点;
12.节点转换模块,用于将所述tensorflow节点转换为onnx节点;
13.计算图转换模块,用于将所述tensorflow计算图转换为onnx计算图;
14.模型转换模块,用于根据所述tensorflow模型的信息将所述tensorflow模型转换为onnx模型;
15.模型序列化保存模块,用于对转换得到的onnx模型执行反序列化操作,得到onnx文件。
16.在本发明一个实施例中,
17.所述文件解析模块,还用于判断所述tensorflow模型的文件保存类型;
18.所述文件解析模块,还用于获取所述tensorflow模型的二进制字节流信息;
19.所述文件解析模块,还用于根据所述文件保存类型,对获取的所述二进制字节流信息执行反序列化操作,得到所述tensorflow模型的模型对象。
20.在本发明一个实施例中,
21.所述模型预处理模块,还用于遍历所述tensorflow计算图的操作节点对象列表,读取当前节点对象的节点名称、节点类型、输入节点对象、输出节点对象和节点属性对象;
22.所述模型预处理模块,还用于从所述节点对象列表中删除反向传播节点。
23.所述模型预处理模块,还用于获取所述节点对象列表中的变量类型节点,,以将所述tensorflow模型内部的变量节点更新为常量节点,以及删除所述tensorflow模型内部的反向传播节点。
24.在本发明一个实施例中,
25.所述节点转换模块,还用于遍历tensorflow节点对应的节点列表,获取每个所述tensorflow节点的节点名称、所述tensorflow的节点类型、所述tensorflow节点的输入节点列表和所述tensorflow节点的输出节点列表;
26.所述节点转换模块,还用于从所述tensorflow节点对应的节点列表中获取每个所述tensorflow节点的属性字典特征属性,并转换为符合onnx标准的格式;
27.所述节点转换模块,还用于根据所述tensorflow节点的节点名称、所述tensorflow节点的节点类型、所述tensorflow节点的输入节点列表、所述tensorflow节点的输出节点列表和转换后符合onnx标准的格式的所述tensorflow节点的属性字典特征属性生成转换后的onnx节点。
28.在本发明一个实施例中,
29.所述计算图转换模块,还用于将所述onnx节点对应的列表划分为onnx计算图的输入节点列表、onnx计算图的输出节点列表、onnx计算图的常量节点列表和其它节点组成的节点列表;
30.所述计算图转换模块,还用于遍历所述onnx计算图的输入节点列表,获取所有输入节点的名称信息、数据类型信息、形状信息,转换得到onnx计算图的输入节点,并将所有输入节点保存,得到onnx计算图的输入节点列表;
31.所述计算图转换模块,还用于遍历所述onnx计算图的输出节点列表,获取所有输出节点的名称信息、数据类型信息以及形状信息,转换得到onnx计算图的输出节点,并将所有输出节点保存,得到onnx计算图的输出节点列表;
32.所述计算图转换模块,还用于遍历所述onnx计算图的常量节点列表,获取所有常量节点的键值对字典,转换为onnx张量并保存得到onnx计算图的常量节点列表;
33.所述计算图转换模块,还用于遍历所述onnx计算图的剩余节点组成的节点列表,将所述onnx计算图的剩余节点组成的节点列表中的所有节点映射到onnx操作集中已有的操作。
34.在本发明一个实施例中,
35.所述模型转换模块,还用于获取模型配置信息,所述模型配置信息包括模型的操作集版本信息、转换前的框架名称信息和转换前的框架版本号;
36.所述模型转换模块,还用于根据所述onnx计算图和所述模型配置信息,获取转换后的onnx模型。
37.与现有技术相比,本发明的有益效果:
38.本发明提供的一种基于tensorflow至onnx的模型转换工具,利用模型文件解析模块完成tensorflow模型信息的解析,通过转换模块完成tensorflow节点、计算图、模型向onnx的转换,最终可以完成tensorflow模型文件向onnx模型文件的转换,得到目标onnx模型文件。可以帮助深度学习开发人员更便捷高效的将tensorflow框架下的模型转换为onnx模型,对于各深度学习框架之间的互相转换具有重要意义。
39.通过以下参考附图的详细说明,本发明的其它方面和特征变得明显。但是应当知道,该附图仅仅为解释的目的设计,而不是作为本发明的范围的限定,这是因为其应当参考附加的权利要求。还应当知道,除非另外指出,不必要依比例绘制附图,它们仅仅力图概念地说明此处描述的结构和流程。
附图说明
40.图1为本发明实施例提供的一种基于tensorflow框架至onnx模型的转换工具的结构示意图。
具体实施方式
41.下面结合具体实施例对本发明做进一步详细的描述,但本发明的实施方式不限于此。
42.请参见图1,图1为本发明实施例提供的一种基于tensorflow框架至onnx模型的转换工具的结构示意图。本发明提供一种基于tensorflow框架至onnx模型的转换工具,该转换工具包括:
43.文件解析模块,用于获取已输入的.pb格式的tensorflow模型的模型对象;模型对象包括:tensorflow模型的信息、tensorflow计算图和tensorflow节点信息。
44.本公开中的tensorflow至onnx模型转换工具,已经提前导入tensorflow框架下的模型文件作为转换工具的输入。
45.在文件解析模块中设有tensorflow模型文件解析器,逆向解析已输入的.pb格式tensorflow模型的结构描述文件以获取tensorflow模型的模型对象。
46.其中,文件解析模块,具体用于:
47.判断tensorflow模型的文件保存类型;
48.获取tensorflow模型的二进制字节流信息;
49.根据文件保存类型,对获取的二进制字节流信息执行反序列化操作,得到tensorflow模型的模型对象。
50.模型预处理模块,用于对模型对象进行预处理操作,以将tensorflow模型内部的变量节点更新为常量节点,以及删除tensorflow模型内部的反向传播节点;
51.预处理操作是为了将tensorflow模型对象内部的变量节点更新为常量节点,以及删除tensorflow模型内部的反向传播节点,因为最终转换得到的onnx模型主要用于推理,而不需要再训练,因此将变量节点更新为常量节点,同时删除反向传播节点。
52.该模型设预处理模块中可以设置模型预处理器,将步骤s1获取的模型对象规范化为固定的格式。
53.其中,模型预处理模块具体用于:
54.遍历tensorflow计算图的操作节点对象列表,读取当前节点对象的节点名称、节点类型、输入节点对象、输出节点对象和节点属性对象;
55.从节点对象列表中删除反向传播节点。
56.获取节点对象列表中的变量类型节点,将变量类型节点更新为常量节点,以完成变量节点的常量化。
57.具体的,获取变量节点对象,从变量节点对象内部提取变量值,然后将节点的节点类型由变量“variable”更新为常量“const”,同时将获取的变量值保存至“const”的属性“value“。
58.节点转换模块,用于将tensorflow节点转换为onnx节点;
59.节点转换模块中可以设置节点转换器,对遍历节点对象列表中的每一个节点对象执行转换操作。
60.节点转换模块,具体用于:
61.遍历tensorflow节点对应的节点列表,获取每个tensorflow节点的节点名称、tensorflow节点的节点类型、tensorflow节点的输入节点列表和tensorflow节点的输出节点列表;
62.从tensorflow节点对应的节点列表中获取每个tensorflow节点的属性字典(英文:attribute)特征属性,并转换为符合onnx标准的格式;
63.根据tensorflow节点的节点名称、tensorflow节点类型、tensorflow节点的输入节点列表、tensorflow节点的输出节点列表和转换后符合onnx标准的格式的tensorflow节点的attribute特征属性生成转换后的onnx节点。
64.具体的,onnx节点对象的类型为nodeproto。onnx官方提供了生成nodeproto对象的程序接口,通过向接口提供节点名称、节点类型、属性字典、输入节点名称列表、输出节点名称列表等信息,接口函数会返回目标onnx节点对象,为了生成onnx节点,还需要调用onnx提供的程序接口make_node()函数。
65.计算图转换模块,用于将tensorflow计算图转换为onnx计算图;
66.其中,计算图转换模块可以设有计算图转换器,完成tensorflow计算图向onnx计算图的转换。
67.其中,计算图转换模块,具体用于:
68.将onnx节点对应的列表划分为onnx计算图的输入节点列表、onnx计算图的输出节点列表、onnx计算图的常量节点列表和其它节点组成的节点列表;
69.遍历onnx计算图的输入节点列表,获取所有输入节点的名称信息、数据类型信息、形状信息,转换得到onnx计算图的输入节点,并将所有输入节点保存,得到onnx计算图的输入节点列表;
70.具体的,onnx计算图输入节点对象的类型为valueinfoproto,onnx官方提供了生成valueinfoproto对象的程序接口,通过向接口提供节点名称、节点类型、节点形状等信息,接口函数make_tensor_value_info()会返回目标valueinfoproto对象。
71.遍历onnx计算图的输出节点列表,获取所有输出节点的名称信息、数据类型信息以及形状信息,转换得到onnx计算图的输出节点,并将所有输出节点保存,得到onnx计算图的输出节点列表;
72.具体的,onnx计算图输出节点对象的类型为valueinfoproto,转换方式与输入节点的转换一致,此处不再赘述。
73.遍历onnx计算图的常量节点列表,获取所有常量节点的键值对字典,转换为onnx张量并保存得到onnx计算图的常量节点列表;
74.具体的,onnx张量对象的类型为attributeproto,onnx官方提供了生成attributeproto对象的程序接口,通过向接口提供节点属性字典内容,接口函数get_attribute_value()会返回目标onnx张量。
75.遍历onnx计算图的剩余节点组成的节点列表,将onnx计算图的剩余节点组成的节点列表中的所有节点映射到onnx操作集中已有的操作。
76.模型转换模块,用于根据tensorflow模型的信息将tensorflow模型转换为onnx模型;
77.其中,模型转换模块,具体用于:
78.获取模型配置信息,模型配置信息包括模型的操作集版本信息、转换前的框架名称信息和转换前的框架版本号;
79.根据onnx计算图和模型配置信息,获取转换后的onnx模型。
80.其中,用户首先定义包括模型的操作集版本信息、转换前的框架名称信息、转换前的框架版本号等信息构成的模型配置信息,然后通过用户当前定义好的模型配置信息及转换后的onnx计算图生成目标onnx模型,完成tensorflow模型到onnx模型的转换。
81.模型序列化保存模块,用于对转换得到的onnx模型执行反序列化操作,得到onnx文件。
82.其中,模型序列化保存模块可以设有模型保存模块,完成onnx模型序列化,最终得到后缀名为.onnx的目标onnx模型文件。
83.采用模型序列化保存模块保存转换后的onnx模型文件。模型保存模块用于完成转换后onnx模型的序列化实现,最终得到后缀名为.onnx的目标onnx模型文件。对于支持onnx模型文件推理的深度学习框架,可以直接在当前深度学习框架下推理该onnx模型文件。
84.本发明提供的一种基于tensorflow至onnx的模型转换工具,利用模型文件解析模块完成tensorflow模型信息的解析,通过转换模块完成tensorflow节点、计算图、模型向onnx的转换,最终可以完成tensorflow模型文件向onnx模型文件的转换,得到目标onnx模
型文件。可以帮助深度学习开发人员更便捷高效的将tensorflow框架下的模型转换为onnx模型,对于各深度学习框架之间的互相转换具有重要意义。
85.具体的,本发明通过加载tensorflow模型文件,利用反序列化操作读取模型文件保存的信息,从中获取tensorflow的模型、计算图和节点信息,然后通过转换工具内置的节点转换功能完成tensorflow节点向onnx节点的转换,通过计算图转换功能完成tensorflow计算图向onnx计算图的转换,通过模型转换功能完成tensorflow计算图向onnx模型的转换,最终对转换得到的onnx模型执行反序列化操作,得到目标onnx文件。无论哪个深度学习框架,只要该框架支持onnx模型文件的加载及推理,便可以完成tensorflow框架下模型在当前深度学习框架下的推理,从而可以帮助研究人员便捷高效的转换tensorflow框架下的模型到目标深度学习框架下。
86.在本发明的描述中,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
87.在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特数据点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特数据点可以在任何的一个或多个实施例或示例中以合适的方式结合。此外,本领域的技术人员可以将本说明书中描述的不同实施例或示例进行接合和组合。
88.以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1