ubuntu下yolov5 tensorrt模型部署

news2024/11/26 2:28:18

文章目录

  • ubuntu下yolov5 tensorrt模型部署
    • 一、Ubuntu18.04环境配置
    • 1.1 安装工具链和opencv
    • 1.2 安装Nvidia相关库
      • 1.2.1 安装Nvidia显卡驱动
      • 1.2.2 安装 cuda11.3
      • 1.2.3 安装 cudnn8.2
      • 1.2.4 下载 tensorrt8.4.2.4
      • 1.2.5 下载仓库TensorRT-Alpha并设置
    • 二、从yolov5源码中导出onnx文件
    • 三、利用tensorrt编译onnx模型
    • 四、编译执行yolov5-tensorrt工程
    • 五、结束语

ubuntu下yolov5 tensorrt模型部署

  • YOLOv5的创新性:相比于之前的目标检测算法,YOLOv5在多个方面进行了创新和优化。首先,它在网络结构上采用了轻量级的设计,使用了CSPDarknet53作为骨干网络,减少了计算量和参数量,提高了算法的实时性和效率。其次,YOLOv5引入了蒸馏学习策略,使用教师模型指导学生模型进行学习,提高了模型的性能和泛化能力。此外,YOLOv5还采用了多尺度特征融合策略,使得模型能够更好地捕捉到不同尺度的目标特征。另外,YOLOv5还改进了损失函数的设计,采用GIOU和COCO等损失函数,提高了模型的准确性。
  • YOLOv5对工业界的影响:YOLOv5的推出对工业界产生了广泛的影响。首先,它被广泛应用于智能驾驶、安防监控、机器人视觉等场景中,为工业界提供了更准确、高效和可靠的目标检测工具。其次,YOLOv5的推出加速了目标检测技术的发展和应用,促进了计算机视觉领域的进步。此外,YOLOv5的开源也为工业界提供了更多的参考和选择,推动了深度学习算法的发展和完善。
  • YOLOv5的优点:YOLOv5具有多个优点。首先,它具有高效性,能够在短时间内处理大量的图像和视频数据。其次,YOLOv5具有准确性,能够准确地检测到目标物体并对其进行分类和定位。此外,YOLOv5还具有实时性,能够实时地输出检测结果和处理速度,使得它能够适用于各种实际应用场景中。另外,YOLOv5还具有易用性,其简单的接口和易懂的文档使得开发者可以轻松上手并开发出高质量的目标检测程序。

本文提供yolov5-tensorrt加速方法。
有源码!有源码!有源码! 不要慌,哈哈哈。
在这里插入图片描述
下图右边是yolov5s部署之后,tensorrt部署效果,和python推理结果一致。
在这里插入图片描述

yolov5s : Offical( left ) vs Ours( right )

一、Ubuntu18.04环境配置

如果您对tensorrt不是很熟悉,请务必保持下面库版本一致。
请注意: Linux系统安装以下库,务必去进入系统bios下,关闭安全启动(设置 secure boot 为 disable)

1.1 安装工具链和opencv

sudo apt-get update 
sudo apt-get install build-essential 
sudo apt-get install git
sudo apt-get install gdb
sudo apt-get install cmake
sudo apt-get install libopencv-dev  
# pkg-config --modversion opencv

1.2 安装Nvidia相关库

注:Nvidia相关网站需要注册账号。

1.2.1 安装Nvidia显卡驱动

ubuntu-drivers devices
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt install nvidia-driver-470-server # for ubuntu18.04
nvidia-smi

1.2.2 安装 cuda11.3

  • 进入链接: https://developer.nvidia.com/cuda-toolkit-archive
  • 选择:CUDA Toolkit 11.3.0(April 2021)
  • 选择:[Linux] -> [x86_64] -> [Ubuntu] -> [18.04] -> [runfile(local)]

    在网页你能看到下面安装命令,我这里已经拷贝下来:
wget https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda_11.3.0_465.19.01_linux.run
sudo sh cuda_11.3.0_465.19.01_linux.run

