当前位置:   article > 正文

【TensorRT】onnx转成TensorRT开发踩坑记录(Win10+cuda11.1+TensorRT7.2.2.3)(持续更新)_onnx 转tensorrt

onnx 转tensorrt

onnx转成TensorRT开发注意点

本博客基于以下关于将onnx转成TensorRT的开源项目,在开发过程中记录出错或者一些需要注意的点。
onnx_tensorrt_project

环境配置:
Win10
Nvidia472.88显卡驱动
cuda11.1
TensorRT7.2.2.3

注意点:
1.TensorRT将onnx模型转成engine模型时
(即执行mBuilder->buildEngineWithConfig(*mNetwork, *mConfig))
跟当前的显卡计算能力有关。

如果在一个低计算能力的显卡的机器上生成的engine模型直接放到另一台高计算能力的显卡的机器上时会报错,必须是相同计算能力显卡上生成的engine文件才可以直接使用。

所以建议在哪个机器上调用engine模型时就在哪个机器上对图像进行推理,重点在于显卡不能更换
而显卡的计算能力可以参照英伟达的这张显卡计算能力表
在这里插入图片描述

参考资料:
Your GPU Compute Capability

2.TensorRT在计算能力为6.1的显卡上不支持FP16模式的加速,可以参照以下表格
请添加图片描述
而计算能力为6.1的有以下型号的显卡,比如10系列的GeForce GTX
请添加图片描述

实际测试下来,能跑得通,但是速度与显存和FP32的一样。
参考资料:
NVIDIA TENSORRT DOCUMENTATION

3.基于C++开发时最后测速度时,记得要把Debug模式切换成Release模式,否则速度不如理想的快。
在这里插入图片描述
4.注意如果想要遍历所有图片来测试速度时,发现隔几张图片后速度就会突然变得很慢,然后又恢复正常,接着变慢,那么可以看下是否是内存溢出问题。
在这里插入图片描述
如果是内存溢出的话,看下是否使用了类似cv::imwrite()的函数,使得不断将数据写入硬盘中。如果有的话取消掉,问题应该就会解决。

5.注意解析onnx模型的时候,如果正常的通道排序应该是(batch_size,channel,height,width
但是C++下的opencv调用resize时通道排序是(width,height),顺序有点不同。
转onnx的python代码:

    var=torch.ones((batch_size,3,resize_height,resize_width))
    var=var.type(torch.cuda.FloatTensor)
    model.eval()
    model = model.to(device)
    torch.onnx.export(model, var, output_onnx_path,opset_version=11,verbose=True)
  • 1
  • 2
  • 3
  • 4
  • 5

解析onnx的C++代码:

    std::shared_ptr<Trt> onnx_net;
	m_InputW = onnx_net->mBindingDims[0].d[3];
	m_InputH = onnx_net->mBindingDims[0].d[2];
  • 1
  • 2
  • 3

6.yolov4的pth生成的onnx,如果是在FP16模式下转成engine的时间会非常长,测试下来时间需要49分钟,需要耐心等待。

目前本人已经尝试过的解决方案(都没成功

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/423911
推荐阅读
相关标签