- 注意:1.1 和 1.2 都是全连接网络,1.3是
-
构建网络时:
- 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的索引后设置
-
检查正确性
- 我们通常可以利用pytorch来校验是否发生了错误
c++ 部分
make run
python 部分 (用来验证c++的结果对不对)
python conv-test.py