cuda的安装过程中,需要你在bash窗口手动作一些选择,这里选择如下:

  • select:[continue] -> [accept] -> 接着按下回车键取消Driver和465.19.01这个选项,如下图(it is important!) -> [Install]

    在这里插入图片描述
    bash窗口提示如下表示安装完成
#===========
#= Summary =
#===========

#Driver:   Not Selected
#Toolkit:  Installed in /usr/local/cuda-11.3/
#......

把cuda添加到环境变量:

vim ~/.bashrc

把下面拷贝到 .bashrc里面

# cuda v11.3
export PATH=/usr/local/cuda-11.3/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.3/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CUDA_HOME=/usr/local/cuda-11.3

刷新环境变量和验证

source ~/.bashrc
nvcc -V

bash窗口打印如下信息表示cuda11.3安装正常

nvcc: NVIDIA (R) Cuda compiler driver<br>
Copyright (c) 2005-2021 NVIDIA Corporation<br>
Built on Sun_Mar_21_19:15:46_PDT_2021<br>
Cuda compilation tools, release 11.3, V11.3.58<br>
Build cuda_11.3.r11.3/compiler.29745058_0<br>

1.2.3 安装 cudnn8.2

  • 进入网站:https://developer.nvidia.com/rdp/cudnn-archive
  • 选择: Download cuDNN v8.2.0 (April 23rd, 2021), for CUDA 11.x
  • 选择: cuDNN Library for Linux (x86_64)
  • 你将会下载这个压缩包: “cudnn-11.3-linux-x64-v8.2.0.53.tgz”
# 解压
tar -zxvf cudnn-11.3-linux-x64-v8.2.0.53.tgz

将cudnn的头文件和lib拷贝到cuda11.3的安装目录下:

sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*

1.2.4 下载 tensorrt8.4.2.4

本教程中,tensorrt只需要下载\、解压即可,不需要安装。

  • 进入网站: https://developer.nvidia.cn/nvidia-tensorrt-8x-download
  • 把这个打勾: I Agree To the Terms of the NVIDIA TensorRT License Agreement
  • 选择: TensorRT 8.4 GA Update 1
  • 选择: TensorRT 8.4 GA Update 1 for Linux x86_64 and CUDA 11.0, 11.1, 11.2, 11.3, 11.4, 11.5, 11.6 and 11.7 TAR Package
  • 你将会下载这个压缩包: “TensorRT-8.4.2.4.Linux.x86_64-gnu.cuda-11.6.cudnn8.4.tar.gz”
# 解压
tar -zxvf TensorRT-8.4.2.4.Linux.x86_64-gnu.cuda-11.6.cudnn8.4.tar.gz
# 快速验证一下tensorrt+cuda+cudnn是否安装正常
cd TensorRT-8.4.2.4/samples/sampleMNIST
make
cd ../../bin/

导出tensorrt环境变量(it is important!),注:将LD_LIBRARY_PATH:后面的路径换成你自己的!后续编译onnx模型的时候也需要执行下面第一行命令

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/xxx/temp/TensorRT-8.4.2.4/lib
./sample_mnist

bash窗口打印类似如下图的手写数字识别表明cuda+cudnn+tensorrt安装正常
在这里插入图片描述

1.2.5 下载仓库TensorRT-Alpha并设置

git clone https://github.com/FeiYull/tensorrt-alpha

设置您自己TensorRT根目录:

git clone https://github.com/FeiYull/tensorrt-alpha
cd tensorrt-alpha/cmake
vim common.cmake
# 在文件common.cmake中的第20行中,设置成你自己的目录,别和我设置一样的路径eg:
# set(TensorRT_ROOT /root/TensorRT-8.4.2.4)

二、从yolov5源码中导出onnx文件

可以直接从网盘下载onnx文件[weiyun]:weiyun or google driver ,你也可以自己下载仓库,然后按照下面指令手动导出onnx文件:

# 下载yolov5源码
git clone https://github.com/ultralytics/yolov5

切换版本为yolov5.7.0

