YOLOv5 Tensorrt dll库Python部署

本文详细介绍了如何在Windows上配置TensorRT 7环境,用于加速YOLOv5模型,并指导了从yolov5s.wts模型生成、CMake配置到C++和Python部署的全过程,适合深度学习开发者快速上手。
摘要由CSDN通过智能技术生成

简介

  • 基于Tensorrt加速Yolov5 6.0

目录

简介

环境配置

TensorRT7

环境配置

 测试

 yolov5s.wts生成

Cmake过程

 编译

C++运行

Python部署


环境配置

TensorRT7

环境配置

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

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

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

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

 

 VS2019配置
此处对sampleMNIST示例进行测试,进入到A:\tensorrt_tar\TensorRT7.0.0.11\samples\sampleMNIST目录下,选择sample_mnist.sln用vs2019打开文件
然后依次点击 项目—>属性—>VC++目录

A:\tensorrt_tar\TensorRT-7.0.0.11\lib

分别加入可执行文件目录及库目录里

A:\tensorrt_tar\TensorRT-7.0.0.11\include

加入C/C++ —> 常规 —> 附加包含目录
将nvinfer.lib、nvinfer_plugin.lib、nvonnxparser.lib和nvparsers.lib加入链接器–>输入–>附加依赖项

 

 

 测试

选取Release x64平台

 显示成功后,便点击 调试—>开始执行(不调试)(H)

image-20210826222446596

 最后生成如下图所示结果,则测试成功

image-20210826222500798

 yolov5s.wts生成

将gen_wts.py文件复制到开始下载的YOLOv5项目(yolov5-6.0)文件夹中

 在此文件夹中cmd打开激活虚拟环境

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

 运行完毕后,目录下会生成wts模型

Cmake过程

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

 修改  #1 #2 #3 文件目录

cmake_minimum_required(VERSION 2.6)

project(yolov5) 

#change to your own path
##################################################
set(OpenCV_DIR "A:\opencv455\build")  #1
set(TRT_DIR "A:\tensorrt_tar\TensorRT-7.0.0.11")   #2
set(Dirent_INCLUDE_DIRS "A:\tensorrt_tar\Yolov5_Tensorrt_Win10-master\include") #3
##################################################

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 CUDA
find_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_61;code=sm_61)
###########################################################################################

####
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 undefined
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Ofast -D_MWAITXINTRIN_H_INCLUDED")

# setup opencv
find_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)     

点击configure。

第二个框中选择x64,之后点击finish

 

一切正常之后点击generate,

 

最后点击open project。

 

 编译

打开项目后,在左侧解决方案资源管理器中,一次展开yolov5,header files,打开yololayer.h文件,特别注意修改文件中的修改为自己的模型类别数,输入大小,若没有修改,会运行报错!!将界面上方Debug改为Release,右键yolov5项目,点击重新生成。

 

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

 

C++运行

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

yolov5 -s renyuanbest.wts renyuanbest.engine s

 正常运行,此时程序在将wts转换为engine序列化模型,需要等待预计10-20分钟左右。

生成engine完成后,会在文件夹下出现renyuanbest.engine模型。将pictures文件夹复制到exe文件夹下,尝试预测是否正确,输入:

yolov5 -d renyuanbest.engine ./pictures

Python部署

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

 

 重新生成,文件夹下会出现yolov5.dll,将python_trvideo.py复制到dll文件夹下。

设置模型路径,dll路径特别注意模型路径需要加b’'!!

det = Detector(model_path=b"./renyuanbest.engine",dll_path="./yolov5.dll")  # b'' is needed

直接运行python_trtvideo.py即可

参考资料

YOLOv5 Tensorrt Python/C++部署_一笑奈何LHY的博客-CSDN博客_yolov5部署到c++

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值