---
title: 动态分辨率
description: "本节介绍如何在模型构建时支持动态分辨率的功能。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/programug/graphdevg/atlasag_25_0050.html
sourcePath: /source/zh/canncommercial/900/programug/graphdevg/atlasag_25_0050.html
indexId: 7c7c67b0cd458e857cc3aab2d9753fd6dd34b14420dea29beabd06a6cb79548b70
---
# 动态分辨率

本节介绍如何在模型构建时支持动态分辨率的功能。

#### 功能介绍

在模型推理时，对于每次处理图片宽高不固定的场景，用户可以在模型构建时设置不同的图片宽高档位。


#### 使用方法

1. 在Data算子定义时，将数据shape的HW维度都设置为-1：
  1 2 3 4 5 auto shape_data = vector<int64_t>({ 8,3,-1,-1 }); TensorDesc desc_data(ge::Shape(shape_data), FORMAT_NCHW, DT_FLOAT); auto data = op::Data("data"); data.update_input_desc_data(desc_data); data.update_output_desc_out(desc_data);

2. 
  模型编译时，在aclgrphBuildModel接口options中设置INPUT_SHAPE/INPUT_FORMAT信息，同时通过DYNAMIC_IMAGE_SIZE指定动态分辨率的档位。

  INPUT_FORMAT必须设置并且和所有Data算子的format保持一致，且仅支持NCHW和NHWC，否则会导致模型编译失败。 INPUT_SHAPE参数必须设置。

  1 2 3 4 5 6 7 void PrepareOptions(std::map<AscendString, AscendString>& options) { options.insert({ {ge::ir_option::INPUT_FORMAT, "NCHW"}, {ge::ir_option::INPUT_SHAPE, "data: 8,3,-1,-1"}, {ge::ir_option::DYNAMIC_IMAGE_SIZE, "416,416;832,832"} // 设置HW档位，支持处理HW为416,416，或者832,832的图片 }); }


#### 使用注意事项

- 该功能不能和动态Batch、动态维度同时使用。
- 如果用户设置的分辨率数值过大或档位过多，可能会导致模型编译失败，此时建议用户减少档位或调低档位数值。
- 如果模型编译时通过该参数设置了动态分辨率，则使用应用工程进行模型推理时，在模型执行接口之前：

  - 使用aclmdlSetDynamicHWSize接口，用于设置真实的分辨率，且实际推理时，使用的数据集图片大小需要与具体使用的分辨率相匹配。
  - 不使用aclmdlSetDynamicHWSize接口，则模型执行时，默认按照动态分辨率设置范围的最大档位宽、高进行赋值。
接口详细说明请参见“aclmdlSetDynamicHWSize(https://www.hiascend.comdocument/detail/zh/canncommercial/900/API/ascendgraphapi/aclcppdevg_03_0307.html)”。
- 如果用户设置了动态分辨率，即输入图片的宽和高不确定，同时又通过INSERT_OP_FILE参数设置了静态AIPP功能：该场景下，AIPP配置文件中不能开启Crop和Padding功能，并且需要将配置文件中的src_image_size_w和src_image_size_h取值设置为0。
- 如果用户设置了动态分辨率，同时又通过INSERT_OP_FILE参数设置了动态AIPP功能：
  实际推理时，调用aclmdlSetInputAIPP接口，设置动态AIPP相关参数值时，不能开启Crop和Padding功能。该场景下，还需要确保通过aclmdlSetInputAIPP接口设置的宽和高与aclmdlSetDynamicHWSize接口设置的宽、高相等，都必须设置成动态分辨率最大档位的宽、高。

  接口详细说明请参见“模型执行(https://www.hiascend.comdocument/detail/zh/canncommercial/900/API/ascendgraphapi/aclcppdevg_03_0297.html)”章节。

- 某些场景下，通过该参数设置动态分辨率特性后，生成的离线模型网络结构会与固定分辨率场景下的不同，推理性能可能存在差异。
- 如果用户设置了动态分辨率，实际推理时，使用的数据集图片大小需要与具体使用的分辨率相匹配。
- 如果用户设置的分辨率数值过大或档位过多，在运行环境执行推理时，建议执行swapoff -a命令关闭swap交换空间作为内存的功能，防止出现由于内存不足，将swap交换空间作为内存继续调用，导致运行环境异常缓慢的情况。
