yolov8实战第六天——yolov8 TensorRT C++ 部署——(踩坑,平坑,保姆教程)

这篇具有很好参考价值的文章主要介绍了yolov8实战第六天——yolov8 TensorRT C++ 部署——(踩坑,平坑,保姆教程)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C++ 结合 TensorRT 部署深度学习模型有几个关键优势,这些优势在各种工业和商业应用中极其重要:

  1. 高效的性能:TensorRT 通过优化深度学习模型来提高推理速度,减少延迟。这对于实时处理应用(如视频分析、机器人导航等)至关重要。

  2. 降低资源消耗:TensorRT 优化了模型以在GPU上高效运行,这意味着更低的内存占用和更高的吞吐量。对于资源受限的环境或在多任务并行处理的情况下,这是一个显著优势。

  3. 跨平台和硬件兼容性:C++ 是一种跨平台语言,配合 TensorRT,可以在多种硬件和操作系统上部署深度学习模型,包括嵌入式设备和服务器。

  4. 准确性和稳定性:TensorRT 提供了精确的数学和统计方法来减少浮点运算误差,这对于确保深度学习应用的准确性和稳定性至关重要。

  5. 定制和灵活性:使用 C++ 和 TensorRT,开发者可以高度定制他们的深度学习应用。这包括调整模型结构、优化算法和调节性能参数以满足特定需求。

  6. 支持复杂网络和大规模部署:TensorRT 支持最新的深度学习网络结构,并能够处理复杂的计算任务。这对于需要部署大型、复杂网络的工业应用来说是必要的。

  7. 易于集成和扩展:C++ 提供了与其他系统和工具(如数据库、网络服务等)集成的灵活性。此外,TensorRT 也可以轻松与其他NVIDIA工具链(如CUDA、cuDNN等)集成。

 

一、准备

下载YOLOv8项目和Tensorrt部署项目,TensorRT C++代码选择:

https://github.com/xiaocao-tian/yolov8_tensorrt

yolov8参考前几天的ultralytics。

在ultralytics新建weights文件夹,放入yolov8s.pt.

yolov8 c++,yolov8,YOLO,tensorrt,yolov8,部署

将src的gen_wts.py,复制到ultralytics。

运行gen_wts.py,生成 yolov8s.wts.

yolov8 c++,yolov8,YOLO,tensorrt,yolov8,部署 

yolov8 c++,yolov8,YOLO,tensorrt,yolov8,部署 

再将weights复制到 yolov8 TensorRT。

yolov8 c++,yolov8,YOLO,tensorrt,yolov8,部署 

二、环境准备 

1.vs配置

我下载的是vs2022,只安装c++的桌面开发。

踩坑1:特别注意,请先安装Visual Studio 2019,再安装CUDA。这样做的目的是避免在Visual Studio 2019中看不到CUDA runtime模板。CUDA安装过程中,会提供cuda模板插件,如果先下载好Visual Studio 2019的情况下,该插件会自动配置。

平坑1:安装好vs2022后,再重装cuda。
cuda和cudnn安装请看:yolov8实战第一天——yolov8部署并训练自己的数据集(保姆式教程)_yolov8训练自己的数据集-CSDN博客

2.cmake配置

Index of /files

下载:cmake-3.28.0-rc1-windows-x86_64.msi 

安装版本,自己添加环境变量。

yolov8 c++,yolov8,YOLO,tensorrt,yolov8,部署

踩坑2:要验证cmake安装是否成功。 

yolov8 c++,yolov8,YOLO,tensorrt,yolov8,部署 

cmake成功安装。

3.opencv、tensorrt配置

opencv安装:C++实战Opencv第一天——win11下配置vs,opencv环境和运行第一个c++代码(从零开始,保姆教学)-CSDN博客

tensorrt安装:

yolov8实战第三天——yolov8TensorRT部署(python推理)(保姆教学)_yolov8 tensorrt python部署-CSDN博客

踩坑3环境变量的配置

平坑3opencv、tensorrt、cudnn环境变量配置

yolov8 c++,yolov8,YOLO,tensorrt,yolov8,部署

至此,vs,cmake,cuda,cudnn,opencv,tensorrt全部配置完成。 

三、编译

在tensorrt项目中新建build文件夹,然后使用cmake编译,注意tensorrt项目中Cmakelist.txt 

分别配置自己opencv和tensorrt的地址即可。

cmake_minimum_required(VERSION 3.10)

project(yolov8)

# Modify to your path
set(OpenCV_DIR "E:/opencv/opencv/build")  
set(TRT_DIR "E:/TensorRT-8.6.1.6")  

