pytorchx和tensorrtx编译tensorrt模型的一些bug问题

1、fatal error: NvInfer.h: No such file or directory

NvInfer.h是TensorRT库中的一个头文件。如果在ubuntu系统tensorRT Deb版安装成功,该头文件所在目录/usr/include/x86_64-linux-gnu/。如果在jetson系统tensorRT Deb版安装成功,该头文件所在目录/usr/include/。如果安装tensorrt是TAR和ZIP文件,那么include_directories和link_directories路径在CMakeLists.txt.

        通过dpkg -L可以打印动态库和静态库中的所有内容

$ dpkg -L libnvinfer-dev 
/.
/usr
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/libnvinfer_static.a
/usr/lib/x86_64-linux-gnu/libmyelin_compiler_static.a
/usr/lib/x86_64-linux-gnu/libmyelin_executor_static.a
/usr/lib/x86_64-linux-gnu/libmyelin_pattern_library_static.a
/usr/lib/x86_64-linux-gnu/libmyelin_pattern_runtime_static.a
/usr/include
/usr/include/x86_64-linux-gnu
/usr/include/x86_64-linux-gnu/NvInfer.h
/usr/include/x86_64-linux-gnu/NvInferRuntime.h
/usr/include/x86_64-linux-gnu/NvInferRuntimeCommon.h
/usr/include/x86_64-linux-gnu/NvInferVersion.h
/usr/include/x86_64-linux-gnu/NvUtils.h
/usr/share
/usr/share/doc
/usr/share/doc/libnvinfer-dev
/usr/share/doc/libnvinfer-dev/copyright
/usr/share/doc/libnvinfer-dev/changelog.Debian
/usr/lib/x86_64-linux-gnu/libmyelin.so
/usr/lib/x86_64-linux-gnu/libnvinfer.so

2. fatal error: cuda_runtime_api.h: No such file or directory

        头文件cuda_runtime_api.h是cuda-cudart的头文件。在/usr/local/cuda/CMakeLists.txt中查找include_directories和link_directories的路径,然后进入相应路径。

$ dpkg -L cuda-cudart-dev-10-2           #(10-2代表cuda版本为10.2) 
/.
/usr
/usr/local
/usr/local/cuda-10.0
/usr/local/cuda-10.0/targets
/usr/local/cuda-10.0/targets/x86_64-linux
/usr/local/cuda-10.0/targets/x86_64-linux/lib
/usr/local/cuda-10.0/targets/x86_64-linux/lib/libcudadevrt.a
/usr/local/cuda-10.0/targets/x86_64-linux/lib/libOpenCL.so.1.1
/usr/local/cuda-10.0/targets/x86_64-linux/lib/libculibos.a
/usr/local/cuda-10.0/targets/x86_64-linux/lib/libcudart_static.a
/usr/local/cuda-10.0/targets/x86_64-linux/include
/usr/local/cuda-10.0/targets/x86_64-linux/include/cuda_runtime_api.h
/usr/local/cuda-10.0/targets/x86_64-linux/include/cudart_platform.h
/usr/local/cuda-10.0/targets/x86_64-linux/include/cuda_device_runtime_api.h
/usr/local/cuda-10.0/targets/x86_64-linux/include/cuda_runtime.h
/usr/lib
/usr/lib/pkgconfig
/usr/lib/pkgconfig/cudart-10.0.pc
/usr/share
/usr/share/doc
/usr/share/doc/cuda-cudart-dev-10-0
/usr/share/doc/cuda-cudart-dev-10-0/changelog.Debian.gz
/usr/share/doc/cuda-cudart-dev-10-0/copyright
/usr/local/cuda-10.0/targets/x86_64-linux/lib/libOpenCL.so
/usr/local/cuda-10.0/targets/x86_64-linux/lib/libOpenCL.so.1
/usr/local/cuda-10.0/targets/x86_64-linux/lib/libcudart.so

3、.wts not prepared or not in the right directory

模型路径错误。模型默认加载路径为build.loadWeights()函数加载模型将报如下错误:

std::map<std::__cxx11::basic_string, nvinfer1::Weights> loadWeights(std::__cxx11::string): Assertion `input.is_open() && "Unable to load weight file."' failed.
Aborted (core dumped)

4. yolo -s failed, class_num not adapted

自己训练模型的类别错误,在yololayer.h修改类别。一般报如下错误:

[Convolution]: kernel weights has count xxx but xxx was expected
void APIToModel(unsigned int, nvinfer1::IHostMemory**): Assertion `engine != nullptr' failed.
Aborted (core dumped)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的错误信息,你的代码中存在重复定义的问题编译器指出在 `yolov8_generated_process.cu.o` 和 `yolov8.cpp.o` 文件中都重复定义了 `OUTPUT_BLOB_NAME` 和 `INPUT_BLOB_NAME` 变量。 这种错误通常发生在多个源文件中都包含了同一个头文件,并且该头文件中定义了全局变量。由于每个源文件都会被编译成独立的目标文件,因此重复定义的全局变量会导致链接时出现冲突。 要解决这个问题,你可以考虑将这些全局变量的定义放在一个单独的源文件中,并在其他需要使用这些变量的源文件中使用 `extern` 关键字进行声明。这样可以确保全局变量只有一份定义,并且可以在多个源文件中共享。 首先,在一个源文件(比如 `config.cpp`)中定义这些全局变量: ```cpp // config.cpp #include "config.h" const std::string INPUT_BLOB_NAME = "input_blob"; const std::string OUTPUT_BLOB_NAME = "output_blob"; ``` 然后,在其他源文件中使用 `extern` 关键字进行声明: ```cpp // yolov8_generated_process.cu #include "config.h" extern const std::string INPUT_BLOB_NAME; extern const std::string OUTPUT_BLOB_NAME; // 其他代码 ``` ```cpp // yolov8.cpp #include "config.h" extern const std::string INPUT_BLOB_NAME; extern const std::string OUTPUT_BLOB_NAME; // 其他代码 ``` 这样做可以确保全局变量只有一份定义,并且可以在多个源文件中共享使用。 请根据你的实际需求和代码结构,将全局变量的定义放在一个单独的源文件中,并在其他源文件中使用 `extern` 进行声明。如果问题仍然存在,请提供更多相关代码以便我们更好地帮助你解决问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值