动态shape,即编译时指定可动态的范围[L-H],推理时可以允许 L<= shape <= H
OptimizationProfile是一个优化配置文件,用来指定输入的shape可以变换的范围的,不要被优化两个字
蒙蔽了双眼
- 构建网络时:
- 1.1. 必须在模型定义时,输入维度给定为-1,否则该维度不会动态。注意一下两点:
- 1.1.1. 若onnx文件,则onnx文件打开后应该看到为动态或者-1
- 1.1.2. 如果你的模型中存在reshape类操作,那么reshape的参数必须随动态进行计算。而大部分时候这都是问题。除非你是全卷积模型,否则大部分时候只需要为batch_size维度设置为动态,其他维度尽量避免设置动态
- 1.2. 配置profile:
- 1.2.1. create:
builder->createOptimizationProfile()
- 1.2.2. set:
setDimensions()
设置kMIN
,kOPT
,kMAX
的一系列输入尺寸范围 - 1.2.3. add:
config->addOptimizationProfile(profile);
添加profile到网络配置中
- 1.2.1. create:
- 1.1. 必须在模型定义时,输入维度给定为-1,否则该维度不会动态。注意一下两点:
- 推理阶段时:
- 2.1. 您需要在选择profile的索引后设置
input
维度:execution_context->setBindingDimensions(0, nvinfer1::Dims4(1, 1, 3, 3));
-
<
- 2.1. 您需要在选择profile的索引后设置