laugh12321 / TensorRT-YOLO

🚀 你的YOLO部署神器。TensorRT Plugin、CUDA Kernel、CUDA Graphs三管齐下,享受闪电般的推理速度。| Your YOLO Deployment Powerhouse. With the synergy of TensorRT Plugins, CUDA Kernels, and CUDA Graphs, experience lightning-fast inference speeds.
https://github.com/laugh12321/TensorRT-YOLO
GNU General Public License v3.0
720 stars 81 forks source link

[Help]: Use DeployCGDet Error Expression: vector subscript out of range #56

Open SuperJinggg opened 2 weeks ago

SuperJinggg commented 2 weeks ago

我使用MD方式编译将代码打成deploy.dll动态库。然后在mfc的demo中调用。 使用DeployDet时完全正常,但是使用DeployCGDet(model = std::make_shared(enginePath, is_obb);)报错 `Program: E:\yolov8Testv1\Yolov8Detect\x64\Debug\deploy.dll File: C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.16.27023\include\vector Line: 1733

Expression: vector subscript out of range

For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts.` 报错信息太少了,我无法定位错误。请问大佬对这个错误了解吗?

laugh12321 commented 2 weeks ago

@SuperJinggg 使用 DeployCGDet 必须要求是静态模型,也就是Batch确定的,并且输入输入要与Batch一样, DeployDet 没有这个限制 (因为 DeployCGDet 使用了 cuda graph)。

image

假设 Batch 是 4, 那么predict传递的vector 长度也必须为4。怀疑是batch与输入大小不匹配。

SuperJinggg commented 2 weeks ago

但错误是在创建model时报的错,这时候并没有进行predict,即没有输入。

laugh12321 commented 2 weeks ago

但错误是在创建model时报的错,这时候并没有进行predict,即没有输入。

如果是在创建时出现问题,那只可能是你的模型节点个数与期望不符,发我你的ONNX在netron可视化的截图,看看输入和输出。

SuperJinggg commented 2 weeks ago

应该不是模型的问题,如果按照您的教程运行是完全成功的,只是我在打包成动态库后出现的问题。

laugh12321 commented 2 weeks ago

应该不是模型的问题,如果按照您的教程运行是完全成功的,只是我在打包成动态库后出现的问题。

@SuperJinggg 那就只能是你打包或者是调用代码写的问题,不可能是源码的问题。源码中报错vector subscript out of range只能是模型中的输入输出与源码不匹配,而且Demo中的例子本身就是以动态库的方式运行。

SuperJinggg commented 2 weeks ago

好吧,感谢大佬解惑,我只是将demo中的代码写进一个简单的mfc框架。我再仔细去康康

laugh12321 commented 2 weeks ago

好吧,感谢大佬解惑,我只是将demo中的代码写进一个简单的mfc框架。我再仔细去康康

你可以发我下你的MFC调用部分的代码,我帮你看看。

SuperJinggg commented 2 weeks ago

大佬,这个有点复杂,目前我在考虑直接把您的源代码嵌入进去,我想请问一下plugin这个我需要吗?

laugh12321 commented 2 weeks ago

Plugin文件夹的代码不需要,这个是编译插件的。只需要include和source文件夹的代码。source中的pybind下的代码也不需要,这个是用来映射到Python的。