add_definitions(-std=c++11)
add_definitions(-DAPI_EXPORTS)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_BUILD_TYPE Debug)

# setup CUDA
find_package(CUDA REQUIRED)
message(STATUS "libraries: ${CUDA_LIBRARIES}")
message(STATUS "include path: ${CUDA_INCLUDE_DIRS}")
include_directories(${CUDA_INCLUDE_DIRS})

enable_language(CUDA)

include_directories(${PROJECT_SOURCE_DIR}/include)
include_directories(${PROJECT_SOURCE_DIR}/plugin)

# TensorRT
set(TENSORRT_ROOT "E:/TensorRT-8.6.1.6")
include_directories("${TENSORRT_ROOT}/include")
link_directories("${TENSORRT_ROOT}/lib")


# OpenCV
find_package(OpenCV)
include_directories(${OpenCV_INCLUDE_DIRS})

add_library(myplugins SHARED ${PROJECT_SOURCE_DIR}/plugin/yololayer.cu)
target_link_libraries(myplugins nvinfer cudart)

file(GLOB_RECURSE SRCS ${PROJECT_SOURCE_DIR}/src/*.cpp ${PROJECT_SOURCE_DIR}/src/*.cu)
add_executable(yolov8 ${PROJECT_SOURCE_DIR}/src/main.cpp ${SRCS})

target_link_libraries(yolov8 nvinfer)
target_link_libraries(yolov8 cudart)
target_link_libraries(yolov8 myplugins)
target_link_libraries(yolov8 ${OpenCV_LIBS})

在tensorrt项目中新建build文件夹,然后使用cmake编译,填写如图。

yolov8 c++,yolov8,YOLO,tensorrt,yolov8,部署 

yolov8 c++,yolov8,YOLO,tensorrt,yolov8,部署 

 踩坑1:No CUDA toolset found.就是找不到cuda。

The C compiler identification is MSVC 19.38.33133.0
The CXX compiler identification is MSVC 19.38.33133.0
Detecting C compiler ABI info
Detecting C compiler ABI info - done
Check for working C compiler: E:/vs2022/Community/VC/Tools/MSVC/14.38.33130/bin/Hostx64/x64/cl.exe - skipped
Detecting C compile features
Detecting C compile features - done
Detecting CXX compiler ABI info
Detecting CXX compiler ABI info - done
Check for working CXX compiler: E:/vs2022/Community/VC/Tools/MSVC/14.38.33130/bin/Hostx64/x64/cl.exe - skipped
Detecting CXX compile features
Detecting CXX compile features - done
CMake Warning (dev) at CMakeLists.txt:15 (find_package):
  Policy CMP0146 is not set: The FindCUDA module is removed.  Run "cmake
  --help-policy CMP0146" for policy details.  Use the cmake_policy command to
  set the policy and suppress this warning.

This warning is for project developers.  Use -Wno-dev to suppress it.

Found CUDA: D:/CUDA (found version "12.0") 
libraries: D:/CUDA/lib/x64/cudart_static.lib
include path: D:/CUDA/include
CMake Error at D:/cmake/share/cmake-3.28/Modules/CMakeDetermineCompilerId.cmake:529 (message):
  No CUDA toolset found.
Call Stack (most recent call first):
  D:/cmake/share/cmake-3.28/Modules/CMakeDetermineCompilerId.cmake:8 (CMAKE_DETERMINE_COMPILER_ID_BUILD)
  D:/cmake/share/cmake-3.28/Modules/CMakeDetermineCompilerId.cmake:53 (__determine_compiler_id_test)
  D:/cmake/share/cmake-3.28/Modules/CMakeDetermineCUDACompiler.cmake:135 (CMAKE_DETERMINE_COMPILER_ID)
  CMakeLists.txt:20 (enable_language)


Configuring incomplete, errors occurred!

踩坑3:找不到cudnn。

User
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "E:\Anaconda3\Lib\site-packages\tensorrt\__init__.py", line 127, in <module>
    ctypes.CDLL(find_lib(lib))
                ^^^^^^^^^^^^^
  File "E:\Anaconda3\Lib\site-packages\tensorrt\__init__.py", line 81, in find_lib
    raise FileNotFoundError(
FileNotFoundError: Could not find: cudnn64_8.dll. Is it on your PATH?
Note: Paths searched were:

平坑后:警告不用管。configure:

yolov8 c++,yolov8,YOLO,tensorrt,yolov8,部署

 generate:

yolov8 c++,yolov8,YOLO,tensorrt,yolov8,部署

然后open Project。

踩坑4cmake 点 open Project 没反应 。

平坑4在生成的build中找到yolov8.sln,右键打开方式选择vs2022.

yolov8 c++,yolov8,YOLO,tensorrt,yolov8,部署

yolov8 c++,yolov8,YOLO,tensorrt,yolov8,部署 

解决方案右键属性->选择yolov8. 

 yolov8 c++,yolov8,YOLO,tensorrt,yolov8,部署

yolov8 c++,yolov8,YOLO,tensorrt,yolov8,部署

打开main.cppyolov8 c++,yolov8,YOLO,tensorrt,yolov8,部署yolov8 c++,yolov8,YOLO,tensorrt,yolov8,部署

先注释 表示生成.engine文件。

    //wts_name = "";

注释后直接运行。 

yolov8 c++,yolov8,YOLO,tensorrt,yolov8,部署

yolov8 c++,yolov8,YOLO,tensorrt,yolov8,部署 

 去掉注释,再次执行。

wts_name = "";

yolov8 c++,yolov8,YOLO,tensorrt,yolov8,部署

 视频太短,长视频fps在100左右。

添加fps代码:文章来源地址https://www.toymoban.com/news/detail-849583.html

    while (char(cv::waitKey(1) != 27)) {
        cap >> image;
        if (image.empty()) {
            std::cerr << "Error: Image not loaded or end of video." << std::endl;
            break; // or continue based on your logic
        }
        auto t_beg = std::chrono::high_resolution_clock::now();
        float scale = 1.0;
        int img_size = image.cols * image.rows * 3;
        cudaMemcpyAsync(image_device, image.data, img_size, cudaMemcpyHostToDevice, stream);
        preprocess(image_device, image.cols, image.rows, device_buffers[0], kInputW, kInputH, stream, scale);
        context->enqueue(kBatchSize, (void**)device_buffers, stream, nullptr);
        cudaMemcpyAsync(output_buffer_host, device_buffers[1], kBatchSize * kOutputSize * sizeof(float), cudaMemcpyDeviceToHost, stream);
        cudaStreamSynchronize(stream);

        std::vector<Detection> res;
        NMS(res, output_buffer_host, kConfThresh, kNmsThresh);
        // 计算FPS
        frame_counter++;
        if (frame_counter % 10 == 0) { // 每10帧更新一次FPS
            auto t2 = std::chrono::high_resolution_clock::now();
            auto time_span = std::chrono::duration_cast<std::chrono::duration<double>>(t2 - t1);
            fps = frame_counter / time_span.count();
            t1 = t2;
            frame_counter = 0;
        }
        drawBbox(image, res, scale, labels);
        // 将FPS绘制到图像上
        cv::putText(image, "FPS: " + std::to_string(fps), cv::Point(10, 30), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(0, 255, 0), 2);
        auto t_end = std::chrono::high_resolution_clock::now();
        
        cv::imshow("Inference", image);
        float total_inf = std::chrono::duration<float, std::milli>(t_end - t_beg).count();
        std::cout << "Inference time: " << int(total_inf) << std::endl;
    }
    //    cv::waitKey();
    cv::destroyAllWindows();

到了这里,关于yolov8实战第六天——yolov8 TensorRT C++ 部署——(踩坑,平坑,保姆教程)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • linux下 yolov8 tensorrt模型部署

    linux下 yolov8 tensorrt模型部署

    TensorRT系列之 Windows10下yolov8 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov8 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov7 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov6 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov5 tensorrt模型加速部署 TensorRT系列之 Linux下 yolox tensorrt模型加速部

    2024年02月08日
    浏览(10)
  • yolov8量化部署(基于openvino和tensorrt)

    yolov8量化部署(基于openvino和tensorrt)

    环境配置: 将pytorch模型转为openvino模型: python量化脚本:(改编自https://github.com/openvinotoolkit/openvino_notebooks/blob/main/notebooks/230-yolov8-optimization/230-yolov8-optimization.ipynb) python推理: C++推理:(openvino库读取xml文件在compile_model时报错,暂时不明原因,改用onnx格式推理) 参考:h

    2024年02月09日
    浏览(11)
  • YOLOv8 Tensorrt Python/C++部署教程

    YOLOv8 Tensorrt Python/C++部署教程

    https://www.bilibili.com/video/BV1Pa4y1N7HS https://github.com/Monday-Leo/YOLOv8_Tensorrt 基于 Tensorrt 加速 Yolov8 ,本项目采用 ONNX转Tensorrt 方案 支持 Windows10 和 Linux 支持 Python/C++ Tensorrt 8.4.3. Cuda 11.6 Cudnn 8.4.1 onnx 1.12.0 安装 yolov8 仓库,并下载官方模型。 使用官方命令 导出ONNX模型 。 使用本仓库

    2023年04月25日
    浏览(43)
  • YOLOv8在NX上的tensorrt的加速部署(60帧率)

    YOLOv8在NX上的tensorrt的加速部署(60帧率)

    所有过程均可以参考本人所写的文章 (1)虚拟环境工具 MInforge3-Linux-aarch64 Jetson 平台都是RAM架构,平常的conda都是基于X86架构平台的。环境搭建参考文章 (2)YOLOv8_ros代码,采用自己创建的yolov_ros代码。yolov8_ros参考文章 (3)jetpack 环境(本篇文章是 jetpack5.1.2 )jetpack升级参考

    2024年01月18日
    浏览(12)
  • 【YOLO】Windows 下 YOLOv8 使用 TensorRT 进行模型加速部署

    【YOLO】Windows 下 YOLOv8 使用 TensorRT 进行模型加速部署

    本文全文参考文章为 win10下 yolov8 tensorrt模型加速部署【实战】 本文使用的代码仓库为 TensorRT-Alpha 注:其他 Yolov8 TensorRT 部署项目:YOLOv8 Tensorrt Python/C++部署教程 安装Visual Studio 2019或者Visual Studio 2022、Nvidia驱动 安装cuda,cudnn、opencv、tensorrt并进行相应的环境配置,这里不做配

    2024年02月11日
    浏览(12)
  • yolov8n 瑞芯微RKNN、地平线Horizon芯片部署、TensorRT部署,部署工程难度小、模型推理速度快

    yolov8n 瑞芯微RKNN、地平线Horizon芯片部署、TensorRT部署,部署工程难度小、模型推理速度快

      特别说明:参考官方开源的yolov8代码、瑞芯微官方文档、地平线的官方文档,如有侵权告知删,谢谢。   模型和完整仿真测试代码,放在github上参考链接 模型和代码。   因为之前写了几篇yolov8模型部署的博文,存在两个问题:部署难度大、模型推理速度慢。该篇解

    2024年01月16日
    浏览(15)
  • 【TensorRT】TensorRT 部署Yolov5模型(C++)

    【TensorRT】TensorRT 部署Yolov5模型(C++)

      该项目代码在本人GitHub代码仓库开源,本人GitHub主页为:GitHub   项目代码:   NVIDIA TensorRT™ 是用于高性能深度学习推理的 SDK,可为深度学习推理应用提供低延迟和高吞吐量。详细安装方式参考以下博客: NVIDIA TensorRT 安装 (Windows C++)   经典的一个TensorRT部署模型步骤为

    2023年04月26日
    浏览(9)
  • 【YOLOv5】LabVIEW+TensorRT的yolov5部署实战(含源码)

    【YOLOv5】LabVIEW+TensorRT的yolov5部署实战(含源码)

    ‍‍🏡博客主页: virobotics的CSDN博客:LabVIEW深度学习、人工智能博主 🎄所属专栏:『LabVIEW深度学习实战』 🍻上期文章: 手把手教你使用LabVIEW TensorRT实现图像分类实战(含源码) 📰如觉得博主文章写的不错或对你有所帮助的话,还望大家多多支持呀! 欢迎大家✌关注、

    2024年02月14日
    浏览(9)
  • 使用Tensorrt部署,C++ API yolov7_pose模型

    使用Tensorrt部署,C++ API yolov7_pose模型

    虽然标题叫部署yolov7_pose模型,但是接下来的教程可以使用Tensorrt部署任何pytorch模型。 仓库地址:https://github.com/WongKinYiu/yolov7/tree/pose 系统版本:ubuntu18.4 驱动版本:CUDA Version: 11.4 在推理过程中,基于 TensorRT 的应用程序的执行速度可比 CPU 平台的速度快 40 倍。借助 TensorRT,您

    2024年02月05日
    浏览(8)
  • 在ubuntu20.04上利用tensorrt部署yolov5(C++和Python接口)

    在ubuntu20.04上利用tensorrt部署yolov5(C++和Python接口)

    在ubuntu20.04上利用tensorrt部署yolov5(C++和Python接口)‘下个博客是yolov7的部署’ 一、CUDA、CUDNN、TensorRT以及OpenCV安装 CUDA安装 CUDNN安装 TensorRT安装 OpenCV安装 二、YOLOv5部署 文件准备 模型文件转换 3.生成wts文件 4.生成部署引擎 5.端侧部署模型测试图片 6.视频检测 7.安卓部署 8.C+

    2024年02月02日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包