作者: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博客
【如果对您有帮助,交个朋友给个一键三连吧,您的肯定是我博客高质量维护的动力!!!】
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)