YOLOv5加速部署:激斗tensorrtx踩坑指南!(win10+python/c++)

news/2024/11/19 13:32:36/

由于项目需要,近日来研究了一下yolov5的tensorrt的c++/python部署,和各种小bug激斗了十余小时,但网络上的几乎所有教程都忽略了一些小细节,造成了很多的麻烦。但经本人不断试错,最终终于成功生成!本踩坑经验仅适用于win10+tensorrtx+YOLOv5的c++/python版tensorrt部署方式,并在文章里附上本人运行成功的具体配置, 外网下载资源不易,本文一并附上下载好的cuda,cudnn,opencv等安装包和coco/widerface数据集的int8量化校准数据集coco_calib.zip/widerface_calib.zip的网盘链接

基础的安装可以参考网络上的教程,本文章主要分享本人配置过程中的注意事项,和网络上没人提及的错误解决办法。

一:安装cuda, cudnn,tensorrt,opencv等环境包要严格对照版本

这是第一个坑,如果你想用tensorrt7,那就要安装7.xx版本号的cudnn, 同时也对应好cuda的版本。

例如:我安装的cuda是10.2, 然后安装了cudnn7.6.5(forcuda10.2), 最后安装了tensorrt7

如果你和我一样选择10.2的cuda,但是想使用tensorrt8(最新), 那就要安装8.xx的cudnn。

注意!:这一步非常重要,版本错误将导致后面编译疯狂失败!强烈建议严格按照我的版本来:

cuda:10.2

cudnn:7.6.5(for cuda10.2)

tensorrt:7.00.11

opencv:3.4.14(一定要选择3.x.xx,实测4版本无法通过camke编译!)

vs:2019(2022版本编译失败 ps:但暂时不知道是不是vs2022的锅,可能是opencv4的锅)

cmake:3.26.0(这个其实没什么影响,我直接下载的最新版本)

本次部署我是用的外网资源整合在这,可以自行下载

链接: https://pan.baidu.com/s/1Tuuu4GsZ0r8R42ONwOCCJA?pwd=nxnb
提取码:nxnb

二:按照想部署的yolo版本下载对应版本的tensorrtx

https://github.com/wang-xinyu/tensorrtx
此链接直接进入下载的是master版本,要切换tag到你想部署的yolo版本下载对应版本的代码
https://github.com/wang-xinyu/tensorrtx/tree/yolov5-v5.0
这是我使用的部署yolov5 5.0的代码

三:修改CMakeLists.txt及编译

万恶的一步!!!主要的时间都卡在cmake编译这里,其实是因为前面出错的话也可能不会体现出来,一般在这里出错都是由于前面没有严格按步骤来,再次呼吁,一定要严格按照版本号、步骤配置!

vs编译报错:error MSB3721或error yololayer.cu相关:

解决办法:要在CMakeLists.txt中添加一句:add_definitions(-DAPI_EXPORTS)

vs编译报错:error“dirent.h”: No such file or directory:

解决办法:复制一份dirent.h放在F:\PyCharmProjects\tensorrtx-yolov5-v5.0\yolov5\include

网上教程告诉放在F:\PyCharmProjects\tensorrtx-yolov5-v5.0\include,我建议两边都放

最后贴上我编译成功的CMakeLists.txt,其中#2#3要修改成你自己配置的路径

cmake_minimum_required(VERSION 2.6)project(yolov5) # 1
set(OpenCV_DIR "F:\\opencv3\\opencv\\build")  #2
set(TRT_DIR "F:\\tensorrt_tar\\TensorRT-7.0.0.11")  #3add_definitions(-std=c++11)
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)add_definitions(-DAPI_EXPORTS)
# 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)  # 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 QUIETNO_MODULENO_DEFAULT_PATHNO_CMAKE_PATHNO_CMAKE_ENVIRONMENT_PATHNO_SYSTEM_ENVIRONMENT_PATHNO_CMAKE_PACKAGE_REGISTRYNO_CMAKE_BUILDS_PATHNO_CMAKE_SYSTEM_PATHNO_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)   #4target_link_libraries(yolov5 "nvinfer" "nvinfer_plugin")   #5
target_link_libraries(yolov5 ${OpenCV_LIBS})          #6
target_link_libraries(yolov5 ${CUDA_LIBRARIES})   #7
target_link_libraries(yolov5 Threads::Threads)       #8

四:cmake编译过程中出现的红字不要怕

下面图中的红字警告均是在成功的过程中生成的,所以别看大段大段的红字看着吓人,但实际没有影响。

五:运行阶段

直到这里出现生成成功2个, 失败0个巴拉巴拉就算是基本完成了,这时在F:\PyCharmProjects\tensorrtx-yolov5-v5.0\yolov5\build\Release目录下会出现一个yolov5.exe和其他几个文件

