最简洁yolov8 C++配置教程

发布时间:2026/7/5 20:31:41
最简洁yolov8 C++配置教程 最简洁yolov8 C配置教程ubuntu22.04 安装Cuda TensorRT Cudnn Miniconda1 .Cuda TensorRT Cudnn配置步骤2. Miniconda的安装 在之前的安装完毕且成功的情况下yolov8的C使用1. github上有个大神开源了yolov8的使用非常好用[链接](https://github.com/triple-Mu/YOLOv8-TensorRT)https://github.com/triple-Mu/YOLOv8-TensorRTubuntu22.04 安装Cuda TensorRT Cudnn Miniconda该方法在多个计算平台进行了配置验证百分百好用平台包括AMD CPU3090、AMD CPU5090D、intel CPUP620、intelCPU1060、intelCPU40601 .Cuda TensorRT Cudnn配置步骤a. 安装Nvidia显卡驱动以我下面提供的Cuda TensorRT和Cudnn版本 根据电脑显卡型号在官网上找到对应的显卡驱动版本按照提示安装或者在ubuntu22.04系统下打开软件和更新–附加驱动–(使用NVIDIA Server metapackage来自nvidia-driver-535)附加驱动部分选择535系列(不能太新了根据下面安装的Cuda版本选择 535系列显卡驱动就行非50系列显卡驱动直接用535系列就可以了)在除了5090D计算平台上(5090D的显卡驱动没有535版本都比较新之前在5090上配置的时候直接安装的570系列驱动此时以下的Cuda TensorRT Cudnn版本都不能用需要自己去NVIDIA官网按照显卡驱动版本一个一个对应之后安装流程同下)b. 驱动安装完之后重启系统在终端输入nvidia-smi能查看到显卡 显存 功率等信息代表安装成功c. 以下的这几个安装需要翻墙如果不翻墙我放一个百度网盘的下载链接https://pan.baidu.com/s/1g3744RQMhZH0qqK49E8sZA?pwd6789 提取码: 6789(该环境中包含Miniconda的安装包)Cuda 12.2.2 官网地址https://developer.nvidia.com/cuda-12-2-2-download-archiveTensorRT 8.6.1 官网地址https://developer.nvidia.com/nvidia-tensorrt-8x-downloadcuDNN 8.9.4 官网地址https://developer.nvidia.com/rdp/cudnn-archive# 推荐路径不是强制要求 mkdir ~/Workspace cd ~/Workspace mkdir booster tools tmp # 安装 CUDA-12.2.2 cd ~/Workspace/tmp wget https://developer.download.nvidia.com/compute/cuda/12.2.2/local_installers/cuda_12.2.2_535.104.05_linux.run sudo sh cuda_12.2.2_535.104.05_linux.run --silent --toolkit # 如果失败了可以通过 /var/log/cuda-installer.log 查看具体信息 less /var/log/cuda-installer.log # 如果成功了会安装到 /usr/local/cuda下可以检查一下 ls /usr/local/cuda # 添加相应的 PATH 和 LD_LIBRARY_PATH echo export LD_LIBRARY_PATH/usr/local/cuda/lib64:$LD_LIBRARY_PATH ~/.bashrc echo export PATH/usr/local/cuda/bin:$PATH ~/.bashrc # 安装 TensorRT 8.6.1 cd ~/Workspace/tmp wget https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/secure/8.6.1/tars/TensorRT-8.6.1.6.Linux.x86_64-gnu.cuda-12.0.tar.gz tar -xzf TensorRT-8.6.1.6.Linux.x86_64-gnu.cuda-12.0.tar.gz sudo mv TensorRT-8.6.1.6 /usr/local # 添加相应的 PATH 和 LD_LIBRARY_PATH echo export LD_LIBRARY_PATH/usr/local/TensorRT-8.6.1.6/lib:$LD_LIBRARY_PATH ~/.bashrc echo export PATH/usr/local/TensorRT-8.6.1.6//bin:$PATH ~/.bashrc # 注意官网上下载 cudnn 会鉴权所以没法直接用 wget 下请自行用浏览器在官网上搜索下载 # wget https://developer.nvidia.com/downloads/compute/cudnn/secure/8.9.4/local_installers/12.x/cudnn-linux-x86_64-8.9.4.25_cuda12-archive.tar.xz # 假设已经下好文件 cudnn-linux-x86_64-8.9.4.25_cuda12-archive.tar.xz cd ~/Workspace/tmp tar -xvf cudnn-linux-x86_64-8.9.4.25_cuda12-archive.tar.xz sudo mv cudnn-linux-x86_64-8.9.4.25_cuda12-archive /usr/local/cudnn-8.9.4.25 echo export LD_LIBRARY_PATH/usr/local/cudnn-8.9.4.25/lib:$LD_LIBRARY_PATH ~/.bashrc source ~/.bashrc2. Miniconda的安装 在之前的安装完毕且成功的情况下注意Miniconda安装过程中有个步骤是否打开终端激活虚拟环境建议选no因为激活虚拟环境在编译一些工程的时候会缺少依赖比如说编译复杂的大型ROS2工程会报错# 安装 Miniconda参考 https://docs.conda.io/en/latest/miniconda.html​ cd ~/Workspace/tmp​ wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh chmod ax​ Miniconda3-latest-Linux-x86_64.sh ./Miniconda3-latest-Linux-x86_64.sh # 阅读并接受许可协议按 Enter 查看详情输入 yes 接受。​ # 选择安装目录默认是 ~/miniconda3可以直接按 Enter。​ # 是否初始化 Conda输入 yes 让安装程序自动设置 Conda 环境。​ ​ source ~/.bashrc​ # 如果设置环境没成功可以手动设置一下 PATH​ export PATH/home/#username/miniconda3/bin:$PATH​ ​# 如果username是123 命令就是 export PATH/home/123/miniconda3/bin:$PATH​ # 验证 conda 是否安装成功​ conda --versionyolov8的C使用Cuda给矩阵乘法、卷积运算等地层计算提供计算内核、TensorRT根据输入做图优化并采用使用适当模型精度进行计算最终把算子调用映射到cuDNN/CUDA内核执行、cuDNN针对卷积、池化、归一化、RNN等深度学习常用算子做高度优化大部分卷积和激活函数的计算都是通过 cuDNN 调用 CUDA kernel 来完成的1. github上有个大神开源了yolov8的使用非常好用链接https://github.com/triple-Mu/YOLOv8-TensorRTa. 要求熟练知道CMakeLists.txt的配置和使用因为需要将CUDA Tensor-RT cuDNN的链接改成和自己电脑环境中相同的大神的readme写的非常清楚我按照readme指导的走运行csrc/detect/end2endb. 先编译通过修改CMakeLists如果你的配置和ubuntu22.04 安装Cuda TensorRT Cudnn Miniconda这部分配置完全相同那么可以参考我的CMakeLists:cmake_minimum_required(VERSION 3.12) # 设置 CUDA 架构和编译器 set(CMAKE_CUDA_ARCHITECTURES 60 61 62 70 72 75 86 89 90) set(CMAKE_CUDA_COMPILER /usr/local/cuda/bin/nvcc) project(yolov8 LANGUAGES CXX CUDA) # C 标准 set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -stdc14 -O3) set(CMAKE_BUILD_TYPE Release) option(CUDA_USE_STATIC_CUDA_RUNTIME OFF) # 添加自定义模块路径如果有 list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) # 查找 CUDA find_package(CUDA REQUIRED) message(STATUS CUDA_LIBRARIES: ${CUDA_LIBRARIES}) message(STATUS CUDA_INCLUDE_DIRS: ${CUDA_INCLUDE_DIRS}) # 查找 OpenCV find_package(OpenCV REQUIRED) message(STATUS OpenCV_LIBS: ${OpenCV_LIBS}) message(STATUS OpenCV_INCLUDE_DIRS: ${OpenCV_INCLUDE_DIRS}) # TensorRT 手动路径配置 set(TENSORRT_ROOT /usr/local/TensorRT-8.6.1.6) set(TensorRT_INCLUDE_DIRS ${TENSORRT_ROOT}/include) set(TENSORRT_LIBS /usr/local/TensorRT-8.6.1.6/targets/x86_64-linux-gnu/lib/libnvinfer.so /usr/local/TensorRT-8.6.1.6/targets/x86_64-linux-gnu/lib/libnvinfer_plugin.so ) # 所有 include 路径 list(APPEND ALL_INCLUDE_DIRS ${CUDA_INCLUDE_DIRS} ${OpenCV_INCLUDE_DIRS} ${TensorRT_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/include ) # 所有库 list(APPEND ALL_LIBS ${CUDA_LIBRARIES} ${OpenCV_LIBRARIES} ${TensorRT_LIBRARIES} ) # 打印调试信息 message(STATUS ALL_INCLUDE_DIRS: ${ALL_INCLUDE_DIRS}) message(STATUS ALL_LIBS: ${ALL_LIBS}) # 添加可执行文件 add_executable( ${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp ${CMAKE_CURRENT_SOURCE_DIR}/include/yolov8.hpp ${CMAKE_CURRENT_SOURCE_DIR}/include/common.hpp ) # 包含目录 target_include_directories( ${PROJECT_NAME} PUBLIC ${ALL_INCLUDE_DIRS} ) # 链接库 target_link_libraries( ${PROJECT_NAME} PRIVATE ${ALL_LIBS} ) target_link_libraries(${PROJECT_NAME} PRIVATE ${TENSORRT_LIBS})c. 转换出可用模型 这步实现参考帖子https://blog.csdn.net/m0_64293675/article/details/141165503?spm1001.2014.3001.5502创建虚拟环境conda create -n my_yolov8 python3.9激活虚拟环境conda activate my_yolov8在虚拟环境中安装pytorch这里面的cuda版本和之前安装的不冲突直接使用下面命令安装就可以了pip install torch1.13.1cu116 torchvision0.14.1cu116 torchaudio0.13.1 --extra-index-url https://download.pytorch.org/whl/cu116完成安装后可以在终端中输入下面命令查看是否安装成功python import torch print(torch.cuda.is_available(),torch.version.cuda)成功之后在虚拟环境中安装yolov8建议直接用清华大学的镜像安装# 安装方式1官方源安装 pip install ultralytics # 安装方式2使用清华大学的镜像源安装 pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple/检查yolov8是否安装成功python import ultralytics ultralytics.checks()或者使用下面的命令对官方例子图片进行预测yolo predict modelyolov8n.pt sourcehttps://ultralytics.com/images/bus.jpg预测结果的保存位置会在终端打印出来在哪个路径下打开终端 执行以上命令最终执行结果就会在该路径下我在/home/i/Workspace/yolov8下运行的最终预测结果保存在/home/i/Workspace/yolov8/runs/detect/predict如图所示开始转换模型转换之前可以把*ultralytics克隆到本地其中有yolov8n.pt必须在虚拟环境激活的情况下batch1通常用于实时系统识别(大神git中提供的代码是基于batch1运行的)4/8/16用于视频的识别yolo export modelyolov8n.pt formatonnx batch1 yolo export modelyolov8n.pt formatonnx batch4 yolo export modelyolov8n.pt formatonnx batch8 yolo export modelyolov8n.pt formatonnx batch16之后将onnx模型转engine过程耗时比较长我的1060大概5分钟以内终端打印 PASSED代表转换成功–fp16代表模型精度trtexec --onnxyolov8n.onnx --workspace4096 --fp16 --dumpLayerInfo --saveEnginebest.engined.代码运行编译通过之后将best.engine复制到end2end/build中并整理几张图片放到一个文件夹data里面 之后在以下路径YOLOv8-TensorRT/csrc/detect/end2end/build打开终端输入以下命令运行./yolov8 best.engine data/street.jpg如果成功我这里在原本的代码里面修改了一部分内容这样能打印出识别到的几个目标的位置信息x y 宽度w 高度h 置信度score 等内容void YOLOv8::postprocess(std::vectorObject objs) { objs.clear(); auto* output static_castfloat*(this-host_ptrs[0]); auto dw this-pparam.dw; auto dh this-pparam.dh; auto width this-pparam.width; auto height this-pparam.height; auto ratio this-pparam.ratio; const int row_len 6; // 每个目标占 6 个 float const int max_objs 1000; // engine 输出数组最大长度 // 注意这个值要和 engine 输出长度一致 for (int i 0; i max_objs; i) { float* ptr output i * row_len; float score ptr[4]; if(score 0.01f) // 置信度小于阈值就跳过 continue; float x0 clamp((ptr[0] - dw) * ratio, 0.f, width); float y0 clamp((ptr[1] - dh) * ratio, 0.f, height); float x1 clamp((ptr[2] - dw) * ratio, 0.f, width); float y1 clamp((ptr[3] - dh) * ratio, 0.f, height); Object obj; obj.rect.x x0; obj.rect.y y0; obj.rect.width x1 - x0; obj.rect.height y1 - y0; obj.prob score; obj.label static_castint(ptr[5]); std::cout Object objs.size() : x obj.rect.x y obj.rect.y w obj.rect.width h obj.rect.height score obj.prob label obj.label std::endl; objs.push_back(obj); } }成功运行后终端输出Object 0: x580.706 y305.095 w36.3693 h106.25 score0.764892 label0 Object 1: x620.073 y310.25 w33.3716 h99.6809 score0.688364 label0 Object 2: x847.604 y323.74 w35.8441 h99.7534 score0.643329 label0 Object 3: x819.02 y312.895 w28.1242 h87.8747 score0.641422 label0 Object 4: x740.895 y315.29 w25.9573 h63.9819 score0.625209 label0 Object 5: x160.731 y329.927 w25.4992 h56.9347 score0.608885 label0 Object 6: x514.092 y313.593 w21.3784 h66.1815 score0.569015 label0 Object 7: x878.064 y327.165 w25.5585 h67.5606 score0.525947 label0 Object 8: x665.528 y318.699 w17.5478 h50.5409 score0.488672 label0 Object 9: x794.88 y330.446 w20.6612 h45.0475 score0.333178 label0 Object 10: x683.809 y322.792 w19.1234 h46.5159 score0.318697 label0 Object 11: x446.304 y320.658 w16.3049 h42.7712 score0.318167 label0 Object 12: x388.238 y321.909 w17.7373 h45.5833 score0.313525 label0