pytorch版yolov5模型用TenserRT生成engine推理模型参考过程

pytorch版yolov5模型用TenserRT生成engine推理模型参考过程,第1张

pytorch版yolov5模型用TenserRT生成engine推理模型参考过程

作者:RayChiu_Labloy
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处


目录

首先准备ONNX模型

TenserRT下载安装配置

根据cuda、cudnn环境下载trt

配置TensorRT环境变量 

将trt的lib加至环境变量 

将lib下的dll动态库复制到cuda的安装目录lib下

测试一下官方Demo 

双击trt的sample官方demo路径下的mnist测试程序用vs2017打开:

vs2017配置trt的各种库目录

下载数据集

 运行

利用TenserRT生成推理模型

下载TenserRT repo版: 

下载文件dirent.h

生成wts文件:

修改CMakeList.txt

用cmake-gui编译:

VS2017打开编译的yolov5配置环境

配置附加目录:

库目录:

以及链接器的输入:

生成解决方案遇到问题:

 搞定:

生成engine文件


首先准备ONNX模型

参考这里的前半部分:win10+python环境yolov5s预训练模型转onnx然后用openvino生成推理加速模型并测试推理_RayChiu757374816的博客-CSDN博客

TenserRT下载安装配置 根据cuda、cudnn环境下载trt

官方下载链接: https://developer.nvidia.com/nvidia-tensorrt-download

安装GA版本的,tenserRT6.0、 7.1cuda支持范围比较好 ,具体看你的CUDA版本选择,TensorRT的版本只依赖于CUDA版本。

查看自己安装的cuda版本命令:  

nvcc --version
配置TensorRT环境变量  将trt的lib加至环境变量 

将lib下的dll动态库复制到cuda的安装目录lib下

测试一下官方Demo  双击trt的sample官方demo路径下的mnist测试程序用vs2017打开:

vs2017配置trt的各种库目录

1)将E:/api/TensorRT-7.0.0.11/include加入C/C++ --> 常规 --> 包含目录

2)    将E:/api/TensorRT-7.0.0.11/lib加入 VC++目录–>库目录

3)   将下述lib文件名字加入链接器–>输入–>附加依赖项

下载数据集

 执行 E:apiTensorRT-7.0.0.11datamnist 目录下的 download_pgms.py:

python download_pgms.py

发现报提示: DeprecationWarning: The binary mode of fromstring is deprecated, as it behaves surprisingly on unicode inputs. Use frombuffer instead
  raw_buf = np.fromstring(buffer, dtype=np.uint8)

把脚本改一下:

raw_buf = np.fromstring(buffer, dtype=np.uint8)
# 改为
raw_buf = np.frombuffer(buffer, dtype=np.uint8)
 运行

看到报错:C2664    “HMODULE LoadLibraryW(LPCWSTR)”: 无法将参数 1 从“const _Elem *”转换为“LPCWSTR”,这个错误设置一下字符集:

 再次运行:

利用TenserRT生成推理模型 下载TenserRT repo版: 

 啥叫repo版?我理解的意思就是TensorRT的源码库api较为底层,像我这样的小白使用起来较为吃力,那好多大神会基于官方这套api封装一套自己的实现,很多场景拿来即用。

GitHub - shouxieai/tensorRT_Pro: C++ library based on tensorrt integration

使用介绍:详解TensorRT的C++/Python高性能部署,实战应用到项目_哔哩哔哩_bilibili 

其他TenserRT repo版比较好的还有 :https://github.com/wang-xinyu/tensorrtx.git 

我这这里就使用这一版做转换了。

下载文件dirent.h

下载地址:GitHub - tronkko/dirent: C/C++ library for retrieving information on files and directories放置到 tensorrtx/include文件夹下,文件夹需新建

生成wts文件:

把trtx中yolov5/gen_wts.py 复制到yolov5项目中,执行命令:

python gen_wts.py -w yolov5s.pt

修改CMakeList.txt

匹配我的环境是:

cmake_minimum_required(VERSION 3.15)

