目录

模型转换示例

使用CANN Kit工具时,可以预先使用CANN包中的ATC工具将Caffe、TensorFlow、ONNX、MindSpore模型转换为OM离线模型,移动端AI程序直接读取离线模型进行推理。ATC工具包含在CANN工具包中(安装方式请参见CANN工具包安装流程),可运行在64位Linux平台上。

Caffe模型转换

当前支持Caffe 1.0版本。

命令行中的参数说明请参见ATC参数,转换命令:

atc --model=xxx.prototxt --weight=yyy.caffemodel --framework=0 --output=./modelname

转换示例:

atc --model=deploy.prototxt --weight=squeezenet_v1.1.caffemodel --framework=0 --output=./squeezenet

当看到“generate offline model success”时,则说明转换成功,会在当前目录下生成squeezenet.om。

TensorFlow模型转换

当前支持TensorFlow 2.x版本。

命令行中的参数说明请参见ATC参数,转换命令:

atc --model=xxx.pb --framework=3 --output=./modelname --input_shape="xxx:n,h,w,c" --out_nodes="node_name1:0"

转换示例:

atc --model=mobilenet_v2_1.0_224_frozen.pb --framework=3 --output=./mobilenet_v2 --input_shape="input:1,224,224,3" --out_nodes="MobilenetV2/Predictions/Reshape_1:0"

当看到“generate offline model success”时,则说明转换成功,会在当前目录下生成mobilenet_v2.om。

ONNX模型转换

当前支持ONNX opset版本7~18(最高支持到V1.13.1)。

命令行中的参数说明请参见ATC参数,转换命令:

atc --model=xxx.onnx --framework=5 --output=./modelname

转换示例:

atc --model=resnet18.onnx --framework=5 --output=./resnet18

当看到“generate offline model success”时,则说明转换成功,会在当前目录下生成resnet18.om。

量化模型转换(以Caffe模型为例)

目前大部分模型在NPU上都是使用16bit float类型进行计算的,使用量化既可以减少模型的体积,也可以加快模型推理速度。

量化模型转换依赖轻量化工具,利用轻量化工具生成模型及轻量化配置,通过"compress_conf"参数传递给ATC并生成量化模型,更多说明请参见模型轻量化。

命令行中的参数说明请参见ATC参数,转换命令:

atc --model=xxx.prototxt --weight=xxx.caffemodel --framework=0 --output=./modelname --compress_conf=param

转换示例:

atc --model=deploy.prototxt --weight=squeezenet_v1.1.caffemodel --framework=0 --output=./squeezenet --compress_conf=param

当看到“generate offline model success”时,说明模型量化成功,会在当前目录下生成量化模型squeezenet.om。

推理前可变Shape模型转换(以ONNX模型为例)

如果一个模型需要支持一次加载,然后不同次的推理会遇到不同的batch,或者不同的分辨率,那么可以使用推理前可变Shape的模型转换。

在模型转换时,将推理过程可能遇到的所有Shape种类预先通过dynamic_dims和input_shape指定出来,生成一个标准IR模型,其携带多种shape输入。

命令行中的参数说明请参见ATC参数。

转换示例:

atc --model=./1batch.onnx --input_shape="inputName:-1,3,128,128" --dynamic_dims="1;2;5" --framework=5 --output=./FlexibleShapeModelName

不同shape输入对应的不同输出shape,可在模型转换日志中,通过 "Graph:" 关键字查找对应的shape信息,方便在模型推理时指定对应的输出描述。

MindSpore模型转换

MindSpore支持的算子数量有限,建议通过TensorFlow模型转换或者ONNX模型转换。

AIPP模型转换(以Caffe模型为例)

如果模型推理需要对图像或其他输入数据进行变换(如图像尺寸变换、色域转换、减均值/乘系数等),可使用AIPP模型转换功能。转换后的模型增加算子替换此类操作,可提升效率。

命令行中的参数说明请参见ATC参数,转换命令:

atc --model=xxx.prototxt --weight=xxx.caffemodel --framework=0 --insert_op_conf=aipp_conf_static.cfg --output=./modelname

转换示例:

atc --model=deploy.prototxt --weight=squeezenet_v1.1.caffemodel --framework=0 --insert_op_conf=aipp_conf_static.cfg --output=./squeezenet

当出现“generate offline model success”时,说明AIPP模型转换成功,会在当前目录下生成AIPP squeezenet.om模型。

aipp_conf_static.cfg是AIPP的配置文件,位置存放在CANN工具包安装目录下的atc/data/sample文件夹中,具体说明参见AIPP配置文件说明。

OMC模型转换(以ONNX模型为例)

OMC模型:硬件强相关Davinci模型,仅可在--soc_version指定的平台部署。

适用场景:适用于编译耗时长,占用资源大的模型,可离线完成编译,免除在线编译耗时。

若想编译omc模型,需要先参考环境准备完成环境配置,再进行转换命令。

命令行中的参数说明请参见ATC参数,转换命令:

atc --model=xxx.onnx --soc_version=KirinXXXX --target=omc --framework=5 --output=./modelname

其中,soc_version选择对应的芯片平台,包括Kirin9030、Kirin9020、Kirin9050、KirinX90。

转换示例:

atc --model=resnet18.onnx --soc_version=Kirin9030 --target=omc --framework=5 --output=./resnet18

当看到“generate offline model success”时,则说明转换成功,会在当前目录下生成resnet18.omc,可在对应Kirin9030平台执行。