git checkout v7.0

安装 yolov5环境

pip install -r requirements.txt

用以下指令导出onnx模型文件,640表示模型的输入分辨率为:640X640,1280同理表示:1280X1280。建议使用640对应的小模型。

# 640
python export.py --weights=yolov5n.pt  --dynamic --include=onnx 
python export.py --weights=yolov5s.pt  --dynamic --include=onnx
python export.py --weights=yolov5m.pt  --dynamic --include=onnx
python export.py --weights=yolov5l.pt  --dynamic --include=onnx
python export.py --weights=yolov5x.pt  --dynamic --include=onnx
# 1280
python export.py --weights=yolov5n6.pt  --dynamic --include=onnx
python export.py --weights=yolov5s6.pt  --dynamic --include=onnx
python export.py --weights=yolov5m6.pt  --dynamic --include=onnx
python export.py --weights=yolov5l6.pt  --dynamic --include=onnx
python export.py --weights=yolov5x6.pt  --dynamic --include=onnx

三、利用tensorrt编译onnx模型

将你的onnx模型放到这个路径:tensorrt-alpha/data/yolov5

cd tensorrt-alpha/data/yolov5
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/TensorRT-8.4.2.4/lib

编译onnx模型指令,640表示模型的输入分辨率为:640X640,1280同理表示:1280X1280。注意:编译onnx格式的模型会得到例如xxxx.trt格式的文件,下文推理要用到。

# 640
../../../../TensorRT-8.4.2.4/bin/trtexec   --onnx=yolov5n.onnx   --saveEngine=yolov5n.trt  --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
../../../../TensorRT-8.4.2.4/bin/trtexec   --onnx=yolov5s.onnx   --saveEngine=yolov5s.trt   --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
../../../../TensorRT-8.4.2.4/bin/trtexec   --onnx=yolov5m.onnx   --saveEngine=yolov5m.trt  --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
../../../../TensorRT-8.4.2.4/bin/trtexec   --onnx=yolov5l.onnx   --saveEngine=yolov5l.trt  --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
../../../../TensorRT-8.4.2.4/bin/trtexec   --onnx=yolov5x.onnx   --saveEngine=yolov5x.trt  --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
# 1280
../../../../TensorRT-8.4.2.4/bin/trtexec   --onnx=yolov5n6.onnx   --saveEngine=yolov5n6.trt  --buildOnly --minShapes=images:1x3x1280x1280 --optShapes=images:4x3x1280x1280 --maxShapes=images:8x3x1280x1280
../../../../TensorRT-8.4.2.4/bin/trtexec   --onnx=yolov5s6.onnx   --saveEngine=yolov5s6.trt  --buildOnly --minShapes=images:1x3x1280x1280 --optShapes=images:4x3x1280x1280 --maxShapes=images:8x3x1280x1280

四、编译执行yolov5-tensorrt工程

使用命令行编译下代码

git clone https://github.com/FeiYull/tensorrt-alpha
cd tensorrt-alpha/yolov5
mkdir build
cd build
cmake ..
make -j10

按照需求执行推理,支持推理一张图片、在线推理视频文件,或者在线从摄像头获取视频流并推理。

# 640
# infer an image
./app_yolov5  --version=v570 --model=../../data/yolov5/yolov5n.trt   --size=640  --batch_size=1  --img=../../data/6406401.jpg   --show --savePath=../
# infer video
./app_yolov5  --version=v570 --model=../../data/yolov5/yolov5n.trt   --size=640  --batch_size=8  --video=../../data/people.mp4  --show 
# infer web camera
./app_yolov5  --version=v570 --model=../../data/yolov5/yolov5n.trt   --size=640  --batch_size=2  --show  --cam_id=0

# 1280
./app_yolov5  --version=v570 --model=../../data/yolov5/yolov5s6.trt  --size=1280 --batch_size=1 --img=../../data/6406401.jpg   --show --savePath

例如:以下是yolov5推理视频流效果。
在这里插入图片描述

五、结束语

