Wulingtian/nanodet_tensorrt_int8

输入层tensor的Shape疑问求解(cur_in_tensor_params[0].pShape)?

szjcqu opened this issue · 2 comments

感谢题主的开源代码,受益匪浅!
我有两个疑问请教一下 :

1 输入层tensor的Shape, ( nanodet_infer.cc 的235行 ):

// 第一个输入tensor
cur_in_tensor_params[0].nDims = 4;
cur_in_tensor_params[0].type = DT_FLOAT;
cur_in_tensor_params[0].pShape[0] = 1; //batch size can't set to -1
cur_in_tensor_params[0].pShape[1] = 3;
cur_in_tensor_params[0].pShape[2] = INPUT_W;
cur_in_tensor_params[0].pShape[3] = INPUT_H;

输入的tensor的shape按道理是NCHW, 即上述应该是 pShape[2] = INPUT_H, pShape[3] = INPUT_W。不知道我的理解是否正确? 是因为nanodet的输入尺寸是320x320, 所以这里即使反了,运行和结果才没出现问题 ?

2 题主在另一个Issue (https://github.com/Wulingtian/nanodet_tensorrt_int8/issues/1) 中提供的 LibMyTtrEngine-trt721.so生成代码,与github上TensorRT的模型加载运行的代码(例如 https://hub.fastgit.org/linghu8812/tensorrt_inference/tree/master/nanodet )不太相同,但题主的nanodet推理的效果和精度有明显的提升! 请问题主做了哪些相关的优化?

谢谢。 期待题主的回复!

关于第一个疑问,你的理解是对的;速度有提升是因为做了int8量化,以及对tensorrt的推理做了封装(把加载引擎,分配输入输出显存,释放显存,输入数据从内存拷贝到显存,输出数据从显存拷贝到内存封装为.so文件),精度有提升是因为改变了网络结构,把原始模型的maxpooling替换为卷积,把PAN层的上采样及下采样分别替换为反卷积和卷积。

关于第一个疑问,你的理解是对的;速度有提升是因为做了int8量化,以及对tensorrt的推理做了封装(把加载引擎,分配输入输出显存,释放显存,输入数据从内存拷贝到显存,输出数据从显存拷贝到内存封装为.so文件),精度有提升是因为改变了网络结构,把原始模型的maxpooling替换为卷积,把PAN层的上采样及下采样分别替换为反卷积和卷积。

感谢题主的解析! 题主有尝试过用现在这个框架(nanodet_tensorrt_int8 工程和 LibMyTtrEngine-trt721.so工程)做图像语义分割么? 也就是pth ->onnx -> trt, 输入1x3xHxW, 调用LibMyTtrEngine-trt721,用nanodet_tensorrt_int8工程得到1x1xHxW输出 ?
如果方便的话,题主能否留一下联系方式,有TRT相关的问题想跟题主请教一下?