---
title: 离线模型支持动态batch_size/动态分辨率
description: "某些推理场景，如检测出目标后再执行目标识别网络，由于目标个数不固定导致目标识别网络输入batch_size不固定。如果每次推理都按照最大的batch_size或最大分辨率进行计算，会造成计算资源浪费。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/devaids/atctool/atlasatc_16_0010.html
sourcePath: /source/zh/canncommercial/900/devaids/atctool/atlasatc_16_0010.html
indexId: 9ac538ecd2ab5145458be89ff513829f831dded7a6885a8076393652f6a2162767
---
# 离线模型支持动态batch_size/动态分辨率


#### 场景介绍

某些推理场景，如检测出目标后再执行目标识别网络，由于目标个数不固定导致目标识别网络输入batch_size不固定。如果每次推理都按照最大的batch_size或最大分辨率进行计算，会造成计算资源浪费。

为此，ATC工具提供了--dynamic_batch_size参数设置batch_size档位；提供了--dynamic_image_size参数设置分辨率档位。


#### 转换方法

如下转换示例以TensorFlow框架ResNet50网络模型为例进行演示，单击Link(https://gitee.com/ascend/ModelZoo-TensorFlow/tree/master/TensorFlow/contrib/cv/resnet50_for_TensorFlow)，根据页面提示获取ResNet50网络的模型文件（*.pb）。

1. 以CANN软件包运行用户登录开发环境，将模型文件（*.pb）上传到开发环境任意路径，例如上传到$HOME/module/目录下。
2. 执行如下命令生成离线模型。（如下命令中使用的目录以及文件均为样例，请以实际为准）

  - 动态batch_size

```
atc --model=
$HOME
/module
/resnet50_tensorflow_1.7.pb
--framework=3 --output=
$HOME
/module
/out/tf_resnet50
--soc_version=
<soc_version>
--input_shape=
"Placeholder:-1,224,224,3"
--dynamic_batch_size=
"1,2,4,8"
```


  - 动态分辨率

```
atc --model=
$HOME
/
module
/resnet50_tensorflow_1.7.pb
--framework=3 --output=
$HOME
/module
/out/tf_resnet50
--soc_version=
<soc_version>
--input_shape=
"Placeholder:1,-1,-1,3"
--dynamic_image_size=
"224,224;448,448"
```


关键参数解释如下：

  - --dynamic_batch_size：设置动态batch_size参数。
  - --dynamic_image_size：设置输入图片的动态分辨率参数。
  - --input_shape：指定模型输入数据的shape，配合--dynamic_batch_size或--dynamic_image_size参数使用。
  - --model：ResNet50网络模型文件所在路径。
  - --framework：原始框架类型，3表示TensorFlow。
关于参数的详细解释请参见参数说明。若提示如下信息，则说明模型转换成功，若模型转换失败，请参见“错误码参考(https://www.hiascend.comdocument/detail/zh/canncommercial/900/maintenref/troubleshooting/troubleshooting_0224.html)”章节进行辅助定位。```
ATC run success, welcome to the next use.
```


成功执行命令后，在--output参数指定的路径下，可查看离线模型（如：tf_resnet50.om）。
模型转换完成后，在生成的om离线模型中，会新增一个输入（如图1中红框中的Data输入），在模型推理时通过该新增的输入提供具体的batch_size值（或分辨率值）。例如，a输入的batch_size是动态的（或分辨率是动态的），在om离线模型中，会有与a对应的b输入来描述a的batch_size（或分辨率取值）。
图1 包含动态batch_size功能的离线模型
