我的编程空间,编程开发者的网络收藏夹
学习永远不晚

YOLOv5 Tensorrt Python/C++部署

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

YOLOv5 Tensorrt Python/C++部署

B站视频教程

https://www.bilibili.com/video/BV113411J7nk?p=1

Github仓库地址

https://github.com/Monday-Leo/Yolov5_Tensorrt_Win10

项目简介

  • 基于Tensorrt加速Yolov5 6.0
  • 支持Windows10
  • 支持Python/C++

环境说明

  • Tensorrt 8.2.1.8
  • Cuda 10.2 Cudnn 8.2.1(特别注意需安装两个cuda10.2补丁)
  • Opencv 3.4.6
  • Cmake 3.17.1
  • VS 2017
  • GTX1650

运行案例(Windows)

yolov5 release v6.0下载.pt模型,这里以yolov5s.pt为例。下载yolov5 6.0源代码和本仓库代码

git clone -b v6.0 https://github.com/ultralytics/yolov5.gitgit clone https://github.com/Monday-Leo/Yolov5_Tensorrt_Win10

或直接到6.0页面download zip。

生成WTS模型

将仓库中的gen_wts.py和刚才下载好的yolov5s.pt拷贝至yolov5 6.0的目录下

运行

python gen_wts.py -w yolov5s.pt -o yolov5s.wts

-w参数为输入pt模型路径,-o参数为输出wts模型的路径。

运行完毕后,yolov5目录下会生成wts模型,这个模型用于之后转换为tensorrt专用的序列化模型。

配置C++依赖

OpencvTensorrt如果已经安装完成,可以跳过下述步骤。

Opencv配置方法

在OpenCV官网下载适用于Windows平台的3.4.6版本 下载地址

运行下载的可执行文件,将OpenCV解压至指定目录,例如 D:\projects\opencv

我的电脑->属性->高级系统设置->环境变量,在系统变量中找到Path(如没有,自行创建),并双击编辑,将opencv路径填入并保存,如D:\projects\opencv\build\x64\vc15\bin

Tensorrt配置方法

在tensorrt官网下载适用于Windows平台的版本 下载地址

将TensorRT/lib下所有lib复制到cuda/v10.2/lib/x64下,将TensorRT/lib下所有dll复制到cuda/v10.2/bin下,将TensorRT/include下所有.h文件复制到cuda/v10.2/include下

我的电脑->属性->高级系统设置->环境变量,在系统变量中找到Path(如没有,自行创建),并双击编辑,将TensorRT/lib路径填入并保存,如G:\c++\TensorRT-8.2.1.8\lib

打开本仓库的CMakeLists.txt,修改OpencvTensorrtdirent.h的目录,其中dirent.h在本仓库的include中,须绝对路径。修改arch=compute_75;code=sm_75,参考https://developer.nvidia.com/zh-cn/cuda-gpus,我的GPU为GTX1650,计算能力7.5,所以这边设置为arch=compute_75;code=sm_75

cmake_minimum_required(VERSION 2.6)project(yolov5) #change to your own path##################################################set(OpenCV_DIR "G:\\c++\\paddle_test\\opencv\\build")  set(TRT_DIR "G:\\c++\\TensorRT-8.2.1.8")  set(Dirent_INCLUDE_DIRS "C:\\Users\\LHY\\Desktop\\yolov5\\tensorrt\\include")##################################################add_definitions(-std=c++11)add_definitions(-DAPI_EXPORTS)option(CUDA_USE_STATIC_CUDA_RUNTIME OFF)set(CMAKE_CXX_STANDARD 11)set(CMAKE_BUILD_TYPE Debug)set(THREADS_PREFER_PTHREAD_FLAG ON)find_package(Threads)# setup CUDAfind_package(CUDA REQUIRED)message(STATUS "    libraries: ${CUDA_LIBRARIES}")message(STATUS "    include path: ${CUDA_INCLUDE_DIRS}")include_directories(${CUDA_INCLUDE_DIRS})include_directories(${Dirent_INCLUDE_DIRS}) #change to your GPU own compute_XX###########################################################################################set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};-std=c++11;-g;-G;-gencode;arch=compute_75;code=sm_75)###############################################################################################enable_language(CUDA)  # add this line, then no need to setup cuda path in vs####include_directories(${PROJECT_SOURCE_DIR}/include)include_directories(${TRT_DIR}\\include)# -D_MWAITXINTRIN_H_INCLUDED for solving error: identifier "__builtin_ia32_mwaitx" is undefinedset(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Ofast -D_MWAITXINTRIN_H_INCLUDED")# setup opencvfind_package(OpenCV QUIET    NO_MODULE    NO_DEFAULT_PATH    NO_CMAKE_PATH    NO_CMAKE_ENVIRONMENT_PATH    NO_SYSTEM_ENVIRONMENT_PATH    NO_CMAKE_PACKAGE_REGISTRY    NO_CMAKE_BUILDS_PATH    NO_CMAKE_SYSTEM_PATH    NO_CMAKE_SYSTEM_PACKAGE_REGISTRY)message(STATUS "OpenCV library status:")message(STATUS "    version: ${OpenCV_VERSION}")message(STATUS "    libraries: ${OpenCV_LIBS}")message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")include_directories(${OpenCV_INCLUDE_DIRS})link_directories(${TRT_DIR}\\lib)add_executable(yolov5 ${PROJECT_SOURCE_DIR}/yolov5.cpp ${PROJECT_SOURCE_DIR}/yololayer.cu ${PROJECT_SOURCE_DIR}/yololayer.h ${PROJECT_SOURCE_DIR}/preprocess.cu) target_link_libraries(yolov5 "nvinfer" "nvinfer_plugin")  target_link_libraries(yolov5 ${OpenCV_LIBS})     target_link_libraries(yolov5 ${CUDA_LIBRARIES})  target_link_libraries(yolov5 Threads::Threads)     