先激活conda环境

conda activate trt

cd到生成解决方案的release目录(生成解决方案一定要使用release模式)

F:
cd F:\PyCharmProjects\tensorrtx-yolov5-v5.0\yolov5\build\Release

之后打开cmd运行如下命令来序列化yolov5s.wts文件生成yolov5s.engine

yolov5.exe -s yolov5s.wts yolov5s.engine s

下图的报错:Parameter check failed

解决方法:将yolov5s.wts放到cmd的运行目录下(F:\PyCharmProjects\tensorrtx-yolov5-v5.0\yolov5\build\Release)

成功生成yolov5s.engine之后,在运行目录下新建一个sample文件夹,搞几张图片测试一下

yolov5.exe -d yolov5s.engine ./samples

没问题的话应该没什么问题了,本机8代i5+gtx1060运行时间大概是14ms

(此卡不支持fp16,所以速度还是fp32的速度;int8精度下降太高,暂时不考虑)

六:python部署

本文使用python调用dll的方式实现python部署

使用python部署需要使用网盘里的yolov5_tensorrt_win10-master而不是tensorrtx
注意该方案需使用yolov5 6.0版本!
使用教程: https://www.bilibili.com/video/BV113411J7nk?p=1

七:写在最后

本文介绍的方式为tensorrt三种部署工作流中最复杂也是运行速度最快的,但如果使用了自己编写的模块就不能借用大神手搭api的方式了,个人建议还是用onnx的方式进行部署。


http://www.ppmy.cn/news/911920.html

相关文章

OpenGL--骨骼动画

理论基础 骨骼蒙皮动画其实现类似人体模型,由节点(关节)树构成,节点间通过骨骼连接,每块骨骼至多一个父节点,父节点带动子骨骼运动。具体是关节带动其对应子骨骼运动从而牵动绑定到其上的皮肤变化。骨骼是刚体不会变形&#xff0…

RSA2验签遭遇异常,请检查公钥格式是否正确。待验签内容不可为空

支付宝支付,上线突然出现这个问题。 2021-09-27 22:54:37 2021-09-27 14:54:37.348 [http-nio-5020-exec-7] INFO com.fastonetech.listener.OrderPayedListener - 支付宝回调,{} 2021-09-27 22:54:37 2021-09-27 14:54:37.348 [http-nio-5020-exec-7]…

POI和POI-TL操作Word

POI操作Word 操作依赖包org.apache.poi,包括poi和poi-ooxml。创建空白Word文件 void poiCreateNewWord() {String path "C:\\Users\\wisdom21111\\Desktop\\";XWPFDocument document new XWPFDocument();try {FileOutputStream out new FileOutputStr…

beagleboneblack(BBB)开发板使用NFS挂载根文件系统,tftp下载镜像与设备树

一、文件下载 交叉编译工具链下载地址 wget -c https://releases.linaro.org/components/toolchain/binaries/6.5-2018.12/arm-linux-gnueabihf/gcc-linaro-6.5.0-2018.12-i686_arm-linux-gnueabihf.tar.xz beagleboneblack内核kernel下载地址,切换到tag为4.19.94-t…

数据结构与算法基础ppt

根据数据结构C语言版第2版书编写。想要电子书的童鞋可以私我 B站学习地址 9.13开始 9.29更新到p118 线性表 2.1线性表的定义和特点 P10 2.2 案例引入 p11 2.3 线性表的类型定义 p12 2.4 线性表的顺序表示和实现1 p13 2.4 线性表的顺序表示和实现2 p14 P15 第02周06–类C语言…

ia笔记总结

HCIA 计算机 使用二进制语言 应用层:人机交互的接口,自然语言转化为编码表示层:编码–>二进制,翻译介质访问控制层:控制硬件物理层:CPU 对等网 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接…

golang打包后在另一台电脑运行报错/lib64/libc.so.6: version `GLIBC_xxxx‘ not found解决方案

前言 最近使用golang打包项目出现个问题报错/lib64/libc.so.6: version GLIBC_xxxx’ not found,很多人都说需要安装GLIBC解决,但是这里有个误区,好像CGO库是依赖glibc的(具体的我也没有考证)就是我根部就没有使用CGO…

jakarta ee_Jakarta EE社区之声:Jakarta EE的未来是什么?

jakarta ee 本月初,Jakarta EE社区成员被邀请参加Jakarta EE社区之声文档 ,该文档重点关注Jakarta EE规范的技术创新。 本文档中的内容反映了参与者对他们希望贡献时间的领域的个人观点。 但是,必须提及的是,它们并不代表硬性承诺…