ultralytics的TensorRT10 C++实现
- opencv 4.11
- cuda 12.5
- cudnn 9.8
- TensorRT 10.11.0.33
- yaml-cpp 0.8.0
mkdir opencv_build && cd opencv_build
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DOPENCV_GENERATE_PKGCONFIG=ON -DBUILD_opencv_legacy=OFF -DCMAKE_INSTALL_PREFIX=/usr/local -DOPENCV_EXTRA_MODULES_PATH= ../opencv_contrib/modules/ ../opencv
make -j8
sudo make install默认已经完成nvidia显卡驱动的安装,若未安装,请先安装,并使用nvidia-smi检查驱动是否安装成功,并观察支持的cuda版本
git clone https://github.com/jbeder/yaml-cpp.git
cd yaml-cpp && mkdir build && cd build
cmake ..
make -j8
sudo make installCUDA Toolkit Archive | NVIDIA Developer 在官网寻找适合的cuda版本进行安装
安装完成后,在/usr/local目录下,应该能看到cuda的目录。此时可以使用nvcc -V,观察是否能正常显示版本信息,若正常显示版本信息,则直接进行cudnn的安装。
终端运行
sudo touch /etc/profile.d/cuda.sh
echo 'export PATH=/usr/local/cuda/bin/:$PATH' | sudo tee -a /etc/profile.d/cuda.sh
echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64/:/usr/lib/wsl/lib/:$LD_LIBRARY_PATH' | sudo tee -a /etc/profile.d/cuda.sh编辑~/.bsahrc添加下面内容,编辑完成后,记得执行source ~/.bashrc
# 下面路径请自行确认,一般只有cuda版本需要修改
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
export PATH=/usr/local/cuda-12.5/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-12.5/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CUDA_HOME=/usr/local/cuda-12.5完成后再次尝试nvcc -V观察是否正常显示cuda版本
cuDNN Archive | NVIDIA Developer
按照安装的cuda版本,选择cudnn版本进行安装,其中cudnn也区分8,9两个大版本
8版本的cudnn可以使用下载压缩包的形式,通过解压,移动其中的文件进行配置
tar -xvf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz
sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda/include
sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*也可以下载deb文件进行二进制安装
9版本的cudnn则使用配置apt源的二进制方式安装
TensorRT Download | NVIDIA Developer
寻找合适版本的TensorRT进行安装(由于TensoRT10版本对API有较多修改,所以运行本仓库代码则肯定是使用10版本的)
这里通过下载tar文件进行配置
tar -zxvf TensorRT-10.11.0.33.Linux.x86_64-gnu.cuda-12.9.tar.gz解压后,在~/.bashrc添加下面内容,注意路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/lin/TensorRT-10.11.0.33/lib进入python目录,可以下载对应TensorRT版本的python包
cd samples/sampleOnnxMNIST/
make
# 切换到TensorRT-{版本}/targets/x86_64-linux-gnu/bin目录下运行sample_onnx_mnist
cd ../../targets/x86_64-linux-gnu/bin/
./sample_onnx_mnist若编译与运行都正常,则说明安装成功
当环境配置正常,则该仓库代码部署也应该没什么问题.
一般git下来后,修改CMakeLists.txt中TensorRT的路径,以及main.cpp中的文件路径后,进行编译即可。
git clone https://github.com/LZY-XiXi/tensorrt10_detect.git
cd tensorrt10_detect
mkdir build && cd build
cmake ..
make -j8
./standard本仓库代码是针对ultralytics的,所以engine文件需要利用ultralytics仓库代码进行生成。其中,直接使用ultralytics仓库的export是会出现模型文件序列化失败的。
原因,解决方案
另外,如果手动使用trtexec转化onnx文件,路径请不要使用~符号,会出现无法识别而生成engine文件失败的。