本节介绍如何通过ATC工具将模型转换成支持在开发者套件上推理的离线om模型。
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/Atlas%20200I%20DK%20A2/DevKit/models/sdk_cal_samples/unetplusplus_sdk_python_sample.zip
wget https://ascend-repo-modelzoo.obs.cn-east-2.myhuaweicloud.com/c-version/ResNet50_for_TensorFlow/zh/1.7/m/ResNet50_for_TensorFlow_1.7_model.zip
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com:443/cannInfo/model/resnet50_export.air
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/resnet50/resnet50.prototxt
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/resnet50/resnet50.caffemodel
cd unetplusplus_sdk_python_sample/model
以下介绍模型转换必须使用的参数。
atc --model=model.onnx --framework=5 --output=model --soc_version=Ascend310B4
ATC run success
成功执行命令后,在--output参数指定的路径下,可查看离线模型(如:model.om)。
模型编译时,若遇到AI CPU算子不支持某种数据类型导致编译失败的场景,可通过启用Cast算子自动插入特性快速将输入转换为算子支持的数据类型,从而实现网络的快速打通,详细流程请参见开启AI CPU Cast算子自动插入特性。
模型转换基础示例介绍了模型转换必须使用的参数,接下来以YoloV5模型和SVTR模型为例介绍其他常用参数的使用方法。更多模型转换参数说明请参见《使用ATC工具转换模型》中“参数说明”章节。
单击链接或使用wget命令下载YoloV5模型代码包,在model目录中获取onnx模型文件。
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/Atlas%20200I%20DK%20A2/DevKit/models/sdk_cal_samples/yolo_sdk_python_sample.zip
YoloV5模型转换命令如下:
atc --model=yolov5s.onnx --framework=5 --output=yolov5s_bs1 --input_format=NCHW --soc_version=Ascend310B4 --input_fp16_nodes="images"
单击链接或使用wget命令下SVTR模型代码包,在models目录中获取onnx模型文件。
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/Atlas%20200I%20DK%20A2/DevKit/models/sdk_cal_samples/ocr_acl_sample.zip
SVTR模型转换命令如下:
atc --model=svtr.onnx --framework=5 --input_shape='x:1,3,48,1440' --input_format=NCHW --soc_version=Ascend310B4 --output=svtr
参数名 |
参数说明 |
---|---|
--input_format |
输入Tensor的内存排列方式,NCHW指代batch、channels、height、width。
一般情况下不需要使用该参数,如果用户开发的应用代码前处理对内存排列有要求,可以使用该参数并填写所需的内存排列方式。 |
--input_shape |
模型的输入节点名称和shape,shape的格式一般为[batch,channels,height,width]。 一般情况下不需要使用该参数,如果要转换的模型为动态shape的ONNX模型时,需要使用该参数并填写shape。 本文以将一个动态shape的SVTR模型转换为静态om模型为例。 |
--input_fp16_nodes |
指定输入数据类型为FP16的输入节点名称。若不指定,则默认是float32数据类型。 此参数可根据用户需要选择是否指定,若为默认float32,则精度相对较高;若为float16,则性能相对较高,在精度无明显下降的情况下有利于性能的提升。 |
使用Netron模型可视化工具打开(单击Open Model按钮)PC本地的模型文件,单击输入节点,查看输入节点名称。