Compass Unified Parser 模型解析器开源项目

我要开发同款
匿名用户2023年04月06日
52阅读
开发技术Python
所属分类人工智能
授权协议Apache

作品详情

CompassUnifiedParser是为将多种不同框架的模型转化成一种浮点中间表示(IR)而设计的,这种IR是由安谋中国设计的一种标准的IR,用于周易系列的神经网络编译器。

Parser的处理流程和设计理念

Parser的主要目标是将一个训练好的模型转换成浮点IR喂给OPT(优化器)。如下是Parser的主要处理流程:

一个模型通过统一的配置文件传给Parser。配置解析器解析配置文件,并且根据不同的配置将提交一个任务给相应的模型读取器。支持的模型读取器会接管输入模型,完成模型的读取:解析模型文件(例如protobuf/flattenbuf/json或一些私有格式)然后建立一个原始图表征。将原始图表征里面的节点转换为内部的统一节点,例如:合并若干的TensorFlow 节点到一个GRUSeq节点。将caffe的detectionoutput节点转换为detectbox和nms节点。模型读取器会生成一个内部统一图表征,然后交给前端优化器。前端优化器主要操作对象是统一图表征。它将会合并或者消除一些节点,例如:合并conv和add到一个节点。合并conv/fc节点和batchnorm节点到一个节点。消除一些无用的节点,例如:一个交换维度未变的transpose节点。优化之后,Parser至少会进行一次形状推导来获取所有张量的形状。进行一些额外的处理,例如:为一些模型添加一些后处理节点。序列化为IR文件。

Graph和Node的设计

在Parser里面,和其他框架类似,我们使用Graph和Node来表征一个模型,使用一个链表来表征一个图。Graph只保存所有节点,节点间的拓扑关系是保存在一个Node和另一个Node连接上。Node表征IR里的层概念(layer),Node可以通过调用serialize方法来序列化成一个字串。

关于Parser设计Parser只支持一个固定形状的图(静态图),在整个解析转换过程中,会进行若干次的形状推导。每一次图操作之后,例如合并、转换、消除节点之后,我们都希望进行一次形状推导,除非你清楚并且保证所有形状是无误的。进行形状推导是因为图操作可能会改变图拓扑,也可能会导致形状的变化。如果某些参数依赖于形状,那么请将这些参数的处理放到形状推导之后或在推导阶段。优化的处理只指出统一图表征,不支持原始图表征。因此,所有框架的模型都能受益于这些优化处理。快速入门安装向导

Parser是CompassAIPUBuilder(NN-Compiler)编译器的一部分。你可以参考如下CompassAIPUBuilder的指引来安装AIPUBuilder。完成AIPUBuilder的安装后,Parser也会被安装并且可以直接使用。

你也可以通过Compass_Integration中的指引来编译一个包含Parser的AIPUBuilder。关于AIPUBuilder的使用说明,请参考MiniPkg里面的说明书:Zhouyi_Compass_Software_Programming_Guide_61010011_0205_01_en.pdf。

初除此之外,Parser可以单独运行。只要满足如下的依赖,就可以直接运行main.py文件来运行Parser。

安装依赖python(3.8orhigher)numpyonnx(>12)protobufflatbufferstensorflow(==2.6)torch运行Parser

Parser是以配置文件为输入驱动的,你可以使用如下实例来运行Parser

python3main.py-cmy_config.ini 配置文件格式

所有的选项必须在Common段里面:

input_shape[required]

输入张量的形状。常间的模型只有一个输入张量,如:input_shape=[1,224,224,3]如果你有多个输入张量,使用英文逗号分隔,如:input_shape=[1,224,224,3],[1,112,112,3]

model_name[required]

输入模型的名称

model_type[optional]

输入模型的框架,默认是tensorflow,目前支持:

tensorflowtfliteonnxcaffe

model_domain[required]

模型的分类,例如:

image_classificationobject_detectionkeyword_spottingspeech_recognition

detection_postprocess[required当model_domain是object_detection]

如果你的模型是object_detection,并且你使用的是官方的模型,你可以选择如下两种后处理方式,我们将在结束出添加相应的后处理节点:

caffe_fasterrcnnssdssd_resnetyolo2yolo3_tinyyolo3_full

input_model[required]

输入模型的文件路径,当前支持tensorflowfrozenpb,tflite,caffeandonnx格式。

input[required]

输入节点(或张量)的名称,如果有多个输入,使用英文逗号,分隔。

output[required]

输出节点(或张量)名称,如果有多个输出,使用英文逗号,分隔。

配置文件示例[Common]input_shape=[1,224,224,3]model_name=resnet50model_domain=image_classificationdetection_postprocess=input_model=resnet50/frozen.pbinput=Placeholderoutput=resnet_v1_50/predictions/Reshape 

更多示例请参考examples。

运行示例

首先,你需要下载相应的原始模型。你可以通过examples下面的download_model.sh脚本来下载。

shexamples/tensorflow/download_model.sh 

然后配置example.cfg文件里的相应的输入输出

[Common]model_type=tensorflowmodel_name=gru_lmodel_domain=image_classificationinput_model=./GRU_L.pbinput=Mfcc:0input_shape=[1,49,10]output=labels_softmax:0output_dir=./ 

运行run_example.py

--framework[optional]

指定相应的示例,默认是tensorflow。

--input_data[optional]

指定相应的输入数据,如果没有指定将使用随机数据。

python3run_example.py--framework[specifyexample]--input_data[specifyfeeddata] 贡献指引

 

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论