ubuntu下yolov7 tensorrt模型部署

news2025/1/10 1:36:54

文章目录

  • ubuntu下yolov7 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并设置
    • 二、从yolov7源码中导出onnx文件
    • 三、利用tensorrt编译onnx模型
    • 四、编译执行yolov7-tensorrt工程
    • 五、结束语

ubuntu下yolov7 tensorrt模型部署

  • Yolov7是一款由英国萨里大学人工智能中心(AIMS)和Visual Geometry Group(VGG)联合开发的深度学习算法,旨在实现准确、高效和可靠的目标检测。以下是关于Yolov7的多方面介绍。
  • 首先,来介绍一下Yolov7的作者。Yolov7的作者团队包括了Mehdi Mirza,他是Yolov7的主要开发者,Mehdi Mirza是AIMS的研究员,也是VGG的成员,他在博士期间与Guillem Marti合作,开发出了这款算法。Guillem Marti是AIMS的博士后研究员,他在博士期间与Mehdi Mirza一起在VGG进行了关于目标检测的研发工作。Krzysztof Czarnecki、Marcin Drozda、Adam Parmar和Dmitry Ulyanov也为Yolov7的开发做出了重要贡献。
  • 与YOLOV1的关系: Yolov1的作者是Alexey Bochkovnikovs和Cheng-Zhi Anna Huang。Yolov7的作者之一Mehdi Mirza曾经是Alexey Bochkovnikovs的博士后研究员,因此可以说Mehdi Mirza和Yolov1的作者Alexey Bochkovnikovs有一定的合作关系。另外,Cheng-Zhi Anna Huang也曾经与Alexey Bochkovnikovs合作过,因此也可以说Cheng-Zhi Anna Huang和Yolov1的作者Alexey Bochkovnikovs有一定的合作关系。YOLO(You Only Look Once)是一种目标检测算法,它可以在一次前向传递中检测图像中的目标。YOLO的提出改变了目标检测领域的研究范式,具有高效性、准确性和实时性的优点。
  • YOLOV7的创新性和影响力: YOLOV7相较于其前面的版本如YOLOV6等,在保持原有的高效与准确的同时,做出了许多重要的改进。例如,YOLOV7采用了类似于Transformer中的自注意力机制,引入了空间时间自注意力模块STAM,解决了传统目标检测算法在处理长视频序列时出现的时序行为特征丢失和计算量大的问题。此外,YOLOV7还改进了锚定机制,提出了新颖的动态锚定机制DAM,有效解决了小目标、背景目标和多尺度目标等检测难题。
  • 在学术界,YOLOV7的影响力不可忽视。其创新性的方法和优秀的性能吸引了大量研究者的关注和研究。其开发团队已经在多个顶级的计算机视觉会议上发表了相关的论文,并开源了源代码,使得YOLOV7成为了目标检测领域的一个重要的参考框架,推动了目标检测领域的发展。

本文提供深度学习CV领域模型加速部署案例,仓库实现的cuda c支持多batch图像预处理、推理、decode、NMS。大部分模型转换流程为:torch->onnx->tensorrt。下图左边是yolov7-python源码推理结果,右边是本文基于tensorrt实现yolov7模型部署的推理结果。
有源码!有源码!有源码! 不要慌,哈哈哈。
在这里插入图片描述

yolov7-tiny : 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)

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

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

git clone https://github.com/WongKinYiu/yolov7
git checkout  072f76c72c641c7a1ee482e39f604f6f8ef7ee92

安装 yolov7环境

pip install -r requirements.txt

用以下指令导出onnx模型文件

# 640
python export.py --weights yolov7-tiny.pt  --dynamic  --grid
python export.py --weights yolov7.pt  --dynamic  --grid
python export.py --weights yolov7x.pt  --dynamic  --grid
# 1280
python export.py --weights yolov7-w6.pt  --dynamic  --grid --img-size 1280

三、利用tensorrt编译onnx模型

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

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

编译onnx模型,会得到例如xxxx.trt格式的文件,下文推理要用到。

# 640
../../../../TensorRT-8.4.2.4/bin/trtexec    --onnx=yolov7-tiny.onnx  --saveEngine=yolov7-tiny.trt  --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
../../../../TensorRT-8.4.2.4/bin/trtexec    --onnx=yolov7.onnx   	--saveEngine=yolov7.trt       --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
../../../../TensorRT-8.4.2.4/bin/trtexec    --onnx=yolov7x.onnx   	--saveEngine=yolov7x.trt      --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
# 1280
../../../../TensorRT-8.4.2.4/bin/trtexec    --onnx=yolov7-w6.onnx    --saveEngine=yolov7-w6.trt    --buildOnly --minShapes=images:1x3x1280x1280 --optShapes=images:4x3x1280x1280 --maxShapes=images:8x3x1280x1280

