yolov5在win10上的部署,yolov5原始版本为pytorch,libtorch在windows下的部署折腾了半天放弃,转而拥抱tensorRT。在此记录一下整个部署过程。
pytorch的inference环境:
TensorRT-7.0.0.11.Windows10.x86_64.cuda-10.2.cudnn7.6(与上面的cuda和cudnn软件版本一致)
安装好pytorch的gpu的环境,这部分属于python环境部署,这里不做详细介绍。
cuda和cudnn的安装网上资料很多,我就不截图了。
链接地址:yolov5 v3.1
git clone https://github.com/ultralytics/yolov5.git
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
将**TensorRT目录**\include下中所有头文件(*.h),复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\include
将**TensorRT目录**\lib下所有 .lib文件复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\lib\x64
将**TensorRT目录**\lib下中所有dll文件复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\bin
1 . 用VS2017
打开TensorRT目录\samples\sampleMNIST
这里如果出现找不到 Windows SDK 版本10.0.17134.0,vs目标平台版本不一致问题,按照提示下载了一个对应版本安装,问题就解决了。参考链接
TensorRT目录\data\mnist
目录,运行python download_pgms.py
TensorRT目录\include
TensorRT目录\lib
TensorRT目录\lib
目录中的所有.lib文件和C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\lib\x64
中所有.lib文件D:\softwareFai\cmake-3.16.0-rc1-win64-x64\cmake-3.16.0-rc1-win64-x64\bin
cmake-gui.exe
。opencv很早以前就装了,按照网上的教程安装,配置完环境变量。
e-g OpenCV的安装目录如下,后面会有相关设置
TensorRTX是将pytorch模型转化为TensorRT格式的模式并部署。
git clone -b yolov5-v3.1 https://github.com/wang-xinyu/tensorrtx.git
(tensorRTX下载,版本与yolov5一致
)在D:/github/tensorrtx_yolov5_3/yolov5
目录中新建include
目录
将dirent.h
文件放入D:/github/tensorrtx_yolov5_3/yolov5/include
目录中
在D:/github/tensorrtx_yolov5_3/yolov5
目录中新建build
目录
生成yolov5.wts文件。通过运行程序gen_wts.py ,将yolov5s.pt转为.wts模型
将tensorrtx源码中的gen_wts.py复制到yolov5源码中并运行,生成.wts模型。
将yolov5s.wts
文件放入build
目录
1. 修改Cmake文件
1.1 参考github上的指南:How to Compile and Run on Windows
1.2 删除原有的CMakeLists.txt文件(原有的),将上述地址上的Cmake文件复制命名为CMakeLists.txt
1.3 Cmake文件如下,一共有8个地方修改,#标注出来了。
#1 project name, set according to your project name (根据需要设置项目名称)
#2 your opencv path (改为**opencv**路径)
#3 your tensorrt path (改为**tensorrt**路径)
#4 source file needed, including .cpp .cu .h (没有改)
#5-#8 libs needed (没有改)
cmake_minimum_required(VERSION 2.6)
project(yolov5) # 1
set(OpenCV_DIR "D:\\opencv\\opencv346\\build") #2
set(TRT_DIR "D:\\TensorRT-7.0.0.11.Windows10.x86_64.cuda-10.2.cudnn7.6\\TensorRT-7.0.0.11") #3
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})
####
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) #4
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
source code
目录 D:/github/tensorrtx_yolov5_3/yolov5
(1:
包含yolov5.cpp源码的目录
)build the binaries
为配置VS工程目录 D:\github\tensorrtx_yolov5_3\yolov5\build
Configure
。2.4 跳出弹窗,选择Visual Studio 15 2017
和 x64
。点击右下角Finish
。
完成Configure之后界面显示如下:
2.5 点击Generate
。生成完了,界面会提示generating done。
2.6 回到build目录下,出现了yolov5.sln
文件,双击。
2.7 点击 生成--》生成解决方案
生成完了提示如下:
Debug目录下生成三个文件
2.8 转到yolov5.exe
目录 (e.g. D:\github\tensorrtx_yolov5_3\yolov5\build\Debug
)
2.9 运行yolov5.exe -s
,生成’yolov5s.engine’
yolov5.exe -s // serialize model to plan file i.e. 'yolov5s.engine'
2.10 推理图片放入D:\github\tensorrtx_yolov5_3\yolov5\build\images
,运行 yolov5.exe -d ../images
,
yolov5.exe -d ../images // deserialize plan file and run inference, the images in samples will be processed.
2.11 检测结果,.pt转化后的模型会掉点。
总结
第一次写blog,写得太匆忙。不清楚的后续补充。
[1]: https://github.com/wang-xinyu/tensorrtx
[2]: https://github.com/ultralytics/yolov5/tree/v3.1
[3]: https://blog.csdn.net/weixin_41552975/article/details/114398669