约束及参数说明
约束说明
在进行模型转换前,请务必查看如下约束要求:
- 只支持原始框架类型为caffe和tensorflow的模型转换,当原始框架类型为caffe时,输入数据类型为FLOAT;当原始框架类型为tensorflow时,输入数据类型为INT32、BOOL、UINT8、FLOAT。
- 当原始框架类型为caffe时,模型文件(.prototxt)和权重文件(.caffemodel)的op name、op type必须保持名称一致(包括大小写)。
- 当原始框架类型为Caffe时,除了top与bottom相同的layer以外(例如BatchNorm,Scale,ReLU等),其他layer的top名称需要与其name名称保持一致。
- 当原始框架类型为tensorflow时,只支持FrozenGraphDef格式。
- 不支持动态shape的输入,例如:NHWC输入为[?,?,?,3]多个维度可任意指定数值。模型转换时需指定固定数值。
- 输入数据最大支持四维,转维算子(reshape、expanddim等)不能输出五维。
- 模型中的所有层算子除const算子外,输入和输出需要满足dim!=0。
- 模型转换不支持含有训练算子的模型。
- 量化(uint8)后的模型不支持模型转换。
- 模型中的算子只支持2D卷积,暂不支持3D卷积。
- 只支持《Ascend 310 算子规格说明》中的算子,并需满足算子限制条件。
参数说明
参数名称 |
参数描述 |
是否必选(以mode为0和3为准) |
默认值 |
---|---|---|---|
--mode |
运行模式
|
否 |
0 |
--model |
原始模型文件路径。 说明:
路径部分:支持大小写字母、数字,下划线;文件名部分:支持大小写字母、数字,下划线和点(.) |
是 |
不涉及 |
--weight |
权重文件路径。 当原始模型是caffe时需要指定。 说明:
路径部分:支持大小写字母、数字,下划线;文件名部分:支持大小写字母、数字,下划线和点(.) |
否 |
不涉及 |
--framework |
原始框架类型
|
是 |
不涉及 |
--output |
存放转换后的离线模型的路径(包含文件名),例如“out/caffe_resnet18”。 转换后的离线模型,会自动以“.om”的后缀结尾。 说明:
路径部分:支持大小写字母、数字,下划线;文件名部分:支持大小写字母、数字,下划线和点(.) |
是 |
不涉及 |
--encrypt_mode(预留,目前不支持) |
加密模式
|
否 |
-1 |
--encrypt_key(预留,目前不支持) |
用于加密的随机数文件所在的路径。 加密模式下必填。 说明:
|
否 |
不涉及 |
--hardware_key(预留,目前不支持) |
加密使用的ISV硬件密钥文件(这个文件是经过加密的)路径。 加密模式下必填。 说明:
路径部分:支持大小写字母、数字,下划线;文件名部分:支持大小写字母、数字,下划线和点(.) |
否 |
不涉及 |
--certificate(预留,目前不支持) |
加密使用的ISV证书文件路径。 加密模式下必填。 说明:
路径部分:支持大小写字母、数字,下划线;文件名部分:支持大小写字母、数字,下划线和点(.) |
否 |
不涉及 |
--private_key(预留,目前不支持) |
加密使用的ISV私钥文件路径。 加密模式下必填。 说明:
路径部分:支持大小写字母、数字,下划线;文件名部分:支持大小写字母、数字,下划线和点(.) |
否 |
不涉及 |
--cal_conf |
量化配置文件路径。 说明:
|
否 |
不涉及 |
--check_report |
预检结果保存文件路径。若不指定该路径,在模型转换失败或mode为3(仅做预检)时,将预检结果保存在当前路径下。 说明:
路径部分:支持大小写字母、数字,下划线;文件名部分:支持大小写字母、数字,下划线和点(.) |
否 |
check_result.json |
--h或--help |
显示帮助信息。 |
否 |
不涉及 |
--input_format |
输入数据格式:NCHW和NHWC
|
否 |
不涉及 |
--input_fp16_nodes |
该参数与--is_output_fp16配合使用。 多网络串联时,指定下一个网络输入数据类型为fp16的输入节点名称。 例如:“node_name1; node_name2”。 举例说明:两个网络net1和net2串联,net1的输出作为net2的输入,则通过该参数指定net2网络接收net1输出数据类型为fp16的节点名称。 |
否 |
不涉及 |
--input_shape |
模型输入数据的shape。 例如:“input_name1: n1, c1, h1, w1; input_name2: n2, c2, h2, w2”。 input_name必须是转换前的网络模型中的节点名称。 若原始模型为动态shape,例如input_name1:?,h,w,c,该参数必填。 其中“?”为batch数,表示一次处理的图片数量,需要用户根据实际情况填写,用于将动态shape的原始模型转换为固定shape的离线模型。 |
否 |
不涉及 |
--is_output_fp16 |
多网络串联时,指定前一个网络输出的数据类型是否为fp16。 例如:false,true,false,true。 举例说明:两个网络net1和net2串联,net1的输出作为net2的输入,则通过该参数指定net1的输出数据类型为fp16。 |
否 |
false |
--json |
离线模型或模型文件转换为json格式文件的路径。 说明:
路径部分:支持大小写字母、数字,下划线;文件名部分:支持大小写字母、数字,下划线和点(.) |
否 |
不涉及 |
--om |
当mode为1时必填。 需要转换为json格式的离线模型或模型文件的路径。例如/home/username/test/out/caffe_resnet18.om或/home/username/test/resnet18.prototxt 说明:
路径部分:支持大小写字母、数字,下划线;文件名部分:支持大小写字母、数字,下划线和点(.) |
否 |
不涉及 |
--op_name_map |
算子映射配置文件路径,网络中包含DetectionOutput算子时需要指定。 例如:不同的网络中DetectionOutput算子的功能不同,可能指定DetectionOutput(Davinci模型中的算子)到如下算子的映射:
说明:
|
否 |
不涉及 |
--out_nodes |
指定输出节点。 如果不指定输出节点(算子名称),则模型的输出默认为最后一层的算子信息,某些情况下,用户想要查看某层算子参数是否合适,则需要将该层算子的参数输出,既可以在模型转换时通过该参数指定输出某层算子,模型转换后,在相应.om模型文件最后一层即可以看到指定输出算子的参数信息,如果通过.om模型文件无法查看,则可以将.om模型文件转换成json格式后查看。 例如:“node_name1:0;node_name1:1;node_name2:0”。 node_name必须是模型转换前的网络模型中的节点名称,冒号后的数字表示第几个输出,例如node_name1:0,表示节点名称为node_name1的第0个输出。 |
否 |
不涉及 |
--plugin_path |
自定义算子插件路径。 例如:"/home/a1/b1;/home/a2/b2;/home/a3/b3" 说明:
自定义算子插件路径中可以包含多个路径,两个路径之间以分号分割,每个路径内不能包含分号,否则将导致解析得到的路径与预期不符。 |
否 |
./plugin |
--target |
当前仅支持设置为“mini”。 mini:量化中eltwise算子支持双输出;量化中roipooling算子支持int8输出;量化中conv算子支持混合精度。 |
否 |
mini |
--ddk_version |
指定自定义算子运行需要匹配的ddk环境的版本号。 |
否 |
不涉及 |
--net_format |
指定网络算子优先选用的数据格式,ND(N<=4)和5D。仅在网络中算子的输入数据同时支持ND和5D两种格式时,指定该参数才生效。
|
否 |
不涉及 |
--insert_op_conf |
输入预处理算子的配置文件路径,例如aipp算子。 说明:
|
否 |
不涉及 |
--fp16_high_prec |
指定是否生成高精度FP16 Davinci模型。
高精度当前仅支持如下算子Caffe:Convolution,Pooling,FullConnection;TensorFlow:tf.nn.conv2d,tf.nn.max_poo算子。 |
否 |
0 |
--output_type |
网络输出数据类型:
|
否 |
FP32 |
--enable_l2dynamic |
L2动态优化开关,该参数可能会影响网络模型的推理性能,如果性能不满足要求,可以尝试关闭该开关,验证性能影响。
|
否 |
true |