动态分辨率
本节介绍如何在模型构建时支持动态分辨率的功能。
功能介绍
在模型推理时,对于每次处理图片宽和高不固定的场景,用户可以在模型构建时设置不同的图片宽高档位。
使用方法
- 在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_ND, DT_FLOAT); auto data = op::Data("data"); data.update_input_desc_data(desc_data); data.update_output_desc_out(desc_data);
模型编译时,在aclgrphBuildModel接口options中设置INPUT_SHAPE/INPUT_FORMAT信息,同时通过DYNAMIC_IMAGE_SIZE指定动态分辨率的档位。
- INPUT_FORMAT必须设置并且和所有Data算子的format保持一致,且仅支持NCHW和NHWC,否则会导致模型编译失败。
- INPUT_SHAPE可选设置。如果不设置,系统直接读取对应Data节点的shape信息,如果设置,以此处设置的为准,同时刷新对应Data节点的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、动态维度同时使用。
- DYNAMIC_IMAGE_SIZE最多支持100档配置,每一档通过英文分号分隔。如果用户设置的分辨率数值过大或档位过多,可能会导致模型编译失败,此时建议用户减少档位或调低档位数值。
- 如果模型编译时通过该参数设置了动态分辨率,则使用应用工程进行模型推理时,需要在aclmdlExecute接口之前,增加aclmdlSetDynamicHWSize接口,用于设置真实的分辨率,且实际推理时,使用的数据集图片大小需要与具体使用的分辨率相匹配。
关于aclmdlSetDynamicHWSize接口的具体使用方法,请参见《CANN AscendCL应用软件开发指南(C&C++)》。
父主题: 专题