都看到这里了,觉得可以请点赞收藏,有条件的去仓库点个star,仓库:https://github.com/FeiYull/tensorrt-alpha
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1090365.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【IDEA项目个别类爆红,但是项目可以正常运行】

打开项目时发现idea个别类爆红,但是项目可以正常运行 问题原因&#xff1a;Idea本身的问题&#xff0c;可能是其缓存问题&#xff0c;导致爆红 解决方案&#xff1a;重置Idea 很多时候排查不出代码问题&#xff0c;就尝试一下此操作。 选择目录&#xff1a;File–>Invalida…

前后端分离项目-基于springboot+vue的高校学科竞赛平台的设计与实现(内含代码+文档+报告)

博主介绍&#xff1a;✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ &#x1f345;由于篇幅限制&#xff0c;想要获取完整文章或者源码&#xff0c;或者代做&am…

node.js+NPM包管理器+Webpack打包工具+前端项目搭建

javascript运行环境&#xff08;无需依赖html文件&#xff09; BFF&#xff0c;服务于前端的后端 官网下载安装&#xff0c;node -v查看是否安装成功 ①、创建一个01.js文件 //引入http模块 const httprequire(http)//创建服务器 http.createServer(function(request,respo…

微服务+Java+Spring Cloud +UniApp +MySql智慧工地综合管理云平台源码,SaaS模式

智慧工地围绕工程现场人、机、料、法、环及施工过程中质量、安全、进度、成本等各项数据满足工地多角色、多视角的有效监管,实现工程建设管理的降本增效. 智慧工地综合管理云平台源码&#xff0c;PC监管端、项目端&#xff1b;APP监管端、项目端、数据可视化大屏端源码&#xf…

css案例:取消组件的阴影

点击的时候会出现阴影&#xff0c;取消阴影操作&#xff1a; .el-radio__input.is-checked{.el-radio__inner{box-shadow:0 0 0 0!important;}}有的时候取消阴影的css不起作用是权限问题&#xff0c;加上!important 就好了。

Ps:选区的布尔运算

选区的布尔 Boolean运算指的是选区之间的相加&#xff08;并集&#xff09;、相减&#xff08;差集&#xff09;以及相交&#xff08;交集&#xff09;&#xff0c;从而形成一个新的选区。 ◆ ◆ ◆ 使用工具选项栏 在 Ps 中&#xff0c;几乎所有的选区工具的工具选项栏上都有…

php新手实战:自定义书源下载api

网上有很多第三方小说网站提供小说下载&#xff0c;而下载的过程无非就是搜索书籍&#xff0c;然后找到下载链接点击下载即可。只是类似这种“良心”的小说网站实在是太少。大多数仅支持在线阅读。而如今&#xff0c;我却要利用这种为数不多的“良心”小说站点提供的书源来作为…

Eureka添加@Loadbalanced 报错 No instances available for XXXXX

错误显示为 错误信息是:没有可用的实例 我就比较惊讶 我已经添加了Loadbalanced 同时将RestTemplate注册到spring容器中了 为什么还会出现没有实例.. 下面是代码 仔细检查了代码发现没什么错误之后 检查了一下 xml文件,发现里面的 应用名称与访问时参数一致.这个时候就陷…

Elasticsearch:使用 LangChain 对话链和 OpenAI 的聊天机器人

在此笔记本中&#xff0c;我们将构建一个聊天机器人&#xff0c;它可以回答有关自定义数据的问题&#xff0c;例如雇主的政策。 聊天机器人使用 LangChain 的 ConversationalRetrievalChain&#xff0c;具有以下功能&#xff1a; 用自然语言回答问题在 Elasticsearch 中运行混…

Postman持久化保存/设置断言详解

postman持久化保存 1、点击postman的Collections页签&#xff0c;点击 New Collection创建&#xff08;可以当成项 目并重命名&#xff09; 2、新增后&#xff0c;再点击Collection中的“ ... ” &#xff0c;然后点击“Add Folder”&#xff0c;新建一个文件 夹&#xff08…