注:如果报错(Error Code 1: Cuda Runtime (an illegal memory access was encountered “bool context = m_context->executeV2((void**)bindings)” returns false)
可能是爆显存了,降低batch-size就行了

四、编译执行yolov7-tensorrt工程

下载源码并编译

git clone https://github.com/FeiYull/tensorrt-alpha
cd tensorrt-alpha/yolov7
mkdir build
cd build
cmake ..
make -j10
# note: the dstImage will be saved in tensorrt-alpha/yolov7/build by default

执行推理任务,支持图片、视频、摄像头

## 640
# infer image
./app_yolov7  --model=../../data/yolov7/yolov7-tiny.trt --size=640  --batch_size=1  --img=../../data/6406401.jpg  --show --savePath
./app_yolov7  --model=../../data/yolov7/yolov7-w6.trt   --size=1280 --batch_size=1  --img=../../data/6406401.jpg  --show --savePath=../

# infer video
./app_yolov7  --model=../../data/yolov7/yolov7-tiny.trt     --size=640 --batch_size=8  --video=../../data/people.mp4  --show 

# infer camera
./app_yolov7  --model=../../data/yolov7/yolov7-tiny.trt     --size=640 --batch_size=4  --cam_id=0  --show

在这里插入图片描述

五、结束语

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

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

【招招制敌】修改element-ui中el-image 预览图大小的默认尺寸,让展示效果更加有呼吸感

【招招制敌】修改element-ui中el-image 预览图大小的默认尺寸&#xff0c;让展示效果更加有呼吸感 1、问题&#xff08;需求&#xff09;2、解决2.1 深度修改不起效2.2 修改全局样式 3、效果 1、问题&#xff08;需求&#xff09; 在未修改前&#xff0c;el-image 预览图大小的…

Element学习使用

引入: npm方式: npm i element-ui -S 或: cnpm install element-ui --save 要先整合cnpm 在项目中引入: 1.main.js import element-ui/lib/theme-chalk/index.css; import ElementUI from element-ui;Vue.use(ElementUI)引入网址组件方式: <!-- 引入样式 --> <lin…

AI智能助理系统在线提问系统 轻松解答,快速解决问题

今天给大家分享一款AI智能助理系统在线提问系统&#xff0c;也就是人工智能对话系统&#xff0c;&#xff0c;它可以陪你聊天&#xff0c;帮你写文章&#xff0c;帮你写论文&#xff0c;帮你写代码&#xff0c;帮你写小说&#xff0c;帮你创意策划&#xff0c;帮你做Excel表格&…

联合和枚举!!详解

目录 1. 1联合体类型的声明 1.2. 联合体的特点 1.3. 联合体⼤⼩的计算 1.4联合体有什么用&#xff1f; 1.5用联合体判断机器大小端。 2.1枚举类型 2.1.1枚举类型的声明 2.2枚举类型的优点 1. 1联合体类型的声明 和结构体类似&#xff0c;联合体也由成员变量组成&#x…

《UnityShader入门精要》学习4

一个最简单的顶点/片元着色器 一个最简单的顶点/片元着色器 Unity Shader的基本结构。它包含了Shader、Properties、SubShader、Fallback等语义块。顶点/片元着色器的结构与之大体类似 Shader "MyShaderName" {Properties {// 属性}SubShader {// 针对显卡A的S…

安全隐患随手拍小程序搭建-人人都是安全员活动

各生产型企业都会组织开展“安全隐患随手拍”活动&#xff0c;目的就是使广大职工积极发现身边的安全隐患&#xff0c;从而提高自身安全意识&#xff0c;重视安全生产&#xff0c;营造“人人查安全、人人保安全”的良好氛围。 可传统靠微信群组或QQ邮箱上报隐患方式&#xff0c…

Linux服务器快速搭建pytorch

Linux服务器搭建pytorch 文章目录 Linux服务器搭建pytorch一、使用FileZilla传输Anaconda二、激活Anaconda环境1.创建一个虚拟环境2.使用已有项目生成requirements.txt3.在虚拟环境中使用requirements.txt安装其他项目相关库 总结 一、使用FileZilla传输Anaconda 提示&#xf…

微信小程序获取当前日期时间

一、直接使用方式 在小程序中获取当前系统日期和时间&#xff0c;可直接拿来使用的常用的日期格式 //1. 当前日期 YYYY-MM-DDnew Date().toISOString().substring(0, 10)new Date().toJSON().substring(0, 10)//2. 当前日期 YYYY/MM/DDnew Date().toLocaleDateString()//3.…

计算机图形学(有效边表算法)用知识,改变命运的秘密【Morty深度干货】视频学习

目录 1.你所身处的世界&#xff0c;其实并非是一个真实的世界 3、哪些知识&#xff0c;会真正影响到我们的人生 你要用大量的精力去学习对于你的人生能产生实际价值的领域的知识 历史 经济学 金融与投资 心理学 永远不要去相信人&#xff0c;而是要去相信人性 成长的路…

2023年中国禽流感疫苗产量、需求量及市场规模分析[图]

禽流感疫苗是以甲型流行性感冒病毒H5N1、H9N2等毒株经处理后制备的灭活疫苗。用于预防人感染高致病性禽流感病毒感染&#xff0c;控制禽流感的流行。 从产业链来看&#xff0c;禽流感疫苗行业上游为原材料市场&#xff0c;主要有非免蛋、血清、佐剂等。禽流感疫苗行业下游主要为…

博客系统(java,MySQL,HTML)

项目展示&#xff1a; 1.输入 http://127.0.0.1:8080/blog_system/login.html 即可进入登录页面 2.输入正确的用户名和密码后进入博客列表页 要是用户名或密码输入错误&#xff0c;会弹出错误提示框 3.点击查看全文&#xff0c;可以进入博客详情页查看详细信息 4.点击写博客&a…

Studio One6.5中文版本下载安装步骤

在唱歌效果调试当中&#xff0c;我们经常给客户安装的几款音频工作站。第一&#xff0c;Studio One 6是PreSonus公司开发的一款功能强大的音频工作平台&#xff0c;具有丰富的音频处理功能和灵活的工作流程。以下是Studio One6的一些主要特点&#xff1a; 1.多轨录音和编辑&…

树模型(三)决策树

决策树是什么&#xff1f;决策树(decision tree)是一种基本的分类与回归方法。 长方形代表判断模块 (decision block)&#xff0c;椭圆形成代表终止模块(terminating block)&#xff0c;表示已经得出结论&#xff0c;可以终止运行。从判断模块引出的左右箭头称作为分支(branch)…

lc42接雨水详解

1 42. 接雨水 接雨水 2 推荐阅读的解析 《接雨水》详细通俗的思路分析&#xff0c;多解法 推荐观看方法&#xff1a;二、三和四 3 不懂的地方-方法四的一个判断条件 以下是疑问的地方 height [ left - 1] 是可能成为 max_left 的变量&#xff0c; 同理&#xff0c;height…

隧道代理-

文章目录 代理代理使用场景VPS建立隧道frpMSF木马生成监听开启frp服务端和客户端执行exe木马文件 代理 实验环境&#xff1a; 攻击机kali&#xff1a;192.168.160.32&#xff08;NAT模式&#xff09;模拟的公网服务器&#xff08;本机&#xff09;&#xff1a;10.9.75.214失陷…

SQL Server远程登录失败

SQL Server远程登录失败 检查SQL SERVER 是否允许远程访问. 具体步骤: 1)在远端SQL Server主机上,打开SSMS并连接数据库 2)在相应”数据库”上单击右键,选择”属性” 3)选择”连接”选项卡,检查”远程服务器连接”下,RPC服务是否选择. 设置SQL Server相关TCP连接 1.打开SQL Se…

