Natsu-Akatsuki / RangeNetTrt8

tensorrt8 && cuda && libtorch implementation of rangenet++
MIT License
44 stars 9 forks source link

更改模型复现推理框架遇到的问题 #10

Closed Zhikun-Xu closed 1 year ago

Zhikun-Xu commented 1 year ago

hello 作者您好, 我能成功运行你的推理框架复现结果,效果极佳,推理速度也很快. 我试着去更改bag包和模型文件,遇到了以下几个问题,希望得到你的帮助,感谢:

  1. 我以你提供的onnx文件为输入, 用trtexec生成engine文件去推理,无法推理成功,提示terminate called after throwing an instance of 'c10::CUDAError' what(): CUDA error: device-side assert triggered CUDA kernel errors might be asynchronously reported at some other API call,so the stacktrace below might be incorrect. For debugging consider passing CUDA_LAUNCH_BLOCKING=1. 其他代码未作改动,我猜可能是和作者导模型的方式不一致,比如作者在网络结尾做的一些操作.

  2. 我试着去替换另外一个网络Salsanext进行推理, 该网络也是基于投影做的语义分割,前后处理和rangenet++一致,我更改了bag包以及一些fov参数信息. 在netTensorRT.cpp中 ,我做了如下修改 int start = 88;int end = 90;auto layer = network->getLayer(91);//这里我做了修改 最后一层是salsanext的91层 , 能跑通整个流程,打印出推理时间. 但是我试着用rviz去看结果的时候,分割结果是只有一个label信息(或者两个,有些闪烁的点). 我把推理的label和point打印出来看,发现推理的几个label是和bag包吻合的. 但是rviz结果不对,用trtexec导出的engine文件无法推理.

希望得到您的帮助,感谢.

Zhikun-Xu commented 1 year ago

环境如下 TensorRT 8.5.1 Python 3.8(ubuntu20.04) Cuda 11.8 GPU RTX 3090(24GB) * 1

Natsu-Akatsuki commented 1 year ago

感谢尝试。

1)嗯,对的。直接 trtexec 不 ok,是因为命令行生成的 trt 模型跟我源码生成的 trt 模型不一致,源码的额外补充了一个 KNN 层在原来 RangetNet++ 的后面。

称原实现 RangetNet++ 的最后一层为 A 然后我这边的 trt 模型为 A + KNN 你 trtexec 的 trt 模型 也只是 A

Natsu-Akatsuki commented 1 year ago

2)同理,"用trtexec导出的engine文件无法推理"

另外:看看点云效果

Zhikun-Xu commented 1 year ago

感谢回复!!

2) 推理得到的点云效果如下 image

Natsu-Akatsuki commented 1 year ago

嗯,根据您的描述,你这个问题跟我的代码没什么关联,算是额外的拓展。

您这边做的修改如下: 1)使用了我这边提供的前处理和后处理的相关代码,并确认了 FoV 的相关参数是正常的 2)将 RangeNet 的模型修改为了,salsanext,并尝试将其进行 TensorRT 的优化 3)使用其他类型的激光雷达,而非原来的 64-Velodyne

相关的现象是: 1)RViz 的分割结果显示异常,那实际上就对应了预测的 Label 有问题

问题: 1)我不太理解您所述的打印出来 label 和实际预测推理情况的描述,打印出来的不就是实际预测的 Label 么 2)你这线束是 256?

建议: 1)查验是否溢出:您设置 FP32 看看是否还有异常,可初步排除是否数据溢出 2)查验模型是否已训练:我看你提供的模型 ONNX 的输入是 1x5x256x1024,你这个 ONNX 模型是在256激光雷达数据集上训练过了么?还是你只是搭了个模型

Zhikun-Xu commented 1 year ago

hello 感谢作者回复, 我已经解决我的问题, 前处理中mean std参数未修改,修改之后推理显示均正确.

关于问题:

  1. 我当时困惑的地方是 我明确知道这个场景中确定存在1,2,3,4,5,6,7这几个标签,但是打印出来只有4个,所以怀疑推理有问题.
  2. 我的线束是128, 但是我对多个lidar做了拼接处理,256是调出来的参数

再次感谢作者解答,不甚感激

Natsu-Akatsuki commented 1 year ago

可以可以,欢迎 PR

1806610292 commented 10 months ago

hello 感谢作者回复, 我已经解决我的问题, 前处理中mean std参数未修改,修改之后推理显示均正确.

关于问题:

1. 我当时困惑的地方是 我明确知道这个场景中确定存在1,2,3,4,5,6,7这几个标签,但是打印出来只有4个,所以怀疑推理有问题.

2. 我的线束是128, 但是我对多个lidar做了拼接处理,256是调出来的参数

再次感谢作者解答,不甚感激

你好,请问怎么修改,我是用的自己的激光雷达数据做的训练,rangenet++和salsanext我的试过了,得到推理结果是错的,用python直接推理没问题。希望得到你的建议,多谢!!!