使用ATC命令转换模型
本节介绍如何通过ATC工具将模型转换成支持在开发者套件上推理的离线om模型。
准备模型
- 获取网络模型。
- ONNX:单击Link或使用wget命令,解压压缩包,从“model”文件夹中获取*.onnx格式模型文件。
wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/Atlas%20200I%20DK%20A2/DevKit/models/sdk_cal_samples/unetplusplus_sdk_python_sample.zip
- TensorFlow:单击Link或使用wget命令,获取*.pb格式模型文件。
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
- MindSpore:单击Link或使用wget命令,获取*.air格式模型文件。
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com:443/cannInfo/model/resnet50_export.air
- Caffe:Caffe模型转换需要模型文件和权重文件。
- 模型文件(*.prototxt):单击Link或使用wget命令下载该文件。
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/resnet50/resnet50.prototxt
- 权重文件(*.caffemodel):单击Link或使用wget命令下载该文件。
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/resnet50/resnet50.caffemodel
- 模型文件(*.prototxt):单击Link或使用wget命令下载该文件。
- ONNX:单击Link或使用wget命令,解压压缩包,从“model”文件夹中获取*.onnx格式模型文件。
- (可选)如果是直接将模型文件下载到Ubuntu系统,则可以直接进行模型转换操作;如果是将模型文件下载到PC Windows系统,需要参考配置SSH文件传输将模型上传到Ubuntu系统。
- 在下载的代码文件存放目录右键单击空白处,选择“Open in Terminal”打开命令行窗口。图1 打开终端
- 以下载ONNX模型为例,执行命令进入解压后模型文件存放目录。
cd unetplusplus_sdk_python_sample/model
模型转换基础示例
以下介绍模型转换必须使用的参数。
- 以ONNX模型为例,执行如下命令生成离线模型(如下命令中使用的目录以及文件均为样例),模型转换必须使用的参数介绍如表1所示。
atc --model=model.onnx --framework=5 --output=model --soc_version=Ascend310B4
- 若提示如下信息,则说明模型转换成功,若模型转换失败,则请参见错误码参考进行定位。
其他常用转换参数说明
模型转换基础示例介绍了模型转换必须使用的参数,接下来以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本地的模型文件,单击输入节点,查看输入节点名称。
图2 查看输入节点名称 - 输入节点shape查看方法和input_shape参数设置策略使用Netron模型可视化工具打开模型,单击输入节点查看shape,可以看出输入节点x的shape为[p2o.DynamicDimension.0,3,48,p2o.DynamicDimension.1],可以看出这个模型的输入是NCHW格式。第一个输入和最后一个输入分别为batch_size和width,且他们都由一个string填充,这种情况该维度为动态参数值(有时batch_size和width值为-1,这种情况和由string填充等价)。此时如果将该动态shape模型转换为batch size为1,宽度为1440的静态om模型时,input_shape参数可以设置为[1,3,48,1440],1440为shape中的width,可以按需设置。图3 查看shape