project(yolov5)
set(OpenCV_DIR "E:/tools/opencv/opencv4.4.1_17/build")  #1
set(TRT_DIR "E:/api/TensorRT-7.0.0.11")  #2
set(OpenCV_INCLUDE_DIRS "E:/tools/opencv/opencv4.4.1_17/build/include")   #3
set(OpenCV_LIBS "E:/tools/opencv/opencv4.4.1_17/build/x64/vc15/lib")   #4

add_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)

# 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(${PROJECT_SOURCE_DIR}/include)
include_directories(${TRT_DIR}/include)
include_directories(E:/api/TensorRT-7.0.0.11/include)  # 5


##### find package(opencv)
include_directories(${OpenCV_INCLUDE_DIRS})
include_directories(${OpenCV_INCLUDE_DIRS}/opencv2)  #6


# -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)           #7
link_directories(${OpenCV_DIR}\x64\vc15\lib)                         #8

add_executable(yolov5 ${PROJECT_SOURCE_DIR}/calibrator.cpp ${PROJECT_SOURCE_DIR}/yolov5.cpp ${PROJECT_SOURCE_DIR}/yololayer.cu ${PROJECT_SOURCE_DIR}/yololayer.h) 

target_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


在trtx的yolov5目录下新建编译路径build:

用cmake-gui编译:

 编译失败:

 有人说vs和cuda安装顺序有影响,我重新装了这两个,先装cuda再装vs后来还不行,听大佬说makefile中enable去掉,显式配cuda,没听懂,不过我删了带enable字眼的配置,编译通过。

VS2017打开编译的yolov5配置环境 配置附加目录:
E:/api/tensorrtx/include;E:/tools/opencv/opencv4.4.1_17/build/include;E:/tools/opencv/opencv4.4.1_17/build/include/opencv2;E:/api/TensorRT-7.0.0.11/include
库目录:
E:/tools/opencv/opencv4.4.1_17/build/x64/vc15/lib;E:/api/TensorRT-7.0.0.11/lib
以及链接器的输入:
myelin64_1.lib;nvonnxparser.lib;nvparsers.lib;opencv_world411.lib
生成解决方案遇到问题:

问题1:无法解析的外部符号 “public: __cdecl nvinfer1::YoloPluginCreator::YoloPluginCreator

配置cu文件,右键:

 问题2:YoloPluginCreator::mFC" may not be initialized

这个在cmakelists.txt中加:

add_definitions(-DAPI_EXPORTS)
add_definitions(-std=c++11)

问题3:无法解析的外部符号 "void __cdecl preprocess_kernel_img

这个在cmakelists.txt中add_executable里追加:

 preprocess.cu preprocess.h

 别忘了像其他cu文件一样也同样配置一下:

 搞定:

生成engine文件

我的环境是cuda10.2,环境变量也没问题,但是执行报找不到cublas64_100.dll等cuda10.0的动态库,这个问题可以找到10.2的对应的dll复制一份改名字改成需要的dll即可。

命令:

yolov5.exe -s E:/projects/pyHome/about_yolo/yolov5-master/yolov5_v5_modle/yolov5s.wts E:/projects/pyHome/about_yolo/yolov5-master/yolov5_v5_modle/yolov5s.engine s

第一次失败遇到的报错:.wts Parameter check failed at :Network.cpp::nvinfer1::Network::addScale::43

应该是pt模型和tensorrtx支持的不一样,看readme后重新找了一个yolov5s v5.0的pt模型,再次执行:

 虽然提示成功了,但是日志中可以看到,显存分配出现了问题,可能真是GTX1050太低端了,不过此过程可以作为其他好一点显卡的参考。

参考:Windows下TensorRT-yolov5-使用总结_高祥xiang的博客-CSDN博客

41、window10 +visual Studio 2019+CUDA11.1+cudnn8.0.4+TensorRT7.2.3.4+Deepsteam5.1+YOLO5(含安装vulkan)_sxj731533730-CSDN博客

YoloV5在tensorRT上加速(Windows)(C++)(webcam)_海里的羊的博客-CSDN博客 

【如果对您有帮助,交个朋友给个一键三连吧,您的肯定是我博客高质量维护的动力!!!】 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5657471.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存