tensorrt部署YOLOv5模型记录【附代码,支持视频检测】下

本文涉及的产品
模型训练 PAI-DLC,5000CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
NLP 自学习平台,3个模型定制额度 1个月
简介: 笔记

CMakeLists文件配置


这里默认你的Opencv已经安装好了


打开之前下载的YOLOv5TensorRT这个文件,修改CMakeLists.txt文件。修改Opencv、Tensorrt、dirent.h的目录。注意这三个文件必须填写绝对路径!


注:其中dirent.h在YOLOv5TensorRT/include/下,修改arch=compute_75;code=sm_75【因为我用的是英伟达1650,这个填写的是显卡算力,根据自己的显卡去修改,可参考:CUDA GPU | NVIDIA Developer】


我的CMakeLists.txt如下

cmake_minimum_required(VERSION 2.6)
project(yolov5) 
#change to your own path
##################################################
set(OpenCV_DIR "F:\\opencv\\opencv\\build")  
set(TRT_DIR "F:\\TensorRT-8.2.4.2")  
set(Dirent_INCLUDE_DIRS "E:\\YOLOv5TensorRT\\include")
##################################################
add_definitions(-std=c++11)
add_definitions(-DAPI_EXPORTS)
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 10.2 REQUIRED)
message(STATUS "    libraries: ${CUDA_LIBRARIES}")
message(STATUS "    include path: ${CUDA_INCLUDE_DIRS}")
include_directories(${CUDA_INCLUDE_DIRS})
include_directories(${Dirent_INCLUDE_DIRS}) 
#change to your GPU own compute_XX
###########################################################################################
set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};-std=c++11;-g;-G;-gencode;arch=compute_75;code=sm_75)
###########################################################################################
####
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 ${PROJECT_SOURCE_DIR}/preprocess.cu) 
target_link_libraries(yolov5 "nvinfer" "nvinfer_plugin")  
target_link_libraries(yolov5 ${OpenCV_LIBS})     
target_link_libraries(yolov5 ${CUDA_LIBRARIES})  
target_link_libraries(yolov5 Threads::Threads)     

运行Cmake


YOLOv5TensorRT/下建一个build文件

20.png

打开CMake,代码为YOLOv5TensorRT,build目录为刚才新建的build路径

21.png

然后点击Configure(下图中的路径还是写的Yolov5_Tensorrt_Win10是老项目,因为添加了东西,其实已经换成了YOLOv5TensorRT和YOLOv5TensorRT/build )

22.png

运行完以后会出现以下界面,显示配置完成,点击Generate 在点击open Project会自动打开VS

有时候会提升找不到cuda,检查一下路径对不对。【有时候Cmake的时候有各种问题,欢迎大家把遇到的问题和解决办法留言,方便大家一起解决学习】

23.png

编译


进入:E:\YOLOv5TensorRT\build  ,打开yolov5.sln  项目文件

然后依次打开项目中的yolov5/Header Files/yololayer.h,可以修改红色框中的输入大小和类的数量。

24.png

上VS界面上面的Debug改为Release

25.png

右键项目重新生成

26.png

编译成功以后,会在YOLOv5TensorRT\build\Release下生成一个yolov5.exe程序

27.png

程序运行


生成engine文件

将最前面生成的yolov5s.wts序列化模型复制到这个exe文件下。

输入:使用的是s模型,最后则输入s,若为m模型,最后一个参数则需要改成m

./yolov5.exe -s yolov5s.wts yolov5s.engine s

该过程是将yolov5s.wts转化成yolov5s.engine文件的过程,这个过程比较长【差不多10~20分钟】,耐心等待。成功以后如下显示

./yolov5.exe -s yolov5s.wts yolov5s.engine s
Loading weights: yolov5s.wts
Building engine, please wait for a while...
[05/27/2022-16:39:23] [W] [TRT] TensorRT was linked against cuBLAS/cuBLASLt 10.2.2 but loaded cuBLAS/cuBLASLt 10.2.1
[05/27/2022-16:39:24] [W] [TRT] TensorRT was linked against cuDNN 8.2.1 but loaded cuDNN 8.2.0
[05/27/2022-16:48:34] [W] [TRT] TensorRT was linked against cuBLAS/cuBLASLt 10.2.2 but loaded cuBLAS/cuBLASLt 10.2.1
[05/27/2022-16:48:34] [W] [TRT] TensorRT was linked against cuDNN 8.2.1 but loaded cuDNN 8.2.0
Build engine successfully!

同时在exe文件夹下生成了engine文件

28.png

预测


图像预测:

将E:\YOLOv5TensorRT\ 下的整个pictures文件复制到exe程序文件下,同时将coco_classes.txt文件也放进来

29.png

然后打开cmd运行如下命令进行预测:

./yolov5.exe -d yolov5s.engine -img ./pictures

出现如下:

E:\Yolov5_Tensorrt_Win10\build\Release>yolov5 -d yolov5s.engine ./pictures
[05/27/2022-16:54:45] [W] [TRT] TensorRT was linked against cuDNN 8.2.1 but loaded cuDNN 8.2.0
[05/27/2022-16:54:45] [W] [TRT] TensorRT was linked against cuDNN 8.2.1 but loaded cuDNN 8.2.0
7ms
7ms

此时会在当前目录下生成预测结果图:

30.jpeg31.jpeg

视频预测

./yolov5.exe -d yolov5s.engine -video 0

32.png

如果需要替换自己的类,记得在代码中把类yololayer.h的数量改一下,如果放自己的txt,在yolov5.cpp中的主函数里将classes_path换成自己的路径即可。

完成上述即完成了整个过程。


目录
相关文章
|
4月前
|
机器学习/深度学习 编解码 人工智能
|
29天前
|
PyTorch 算法框架/工具 计算机视觉
目标检测实战(二):YoloV4-Tiny训练、测试、评估完整步骤
本文介绍了使用YOLOv4-Tiny进行目标检测的完整流程,包括模型介绍、代码下载、数据集处理、网络训练、预测和评估。
81 2
目标检测实战(二):YoloV4-Tiny训练、测试、评估完整步骤
|
29天前
|
XML 机器学习/深度学习 数据可视化
目标检测笔记(六):如何通过界面化操作YOLOv5完成数据集的自动标注
这篇文章介绍了如何通过界面化操作YOLOv5来完成数据集的自动标注,包括修改源码、自动标注的前期准备、开始自动标注、可视化标注效果以及将XML文件转换为YOLO训练所需的TXT格式。
49 1
目标检测笔记(六):如何通过界面化操作YOLOv5完成数据集的自动标注
|
29天前
|
计算机视觉
目标检测笔记(二):测试YOLOv5各模块的推理速度
这篇文章是关于如何测试YOLOv5中不同模块(如SPP和SPPF)的推理速度,并通过代码示例展示了如何进行性能分析。
73 3
|
29天前
|
机器学习/深度学习 算法 PyTorch
目标检测实战(五): 使用YOLOv5-7.0版本对图像进行目标检测完整版(从自定义数据集到测试验证的完整流程)
本文详细介绍了使用YOLOv5-7.0版本进行目标检测的完整流程,包括算法介绍、环境搭建、数据集准备、模型训练、验证、测试以及评价指标。YOLOv5以其高精度、快速度和模型小尺寸在计算机视觉领域受到广泛应用。
300 0
目标检测实战(五): 使用YOLOv5-7.0版本对图像进行目标检测完整版(从自定义数据集到测试验证的完整流程)
|
29天前
|
缓存 数据挖掘 测试技术
目标检测实战(三):YOLO-Nano训练、测试、验证详细步骤
本文介绍了YOLO-Nano在目标检测中的训练、测试及验证步骤。YOLO-Nano是一个轻量级目标检测模型,使用ShuffleNet-v2作为主干网络,结合FPN+PAN特征金字塔和NanoDet的检测头。文章详细说明了训练前的准备、源代码下载、数据集准备、参数调整、模型测试、FPS测试、VOC-map测试、模型训练、模型测试和验证等步骤,旨在帮助开发者高效实现目标检测任务。
40 0
目标检测实战(三):YOLO-Nano训练、测试、验证详细步骤
|
29天前
|
计算机视觉 异构计算
目标检测实战(四):YOLOV4-Tiny 源码训练、测试、验证详细步骤
这篇文章详细介绍了使用YOLOv4-Tiny进行目标检测的实战步骤,包括下载源码和权重文件、配置编译环境、进行简单测试、训练VOC数据集、生成训练文件、准备训练、开始训练以及多GPU训练的步骤。文章还提供了相应的代码示例,帮助读者理解和实践YOLOv4-Tiny模型的训练和测试过程。
85 0
|
5月前
|
计算机视觉
【超详细】【YOLOV8使用说明】一套框架解决CV的5大任务:目标检测、分割、姿势估计、跟踪和分类任务【含源码】(2)
【超详细】【YOLOV8使用说明】一套框架解决CV的5大任务:目标检测、分割、姿势估计、跟踪和分类任务【含源码】
|
6月前
|
并行计算 计算机视觉
YOLOv8太卷啦 | YOLOv8官方仓库正式支持RT-DETR训练、测试以及推理
YOLOv8太卷啦 | YOLOv8官方仓库正式支持RT-DETR训练、测试以及推理
466 0
|
6月前
|
机器学习/深度学习 缓存 PyTorch
Yolov5如何训练自定义的数据集,以及使用GPU训练,涵盖报错解决
Yolov5如何训练自定义的数据集,以及使用GPU训练,涵盖报错解决
981 0
下一篇
无影云桌面