当前位置:   article > 正文

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

add_definitions(-dapi_exports)

由于项目需要,近日来研究了一下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要修改成你自己配置的路径

  1. cmake_minimum_required(VERSION 2.6)
  2. project(yolov5) # 1
  3. set(OpenCV_DIR "F:\\opencv3\\opencv\\build") #2
  4. set(TRT_DIR "F:\\tensorrt_tar\\TensorRT-7.0.0.11") #3
  5. add_definitions(-std=c++11)
  6. option(CUDA_USE_STATIC_CUDA_RUNTIME OFF)
  7. set(CMAKE_CXX_STANDARD 11)
  8. set(CMAKE_BUILD_TYPE Debug)
  9. set(THREADS_PREFER_PTHREAD_FLAG ON)
  10. find_package(Threads)
  11. add_definitions(-DAPI_EXPORTS)
  12. # setup CUDA
  13. find_package(CUDA REQUIRED)
  14. message(STATUS " libraries: ${CUDA_LIBRARIES}")
  15. message(STATUS " include path: ${CUDA_INCLUDE_DIRS}")
  16. include_directories(${CUDA_INCLUDE_DIRS})
  17. ####
  18. enable_language(CUDA) # add this line, then no need to setup cuda path in vs
  19. ####
  20. include_directories(${PROJECT_SOURCE_DIR}/include)
  21. include_directories(${TRT_DIR}\\include)
  22. # -D_MWAITXINTRIN_H_INCLUDED for solving error: identifier "__builtin_ia32_mwaitx" is undefined
  23. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Ofast -D_MWAITXINTRIN_H_INCLUDED")
  24. # setup opencv
  25. find_package(OpenCV QUIET
  26. NO_MODULE
  27. NO_DEFAULT_PATH
  28. NO_CMAKE_PATH
  29. NO_CMAKE_ENVIRONMENT_PATH
  30. NO_SYSTEM_ENVIRONMENT_PATH
  31. NO_CMAKE_PACKAGE_REGISTRY
  32. NO_CMAKE_BUILDS_PATH
  33. NO_CMAKE_SYSTEM_PATH
  34. NO_CMAKE_SYSTEM_PACKAGE_REGISTRY
  35. )
  36. message(STATUS "OpenCV library status:")
  37. message(STATUS " version: ${OpenCV_VERSION}")
  38. message(STATUS " libraries: ${OpenCV_LIBS}")
  39. message(STATUS " include path: ${OpenCV_INCLUDE_DIRS}")
  40. include_directories(${OpenCV_INCLUDE_DIRS})
  41. link_directories(${TRT_DIR}\\lib)
  42. add_executable(yolov5 ${PROJECT_SOURCE_DIR}/yolov5.cpp ${PROJECT_SOURCE_DIR}/yololayer.cu ${PROJECT_SOURCE_DIR}/yololayer.h) #4
  43. target_link_libraries(yolov5 "nvinfer" "nvinfer_plugin") #5
  44. target_link_libraries(yolov5 ${OpenCV_LIBS}) #6
  45. target_link_libraries(yolov5 ${CUDA_LIBRARIES}) #7
  46. 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模式)

  1. F:
  2. 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的方式进行部署。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/136693?site
推荐阅读
相关标签
  

闽ICP备14008679号