---
title: 在开发者套件上转换模型
description: "1. 使用MobaXterm远程连接工具，以root用户登录开发者套件（密码：Mind@123）。"
url: https://www.hiascend.com/document/detail/zh/Atlas200IDKA2DeveloperKit/latest/Application%20Development%20Guide/tmuacop/tmuacop_0025.html
sourcePath: /source/zh/Atlas200IDKA2DeveloperKit/23.0.RC2/Application Development Guide/tmuacop/tmuacop_0025.html
indexId: ee2f011445a270579bdfe91cc5baecc42ae02356f1eaecc513303959273d8dc3101
---
# 在开发者套件上转换模型

#### 准备模型

1. 使用MobaXterm远程连接工具，以root用户登录开发者套件（密码：Mind@123）。
2. 获取网络模型，将下载后的压缩包上传至开发者套件任意目录，例如：“/home”。

  - ONNX：单击    Link(https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/Atlas 200I DK A2/DevKit/models/sdk_cal_samples/unetplusplus_sdk_python_sample.zip)
或使用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(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命令，获取*.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(https://obs-9be7.obs.cn-east-2.myhuaweicloud.com:443/cannInfo/model/resnet50_export.air)
或使用wget命令，获取*.air格式模型文件。

```
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com:443/cannInfo/model/resnet50_export.air
```


  - Caffe：Caffe模型转换需要模型文件和权重文件。

    - 模型文件（*.prototxt）：单击      Link(https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC Model/resnet50/resnet50.prototxt)
或使用wget命令下载该文件。

```
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/resnet50/resnet50.prototxt
```


    - 权重文件（*.caffemodel）：单击      Link(https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC Model/resnet50/resnet50.caffemodel)
或使用wget命令下载该文件。

```
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/AE/ATC%20Model/resnet50/resnet50.caffemodel
```


3. 以下载ONNX模型为例，执行命令进入解压后模型文件存放目录。

```
cd /home/unetplusplus_sdk_python_sample/model
```


#### 模型转换基础示例

以下介绍模型转换必须使用的参数。

1. 以ONNX模型为例，执行如下命令生成离线模型（如下命令中使用的目录以及文件均为样例），模型转换必须使用的参数介绍如表1所示。

```
atc --model=
model.onnx
--framework=5 --output=
model
--soc_version=Ascend310B4
```


  转换模型失败，可参见应用进程占用内存超出限制导致系统异常终止(https://www.hiascend.com/document/detail/zh/Atlas200IDKA2DeveloperKit/23.0.RC2/Appendices/faq/faq_0029.html)解决。

**表1 参数说明**

| 参数名 | 参数说明 |
| --- | --- |
| \-\-model | 原始模型文件，填写模型文件时需要带上格式，如.onnx。 |
| \-\-weight | 原始模型权重，该参数在转换Caffe模型场景下使用，其他框架不使用。 |
| \-\-framework | 原始框架类型，各框架对应的数值如下： 0:Caffe; 1:MindSpore; 3:Tensorflow; 5:ONNX |
| \-\-output | 保存转换后的om离线推理模型文件路径。 |
| \-\-soc\_version | 昇腾AI处理器型号。 |


2. 若提示如下信息，则说明模型转换成功，若模型转换失败，则请参见错误码参考(https://www.hiascend.com/document/detail/zh/canncommercial/5046/inferapplicationdev/atctool/troubleshooting_01_0001.html)进行定位。

```
ATC run success
```


  成功执行命令后，在--output参数指定的路径下，可查看离线模型（如：model.om）。

  模型编译时，若遇到AI CPU算子不支持某种数据类型导致编译失败的场景，可通过启用Cast算子自动插入特性快速将输入转换为算子支持的数据类型，从而实现网络的快速打通，详细流程请参见开启AI CPU Cast算子自动插入特性(https://www.hiascend.com/document/detail/zh/canncommercial/5046/inferapplicationdev/atctool/atlasatc_16_0169.html)。


#### 其他常用转换参数说明

模型转换基础示例介绍了模型转换必须使用的参数，接下来以YoloV5模型和SVTR模型为例介绍其他常用参数的使用方法。更多模型转换参数说明请参见《ATC模型转换(https://www.hiascend.com/document/detail/zh/canncommercial/5046/inferapplicationdev/atctool/atlasatc_16_0003.html)》中“参数说明”章节。

单击链接或使用wget命令下载YoloV5模型(https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/Atlas 200I DK A2/DevKit/models/sdk_cal_samples/yolo_sdk_python_sample.zip)代码包，在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模型(https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/Atlas 200I DK A2/DevKit/models/sdk_cal_samples/ocr_acl_sample.zip)代码包，在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
```


**表2 参数说明**

| 参数名 | 参数说明 |
| --- | --- |
| \-\-input\_format | 输入Tensor的内存排列方式，NCHW指代batch、channels、height、width。 当原始框架为Caffe时，支持NCHW、ND（表示支持任意维度格式，N<=4）两种格式，默认为NCHW。 当原始框架为ONNX时，支持NCHW、NCDHW、ND（表示支持任意维度格式，N<=4）三种格式，默认为NCHW。 当原始框架是TensorFlow时，支持NCHW、NHWC、ND、NCDHW、NDHWC五种输入格式，默认为NHWC。 如果TensorFlow模型是通过ONNX模型转换工具输出的，则该参数必填，且值为NCHW。 如果原始模型中含有带data\_format入参的算子，则该参数必填，推荐取值为ND，模型转换过程中会根据data\_format属性的算子，推导出具体的format。若用户无法确定输入数据格式，则推荐指定为ND。 当原始框架为MindSpore时，只支持配置为NCHW。 一般情况下不需要使用该参数，如果用户开发的应用代码前处理对内存排列有要求，可以使用该参数并填写所需的内存排列方式。 |
| \-\-input\_shape | 模型的输入节点名称和shape，shape的格式一般为[batch,channels,height,width]。 一般情况下不需要使用该参数，如果要转换的模型为动态shape的ONNX模型时，需要使用该参数并填写shape。 本文以将一个动态shape的SVTR模型转换为静态om模型为例。 |
| \-\-input\_fp16\_nodes | 指定输入数据类型为FP16的输入节点名称。若不指定，则默认是float32数据类型。 此参数可根据用户需要选择是否指定，若为默认float32，则精度相对较高；若为float16，则性能相对较高，在精度无明显下降的情况下有利于性能的提升。 |


- 输入节点名称查看方法
  使用Netron模型可视化工具(https://netron.app/)打开（单击Open Model按钮）PC本地的模型文件，单击输入节点，查看输入节点名称。

  图1 查看输入节点名称

- 输入节点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，可以按需设置。 图2 查看shape