是否拥有具身智能,是扫地机器人能否打破“内卷”的关键

如果你关注2023世界人工智能大会等行业峰会&#xff0c;以及英伟达、微软、谷歌、特斯拉和国內科技大厂的最新发布会&#xff0c;除了“大模型”&#xff0c;应该会听到另一个高频词——具身智能。 所谓具身智能Embodied AI &#xff0c;指的是有身体并支持物理交互的智能体。这…

【计网】傻瓜式安装cpolar内网穿透

目录 一、注册账户 二、下载安装包 三、安装 四、查看AuthToken 五、简单使用 如果在本机部署项目外网是访问不到的&#xff0c;通过内网穿透就可以使本机部署的项目可被外网访问 一、注册账户 cpolar - secure introspectable tunnels to localhostcpolar secure intro…

3. Windows下C++/MFC调用hiredis库操作redis示例

一、头文件目录 将之前下载和编译好的Redis目录拷贝到新建好的工程目录下面&#xff0c;再点击测试工程的右键/属性&#xff0c;点击C/常规&#xff0c;附加包含目录添加以下路径&#xff0c;注意如果原先有多个路径&#xff0c;在末尾处添加分号后再粘贴&#xff1a; 点击C/常…

谜题(Puzzle, ACM/ICPC World Finals 1993, UVa227)

有一个5*5的网格&#xff0c;其中恰好有一个格子是空的&#xff0c;其他格子各有一个字母。一共有4种指令&#xff1a;A, B, L, R&#xff0c;分别表示把空格上、下、左、右的相邻字母移到空格中。输入初始网格和指令序列&#xff08;以数字0结束&#xff09;&#xff0c;输出指…

深入promise

深入promise 我们可能知道如何使用 Promise&#xff0c;但是我们知道它们实际上是如何工作的吗&#xff1f; 为了让每个人都了解Promise&#xff0c;让我们从基础开始。如果我们知道 Promise 是什么以及如何使用它&#xff0c;我们可以跳过这一部分并直接跳到“魔法开始”的地…

Halcon中涉及的数字图像十大理论知识

1.图像处理知识 2.图像的灰度变换 3.图像增强 4.图像的几何变换 5.图像分割 6.图像的频域 7.图像的形态学 8.图像的复原 9.运动图像 10.图像配准

uni-app--》基于小程序开发的电商平台项目实战(五)

&#x1f3cd;️作者简介&#xff1a;大家好&#xff0c;我是亦世凡华、渴望知识储备自己的一名在校大学生 &#x1f6f5;个人主页&#xff1a;亦世凡华、 &#x1f6fa;系列专栏&#xff1a;uni-app &#x1f6b2;座右铭&#xff1a;人生亦可燃烧&#xff0c;亦可腐败&#xf…

Spring实战 | Spring AOP核心功能分析之葵花宝典

国庆中秋特辑系列文章&#xff1a; 国庆中秋特辑&#xff08;八&#xff09;Spring Boot项目如何使用JPA 国庆中秋特辑&#xff08;七&#xff09;Java软件工程师常见20道编程面试题 国庆中秋特辑&#xff08;六&#xff09;大学生常见30道宝藏编程面试题 国庆中秋特辑&…

实验3:左右循环LED灯

获取流水灯工程&#xff1a; 方式一&#xff1a; keilproteus 完成最小系统&#xff0c;点亮led 灯实验_吴小凹的博客-CSDN博客 方式二&#xff1a; Flowing_led.zip - 蓝奏云直接下载。 原理图修改&#xff1a; 无须修改只需要使用流水灯的工程即可&#xff0c;解压到桌面…

机器人命令表设计

演算命令 CLEAR 将数据 1 上被指定的编号以后的变数的内容&#xff0c;以及数据 2 上仅被指定的个数都清除至 0。 INC 在被指定的变数内容上加上 1。 DEC 在被指定的变数内容上减掉 1。 SET 在数据 1 上设定数据 2。 ADD 将数据 1 和数据 2 相加&#xff0c;得出的结果保存在数…