win10 tensorrtx yolov5使用方法

上一篇博文介绍了win10 tensorrtx lenet使用方法,这里介绍Windows10下yolov5的TensorRT使用方法,官方的CmakeList默认是在linux环境下使用,我参考官方说明,修改了CmakeList,使其可以在windows10下快速构建TensorRT的MSVC工程,用于pytorch版yolov5的pt模型测试。

1 环境

硬件:
CPU:Intel®Core™i5-10400F CPU @2.90GHz 2.90GHz
GPU: NVIDIA GeForce GTX 1660 Ti (6G显存)
内存:16.0GB(15.9GB可用)

软件:
Visual Studio 2019
Cmake
CUDA10.0/10.1,cudnn
Anaconda python3.8.3
torch 1.6.0+cu101,torchvision 0.7.0+cu101
TensorRT-7.0.0.11.Windows10.x86_64.cuda-10.0.cudnn7.6
OpenCV 3.4.0

2 准备工作

Cmake,CUDA,cudnn,Anaconda,OpenCV等常规软件安装参照网上教程安装即可,不再赘述。
2.1 tensorRT安装与测试
参考我的另一篇博客:win10 TensorRT 安装与测试
2.2 tensorRT工具库tensorrtx
tensorrtx是GitHub上star最多的tensorrt资料仓库,这个库就尝试使用TensorRT的各种API直接进行网络的构建,简单粗暴,还很有效。避免模型转onnx时出现的一些网络层不支持问题和不友好的报错提示问题。
在这里插入图片描述
tensorrtx下载链接:
https://github.com/wang-xinyu/tensorrtx
与tensorrtx相关的仓库pytorchx:
https://github.com/wang-xinyu/pytorchx
yolov5官方代码链接:
https://github.com/ultralytics/yolov5

2.3 第三方依赖库
1)OpenCV
在网上下载一个版本即可,我用的是3.4.0版本
2)Dirent
Dirent是一个C/ c++编程接口,允许程序员检索有关Linux/UNIX下的文件和目录的信息。这个项目为Microsoft Windows提供了Linux兼容的不同接口。
下载链接:https://github.com/tronkko/dirent

2.4 yolov5官方测试pt模型
yolov5官方测试pt模型在网络不好时,下载较慢,这里有我下载好的模型可以直接使用,点击下载

3 测试

3.1 .pt模型转.wts
1)将下载的yolov5的pt模型放到ultralytics/yolov5/weights目录下
2)将tensorrtx/yolov5/gen_wts.py 复制到 ultralytics/yolov5目录下
3)运行 python gen_wts.py,得到yolov5s.py
linux版教程
在这里插入图片描述
3.2 修改CmakeList
敲黑板,重点来了!!!官方给的CMakeList是linux版本的,想在Windows下构建工程需要修改CMakeList。这里官方给出的参考windows下MSVC构建方法,写了一个yolov5的TensorRT工程构建CMakeList,具体内容如下:
1)设置工程名:#1
2)设置OpenCV路径:#2—#6
3)设置TensorRT库路径:#7—#9
4)设置Dirent路径:#10
5)配置工程包含目录:#11
6)配置TensorRT包含目录和库目录:#12,#13
7)配置OpenCV包含目录和库目录:#14,#15
8)配置Dirent包含目录:#16
9)添加工程文件:#17
10)配置TensorRT附加依赖项:#18
11)配置OpenCV的
debug版
附加依赖项:#19
12)配置OpenCV的release版附加依赖项:#20
13)配置CUDA的附加依赖项:#21

cmake_minimum_required(VERSION 2.6)

project(yolov5) #1
set(OpenCV_DIR "D:\\soft\\Opencv\\opencv\\build")  #2
set(OpenCV_INCLUDE_DIRS ${OpenCV_DIR}\\include) #3
set(OpenCV_LIB_DIRS ${OpenCV_DIR}\\x64\\vc15\\lib) #4
set(OpenCV_Debug_LIBS "opencv_world340d.lib") #5
set(OpenCV_Release_LIBS "opencv_world340.lib") #6
set(TRT_DIR "D:\\soft\\TensorRT-7.0.0.11")  #7
set(TRT_INCLUDE_DIRS ${TRT_DIR}\\include) #8
set(TRT_LIB_DIRS ${TRT_DIR}\\lib) #9
set(Dirent_INCLUDE_DIRS "D:\\PyTorch\\TensorRT\\dirent\\source\\include") #10

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) #11
include_directories(${TRT_INCLUDE_DIRS}) #12
link_directories(${TRT_LIB_DIRS}) #13
include_directories(${OpenCV_INCLUDE_DIRS}) #14
link_directories(${OpenCV_LIB_DIRS}) #15
include_directories(${Dirent_INCLUDE_DIRS}) #16


# -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 "    lib path: ${OpenCV_LIB_DIRS}")
message(STATUS "    Debug libraries: ${OpenCV_Debug_LIBS}")
message(STATUS "    Release libraries: ${OpenCV_Release_LIBS}")
message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")



add_executable(yolov5 ${PROJECT_SOURCE_DIR}/yolov5.cpp ${PROJECT_SOURCE_DIR}/common.hpp ${PROJECT_SOURCE_DIR}/yololayer.cu ${PROJECT_SOURCE_DIR}/yololayer.h)   #17

target_link_libraries(yolov5 "nvinfer" "nvinfer_plugin") #18
target_link_libraries(yolov5 debug ${OpenCV_Debug_LIBS}) #19
target_link_libraries(yolov5 optimized ${OpenCV_Release_LIBS}) #20
target_link_libraries(yolov5 ${CUDA_LIBRARIES}) #21
target_link_libraries(yolov5 Threads::Threads)  

主要是自动配置了OpenCV、Dirent和CUDA,其中OpenCV自动配置了debug版和release版附加依赖项,这个命令很方便,值得学习一下。

target_link_libraries(yolov5 debug ${OpenCV_Debug_LIBS}) #19
target_link_libraries(yolov5 optimized ${OpenCV_Release_LIBS}) #20

CMake构建工程,不多说,直接上图,没有erro和warming就可以了
在这里插入图片描述
linux版教程
在这里插入图片描述

3.3 编译工程
release和debug版都一次编译通过,再也不用担心环境没配好导致编译失败了。
在这里插入图片描述
3.4 运行
1)将生成好的yolov5s.wts复制到tensorrtx/yolov5目录下,将测试图像文件夹/samples放到tensorrtx/yolov5目录下
2)在yolov5的配置属性—>调试—>命令参数,设置命令行参数
-s yolov5s.wts yolov5s.engine s
在这里插入图片描述
运行结束后在工程目录下得到yolov5s.engine文件
在这里插入图片描述
3)在yolov5的配置属性—>调试—>命令参数,设置命令行参数
-d yolov5s.engine …/samples
在这里插入图片描述
运行结束后得到测试输出结果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

linux版教程
在这里插入图片描述
测试圆满结束。

说明

1)用自己的数据集训练的模型(yolov5和yolov3),网络结构与tensorrtx源码不一致,生成engine文件时报错,暂未找到原因,官方的pt模型网络结构和tensorrtx源码一致(待解决)。
在这里插入图片描述

2)暂时只测了yolov5s的官方pt模型,跑通所有流程,yolov5系列其他模型未做测试(待测试)。

3)pytorch代码在Windows上运行常见错误:Initializing libiomp5md.dll, but found libiomp5md.dll already initialized,解决办法:
把这句话放到程序最开始的位置(注意使用因为引号)。
import os
os.environ[‘KMP_DUPLICATE_LIB_OK’]=‘True’

  • 8
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 22
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值