tensorRT学习笔记 C++version
1.1 初始化tensorRT的方式
有两种方式初始化TensorRT:
1、创建IBuilder对象去优化网络
2、创建IRuntime对象执行一个被优化的网络
这两种方式,你都需要先实现一个logging interface(日志接口),TensorRT会通过这个接口进行报错、警告和消息提示
class Logger : public ILogger
{
void log(Severity severity, const char* msg) override
{
//不提示INFO信息,只显示警告和错误
if (severity != Severity::kINFO)
{
std::cout << msg << std::endl;
}
}
}gLogger;
注意:你可能会创建很多的IBuilder和IRuntime,但是logger是一个单例!!!
1.2 在C++中创建一个网络定义
使用tensorRT的第一步就是从你的model中创建一个tensorRT的网络定义
可以从别的深度学习框架中进行导入,现在支持:
1、Caffe(both BVLC)
2、ONNX
3、UFF(used for tensorflow)
同样也可以使用TensorRT API直接构造模型,但是需要在网络层中使用少量API定义每一层,并且实现自己导入参数机制,来导入已经训练完毕的模型参数
在以上的方式你必须明确告诉tensorRT哪些张量是输出,因为被确定为输出的张量不会因为采取加速而被builder进行优化。
输入和输出张量都需要进行命名(使用ITensor::setName())
同时推理的时候,需要为引擎提供输入和输出的buff缓存指针
还有对于tensorRT网络定义很重要的一个方面,就是包含指向模型权重的指针,它会被builder拷贝到优化引擎里
注意:如果网络定义是从语法中创建的,解析器占用权重的内存,因此解析器在builder运行前都不能被删除
1.3 在C++使用解析器导入一个模型
使用C++解析器导入你需要遵循以下的步骤:
1、创建TensorRT的