Cmake过程

在本仓库目录下新建一个build文件夹

打开Cmake,选择本仓库目录,以及新建的build目录,再点击左下方configure按钮。

选择自己的Visual Studio版本,如2017,第二个框中选择x64,之后点击finish

会自动加载CMakeLists.txt,添加库,正常运行如下

若出现红色警告,则需要修改框中信息。例如,未找到cuda目录,则需要点击上图红色框,添加上自己的cuda路径,再点击configure。一切正常之后点击generate,最后点击open project。

编译

打开项目后,在左侧解决方案资源管理器中,一次展开yolov5,header files,打开yololayer.h文件,特别注意修改文件中的

static constexpr int CLASS_NUM = 80;static constexpr int INPUT_H = 640;  // yolov5's input height and width must be divisible by 32.static constexpr int INPUT_W = 640;

修改为自己的模型类别数,输入大小,若没有修改,会运行报错!!

将界面上方Debug改为Release,右键yolov5项目,点击重新生成。

编译成功,没有报错!编译成功会打开build/Release,可以看到生成的exe可执行文件。

C++运行

将第一步生成的yolov5s.wts模型复制到exe的文件夹中,在这个目录下打开cmd输入

yolov5 -s yolov5s.wts yolov5s.engine s

我们这边使用的是s模型,最后则输入s,同理若为m模型,最后一个参数则需要改成m

正常运行,此时程序在将wts转换为engine序列化模型,需要等待预计10-20分钟左右。生成engine完成后,会在文件夹下出现yolov5s.engine模型。将本仓库的pictures文件夹复制到exe文件夹下,尝试预测是否正确,输入:

yolov5 -d yolov5s.engine ./pictures

查看保存的图片,受否输出正确的框。

Python部署

在C++部署正确之后,尝试使用python部署。C++的代码预测只能通过文件夹内的图片,对于视频流或摄像头预测需要修改代码,且目前很多项目都是基于python语言完成,故本仓库提供了python的部署方法。在刚才的C++工程中右键yolov5,点击属性。

修改上述图片两行,都改为DLL,第一个需要手动输入。右键项目,重新生成,文件夹下会出现yolov5.dll,将本仓库的python_trt.py复制到dll文件夹下。

设置模型路径,dll路径和想要预测的图片路径,特别注意模型路径需要加b’'!!

det = Detector(model_path=b"./yolov5s.engine",dll_path="./yolov5.dll")  # b'' is neededimg = cv2.imread("./pictures/zidane.jpg")

直接运行python_trt.py即可,python预测的最大优势在于支持了numpy格式的图片,极易融合进项目中。

参考资料

https://github.com/wang-xinyu/tensorrtx/tree/master/yolov5

来源地址:https://blog.csdn.net/weixin_45747759/article/details/124076582

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

YOLOv5 Tensorrt Python/C++部署

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Qt结合OpenCV怎么部署yolov5

本篇内容主要讲解“Qt结合OpenCV怎么部署yolov5”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Qt结合OpenCV怎么部署yolov5”吧!一、新建项目 UI设计二、代码部分 main
2023-06-29

YOLOv5性能优化与部署实例分析

本篇内容介绍了“YOLOv5性能优化与部署实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!模型压缩为了使YOLOv5车牌识别系统在资源
2023-07-05

YOLOv5模型优化与部署的方法是什么

今天小编给大家分享一下YOLOv5模型优化与部署的方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。模型优化策略在实际
2023-07-05

YOLOv5部署到web端详细过程(flask+js简单易懂)

YOLOv5是一个目标检测模型,Flask是一个Python的Web框架,下面这篇文章主要给大家介绍了关于YOLOv5部署到web端(flask+js简单易懂)的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2023-05-17

Python环境部署

安装python2.7,安装在默认位置;配置python的Path环境变量C:\Python27;在cmd中输入python可以看到python安装成功,可以直接在cmd中运行python代码;用命令行写代码时无法保存代码,我们需要保存代码
2023-01-31

IIS 部署 Python Django

知道的,百度上搜出来的东西质量令人唏嘘。当你求助的时候多半还得靠自己,或者靠Google介入正题,详细来一遍流程吧当然,我是用Visual Studio 2019 来编辑开发Django项目的,如果你也是那么巧了。这可以帮你如果你Djang
2023-01-30

YOLOv5车牌识别实战教程(四)模型优化与部署

这篇文章主要介绍了YOLOv5车牌识别实战教程(四)模型优化与部署,在这个教程中,我们将一步步教你如何使用YOLOv5进行车牌识别,帮助你快速掌握YOLOv5车牌识别技能,需要的朋友可以参考下
2023-05-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录