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模型部署

    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日
    浏览(41)
  • 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日
    浏览(77)
  • 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日
    浏览(45)
  • 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日
    浏览(30)
  • 【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日
    浏览(34)
  • yolov8n 瑞芯微RKNN、地平线Horizon芯片部署、TensorRT部署,部署工程难度小、模型推理速度快

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

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

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

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

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

    2024年02月14日
    浏览(31)
  • 使用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日
    浏览(44)
  • 在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日
    浏览(64)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包