应用开发深入讲解之模型转换工具
1.基本概念
昇腾张量编译器(Ascend Tensor Compiler,简称ATC)是异构计算架构CANN体系下的模型转换工具, 它可以将开源框架的网络模型或Ascend IR定义的单算子描述文件(json格式)转换为昇腾AI处理器支持的.om格式离线模型。
模型转换过程中,ATC会进行算子调度优化、权重数据重排、内存使用优化等具体操作,对原始的深度学习模型进行进一步的调优,从而满足部署场景下的高性能需求,使其能够高效执行在昇腾AI处理器上。
2.参数说明
- --model
填写原始网络模型文件路径与文件名。参数使用参考示例如下:
#Caffe模型
--model=$HOME/module/resnet50.prototxt --weight=$HOME/module/resnet50.caffemodel
#MindSpore模型
--model=resnet50.air
#pb模型
--model=resnet50.pb
#onnx模型
--model=resnet50.onnx
- --framework
填写原始网络模型框架,参数取值与使用参考示例如下:
#取值为0时,即为Caffe框架网络模型,模型包括后缀为prototxt的模型文件和后缀为caffemodel的权重文件
--framework=0
#取值为1时,即为MindSpore框架网络模型,仅支持后缀为*.air的模型文件。
--framework=1
#取值为3时,即为TensorFlow框架网络模型,只支持尾缀为pb的模型文件
--framework=3
#取值为5时,即为ONNX格式网络模型,仅支持ai.onnx算子域中opset v11版本的算子,用户也可以将其他opseth版本的
算子(比如opset v9),通过PyTorch转换成opset v11版本的ONNX算子;而使用PyTorchi训练出的pth模型需要转化为
ONNX格式的模型,才能进行模型转换。
--framework=5
- --input_format
填写输入数据格式,Caffe、ONNX默认为NCHW;TensorFlow:默认为NHWC。
该参数一般不需要填写,直接使用默认值即可,但是该参数存在以下限制:
如果TensorFlow模型是通过ONNX模型转换工具输出的,则该参数必填,且值为NCHW。
当原始框架为MindSpore时,只支持配置为NCHW。
如果摸型转换时开启AIPP,在进行推理业务时,输入图片数据要求为NHWC排布,该场景下最终与APP连接的输入节点的格式被强制改成NHWC,可能与atc模型转换命令中--input format参数指定的格式不一致。
#input format参数填写示例
--input format=NCHW
- --input_shape
填写模型输入输出的shape,格式为"input_name:n,c,h,w";模型输入唯一且shapel固定时,可以不填写该参数。以下情况必须要设置该参数:
a.模型有多个输入,则不同输入之间使用英文分号分隔,例如"input_name1:n1,c1,h1,w1;input_name2:n2,c2,h2,w2"。input_name必须是转换前的网络模型中的节点名称。 b. 原始模型中输入数据的某个维度不固定,例如input_name1:?,h,w,c,该参数必填。其中“?”为batch数,表示一次处理的图片数量,可以直接设置为固定值。
#input shape参数填写示例
--input shape="actual input 1:1,3,224,224"
- --output 当进行开源框架的网络模型转换时,填写输出的离线模型的路径以及文件名。参数使用参考示例如下:
#指定目录
--output=SHOME/resnet50
#当前目录
--output=resnet50
换后的模型文件名以该参数指定的为准,自动以.om后缀结尾。
- --insert_op_conf
填写插入算子的配置文件路径与文件名,例如aipp预处理算子。
#aipp预处理
--insert op_conf=aipp.cfg
- --soc version
填写模型转换时昇腾AI处理器的版本。参数使用参考示例如下:
#昇腾310A处理器使用示例
--soc version=Ascend310
#昇腾310PAI处理器使用示例
--soc version=Ascend310P3
#昇腾910Al处理器使用示例
--soc version=Ascend910A
3.常见使用命令
#caffe模型,不使用aipp
atc --model=resnet50.prototxt --weight=resnet50.caffemodel --framework=0 --output=resnet50 --soc_version=Ascend310 --input_format=NCHW
#pb模型,不使用aipp
atc --model=resnet50_tensorflow_1.7.pb --framework=3 --output=resnet50 --soc_version=Ascend310
#onnx模型,不使用aipp
atc --model=resnet50.onnx --framework=5 --output=resnet50 --input_shape="actual_input_1:1,3,224,224" --soc_version=Ascend310
#onnx模型,使用aipp
atc --model=resnet50.onnx --framework=5 --output=resnet50 --input_shape="actual_input_1:1,3,224,224" --soc_version=Ascend310 --insert_op_conf=aipp.cfg
标签:resnet50,示例,CANN,模型,第一季,--,framework,2023,input
From: https://blog.51cto.com/u_14125503/6372307