代码随想录算法训练营第天十六天丨 二叉树part04

文档讲解&#xff1a;代码随想录 状态&#xff1a;已完成 513.找树左下角的值 思路 递归 分析一下题目&#xff1a;在树的最后一行找到最左边的值。 首先要是最后一行&#xff0c;然后是最左边的值。 如果使用递归法&#xff0c;如何判断是最后一行呢&#xff0c;其实就是…

为数据列表的每条记录生成对应的二维码

效果图&#xff1a; 一、前端 <!DOCTYPE html> <html lang"zh" xmlns:th"http://www.thymeleaf.org" xmlns:shiro"http://www.pollix.at/thymeleaf/shiro"> <head><th:block th:include"include :: header(固定资产…

CA与区块链之数字签名详解

CA与区块链验证本质上都是数字签名&#xff0c;首先&#xff0c;我们看一下什么是数字签名&#xff01; 数字签名 数字签名是公钥密码学中的一种技术&#xff0c;用于验证信息的完整性和发送者的身份。简而言之&#xff0c;数字签名是一种确认信息来源和信息完整性的手段。它通…

沉睡的木乃伊:var_export() 与可解析字符串

文章目录 参考环境var_export()概念应用场景数据持久化调试 函数 var_export() 自定义类__set_state() 魔术方法设置 __set_state 魔术方法的逻辑以复原对象注意事项 通用内置空类 stdClassstdClass对 __set_state() 的天然支持 参考 项目描述搜索引擎Bing、GoogleAI 大模型文…