关于tensorRT动态输入的例子大多数都是c++版本的,python版本的较少,这里简单总结下python处理tensorRT动态输入时,遇到的一些问题及解决方案。
这里的动态输入是指batch,width,height等不固定大小的输入。对于目标检测等问题,如果将图像压缩到指定长度和宽度,一般会损失一些性能,一般情况下是压缩较小的边到一定数值(例如608,416等),另一条边按照比例进行压缩,这就导致了输入可能是变长的情况。而早期的tensorrt是不支持变长输入,这一点比较令人费解,因为tensorflow,pytorch等框架是支持变长输入的,为什么tensorrt支持变长输入要这么麻烦呢?我想到的一个原因是tensorrt内部做了一些优化策略,而这些优化策略对于变长问题是较难处理的。
一、由onnx模型构建trt引擎
tensorrt6 以后的版本是支持动态输入的,需要给每个动态输入绑定一个profile,用于指定最大值,最小值和常规值,如果超出这个范围会报异常。
profile = builder.create_optimization_profile()
profile.set_shape(network.get_input(0).name, (1,3, 32, 32), (1,3, 608, 608), (1,3, 2050, 2050))
config.add_optimization_profile(profile)
另外建立engine时是通过config设置参数的,
config.max_workspace_size=1<<30 #1GB
而不是通过builder&#x