win10系统下基于tensorrt的yolov5l网络部署

环境和使用项目

环境:win10,vs2017,opencv3.4.14,cuda11.1.0,cudnn8.2.1,tensorrt7.2.3,pytorch1.9,安装tensorrt的方法见前文
yolov5 项目:https://github.com/ultralytics/yolov5
yolov5对应tensorrt项目tensorrtx:https://github.com/donnyyou/tensorrtx/tree/master/yolov5

模型训练

生成wts文件

根据yolov5训练出来的模型权重为yolov5l.pt,其他yolov5模型类似

根据pt文件生成wts文件:wts文件是从yolov5权重转换到tensorrx权重的中间文件。转换方法为:将yolov5l.pt文件和tensorrtx/yolov5下的gen_wts.py文件放在yolov5的根目录下(主要是为了使用yolov5项目下的相关python模块),python运行gen_wts.py文件,生成yolov5l.wts文件

构建生成vs项目

需要将tensorrtx项目构建成vs项目,使用cmake-gui构建生成项目,配置时注意config中的generator选择Visual Studio 15 2017,platform选择x64

修改CMakeList.txt

tensorrtx项目是用于linux的C++项目,用于win10需要修改CMakeLists.txt文件,具体修改方法作者已给出

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

注意重点是修改opencv和tensorrt的头文件和库文件目录

修改CMakeList.txt后,设置yolov5项目为启动项目

配置项目成功后,运行vs项目如图:
配置项目成功

生成engine文件

engine文件是tensorrtx项目的权重文件,将yolov5l.wts放在vs项目下,添加启动项目时的命令行参数为:-s yolov5l.wts yolov5l.engine l,其中-s表示序列化模型对象,l表示yolov5l模型。重新运行项目即可获得yolov5l.engine文件。

生成运行试件
这里实际生成engine文件花了40多分钟,是一个比较慢的速度。之前在jetson xavier平台上生成engine文件一般花2分钟左右的时间,可能和运行平台有关系。

用engine文件对图片进行推理

engine文件实际上保存的是c++用于推理的对象的权重数据,如果要对图像进行推理的话需要改动启动的命令行参数,改为:-d yolov5l.engine …/samples,其中-d表示反序列化文件,…/samples表示用于推理的图片的路径。运行后即可获得识别结果在这里插入图片描述


存在的问题

已解决的问题

win10平台下的tensorrtx工程生成engine时间过长,多等一下就好

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值