ubuntu下yolov6 tensorrt模型部署

文章目录

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

ubuntu下yolov6 tensorrt模型部署

YOLOv6是一款由美团视觉智能部开发的目标检测框架,它包含了模型训练、推理及部署的全流程,适用于工业应用场景。以下是关于YOLOv6的多方面介绍。

  • 首先,在模型结构方面,YOLOv6采用了更为精细的骨干网络设计,例如使用轻量级网络结构TinyNet,相比于传统的CNN网络,它在计算量和参数量上都得到了显著减少,同时保持了良好的性能。

  • 其次,在训练策略上,YOLOv6引入了分布式训练和多卡并行训练技术,能够高效利用计算资源进行模型训练。此外,YOLOv6还采用了知识蒸馏等训练技巧,使得学生模型能够从教师模型中学习到知识,从而提高了模型性能。

  • 此外,YOLOv6在算法层面也有多项改进和优化。例如,它提出了SPP-O与Generalized-LSTM-O两种创新结构,使得模型在特征提取和时空信息捕捉方面表现更加优异。此外,YOLOv6还采用了混合损失函数,将样本权重的差异考虑到损失函数中,对于样本权重的差异能够进行有效的学习。

  • 最后,在应用场景方面,YOLOv6广泛应用于多种业务场景中,例如视频异常检测、工业质检等。以工业质检为例,YOLOv6能够高效准确地检测出生产线上的缺陷产品,从而提高了工业生产效率和质量。

  • 总之,YOLOv6这款目标检测框架具有高效、精准、轻量化的优点,它在模型结构、训练策略、算法层面及应用场景等方面都展现出优秀的性能及创新点。

本文提供yolov6tensorrt加速方法。
有源码!有源码!有源码! 不要慌,哈哈哈。
在这里插入图片描述

![yolov7-tiny : Offical( left ) vs Ours( right )](https://img-blog.csdnimg.cn/7a547edbe00f4b0e94490b876dd2d988.jpe

yolov6s : 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)

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

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

# 下载yolov6源码
git clone https://github.com/meituan/YOLOv6

切换版本为6.3.0

git checkout  0.3.0

安装 yolov6环境

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/yolov6

cd tensorrt-alpha/data/yolov6
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=yolov6n.onnx   --saveEngine=yolov6n.trt  --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
../../../../TensorRT-8.4.2.4/bin/trtexec   --onnx=yolov6s.onnx   --saveEngine=yolov6s.trt  --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
../../../../TensorRT-8.4.2.4/bin/trtexec   --onnx=yolov6m.onnx   --saveEngine=yolov6m.trt  --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
../../../../TensorRT-8.4.2.4/bin/trtexec   --onnx=yolov6l.onnx   --saveEngine=yolov6l.trt  --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:4x3x640x640 --maxShapes=images:8x3x640x640
# 1280
../../../../TensorRT-8.4.2.4/bin/trtexec   --onnx=yolov6n6.onnx   --saveEngine=yolov6n6.trt  --buildOnly --minShapes=images:1x3x1280x1280 --optShapes=images:4x3x1280x1280 --maxShapes=images:8x3x1280x1280
../../../../TensorRT-8.4.2.4/bin/trtexec   --onnx=yolov6s6.onnx   --saveEngine=yolov6s6.trt  --buildOnly --minShapes=images:1x3x1280x1280 --optShapes=images:4x3x1280x1280 --maxShapes=images:8x3x1280x1280
../../../../TensorRT-8.4.2.4/bin/trtexec   --onnx=yolov6m6.onnx   --saveEngine=yolov6m6.trt  --buildOnly --minShapes=images:1x3x1280x1280 --optShapes=images:4x3x1280x1280 --maxShapes=images:8x3x1280x1280
../../../../TensorRT-8.4.2.4/bin/trtexec   --onnx=yolov6l6.onnx   --saveEngine=yolov6l6.trt  --buildOnly --minShapes=images:1x3x1280x1280 --optShapes=images:4x3x1280x1280 --maxShapes=images:8x3x1280x1280

四、编译执行yolov6-tensorrt工程

使用命令行编译下代码

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

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

## 640
# infer image
./app_yolov6  --model=../../data/yolov6/yolov6n.trt --size=640  --batch_size=1  --img=../../data/6406401.jpg  --show --savePath=../
# infer video
./app_yolov6  --model=../../data/yolov6/yolov6n.trt     --size=640 --batch_size=8  --video=../../data/people.mp4  --show # infer camera
./app_yolov6  --model=../../data/yolov6/yolov6n.trt     --size=640 --batch_size=4  --cam_id=0  --show## 1280
# infer video
./app_yolov6  --model=../../data/yolov6/yolov6s6.trt --size=1280  --batch_size=8  --video=../../data/people.mp4  --savePath=../

例如:以下是yolov6推理视频流效果。
![在这里插入图片描述](https://img-blog.csdnimg.cn/fd762cf61ad944dc96be050baded5441.g

五、结束语

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最近公共祖先

一、题目 将一棵无穷大满二叉树的结点按根结点一层一层地从左往右编号&#xff0c;根结点编号为1。现给定a&#xff0c;b为两个结点。设计一个算法&#xff0c;返回a、b最近的公共祖先的编号。注意其祖先也可能是结点本身。 二、代码 class LCA { public:int getLCA(int a, i…

Eclipse插件安装版本不兼容问题解决方案——Papyrus插件为例

项目场景: Eclipse Papyrus安装后,没有新建Papyrus工程选项,也没有新建Papyrus Model的选项。 打开Papyrus Model会报错 问题描述 同样的,安装其他插件也是。可能某个插件之前安装是好用的,结果Eclipse的版本更新了,就再也安装不好用了 原因分析: 根本原因是因为包之…

数字孪生技术:新零售的未来之路

随着科技的不断进步&#xff0c;新零售产业正经历着巨大的变革。数字孪生作为一种新兴技术正在加速这一变革的进程。它不仅为新零售企业带来了更高效的运营方式&#xff0c;还为消费者提供了更个性化、便捷的购物体验。那么&#xff0c;数字孪生技术究竟如何在新零售产业中发挥…

415. 字符串相加

415. 字符串相加 class Solution { public:string addStrings(string num1, string num2){//i j分别指向当前字符串的最后一位int i num1.length() - 1;int j num2.length() - 1;int add 0;string s "";//不要忽略两个串都遍历完了 但是还有一个进位while (i …

十七、【渐变工具组】

文章目录 渐变工具油漆桶工具 渐变工具 渐变样式有5种&#xff0c;分别是线性渐变&#xff0c;径向渐变&#xff0c;角度渐变&#xff0c;对称渐变&#xff0c;菱形渐变 另外渐变工具的颜色可以进行编辑&#xff0c;需要先打开渐变编辑工具&#xff1a; 如何使用渐变编辑工…

MVVM 与 MVC区别和应用场景?

MVVM 和 MVC 1. MVC2. MVVM 1. MVC MVC 是 Model View Controller 的缩写 Model&#xff1a;模型层&#xff0c;是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。View&#xff1a;视图层&#xff0c;用户界面渲染逻辑&#xff0c;通常视图…

Elasticsearch 分片内部原理—使文本可被搜索、动态更新索引

目录 一、使文本可被搜索 不变性 二、动态更新索引 删除和更新 一、使文本可被搜索 必须解决的第一个挑战是如何使文本可被搜索。 传统的数据库每个字段存储单个值&#xff0c;但这对全文检索并不够。文本字段中的每个单词需要被搜索&#xff0c;对数据库意味着需要单个字…

Hadoop 安装教程 (Mac m1/m2版)

安装JDK1.8 这里最好是安装1.8版本的jdk 1. 进入官网Java Downloads | Oracle Hong Kong SAR, PRC,下滑到中间区域找到JDK8 2.选择mac os,下载ARM64 DMG Installer对应版本 注&#xff1a;这里下载需要注册oracle账号&#xff0c;不过很简单&#xff0c;只需要提供邮箱即可&…

【软件设计师-下午题总结】

目录 下午题之总结于学习记录&#xff1a;题一、数据流图&#xff1a;1、熟悉相关的图形2、实体名称3、数据存储4、补充缺失的数据流和起点终点5、用结构化语言描述6、描述&#xff0c;找加工逻辑的时候7、如何保持数据流平衡 题二&#xff1a;实体联系图&#xff1a;1、常用图…

TensorFlow入门(二十一、softmax算法与损失函数)

在实际使用softmax计算loss时,有一些关键地方与具体用法需要注意: 交叉熵是十分常用的,且在TensorFlow中被封装成了多个版本。多版本中,有的公式里直接带了交叉熵,有的需要自己单独手写公式求出。如果区分不清楚,在构建模型时,一旦出现问题将很难分析是模型的问题还是交叉熵的使…

PTE考试解析

Pte 考试题目 注入漏洞 空格被过滤 用/**/代替空格&#xff0c;发现#被过滤 对&#xff03;进行url编码为%23 输入构造好的payload http://172.16.12.100:81/vulnerabilities/fu1.php?id1%27)/**/and/**/11%23 http://172.16.12.100:81/vulnerabilities/fu1.php?id1%27)/*…

LruCache实现原理

序、慢慢来才是最快的方法。 回顾 LRU &#xff08;Least Recently Used&#xff09;最近最少策略是最常用的缓存淘汰策略。LRU 策略会记录各个数据块的访问 “时间戳” &#xff0c;最近最久未使用的数据最先被淘汰。与其他几种策略相比&#xff0c;LRU 策略利用了 “局部性…

如何使用ChatPPT生成PPT文档

简介 ChatPPT是一个基于人工智能的PPT生成工具&#xff0c;可以帮助用户快速生成高质量的PPT文档。ChatPPT使用自然语言处理技术&#xff0c;可以根据用户的指令生成PPT内容、设计和排版。 使用方法 ChatPPT提供了两种使用方式&#xff1a;在线体验版和Office插件版。 在线…

【数据结构】:队列的实现

队列 队列的概念及结构 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出 FIFO(First In First Out) 入队列&#xff1a;进行插入操作的一端称为队尾 出队列&#xff1a;进行删除操作的一端称为队…

为Mkdocs网站添加评论系统(以giscus为例)

官方文档&#xff1a;Adding a comment system 这里我同样推荐giscus 利用 GitHub Discussions 实现的评论系统&#xff0c;让访客借助 GitHub 在你的网站上留下评论和反应吧&#xff01;本项目深受 utterances 的启发。 开源。&#x1f30f;无跟踪&#xff0c;无广告&#…

虚拟机安装Docker

安装Docker Docker 分为 CE 和 EE 两大版本。CE 即社区版&#xff08;免费&#xff0c;支持周期 7 个月&#xff09;&#xff0c;EE 即企业版&#xff0c;强调安全&#xff0c;付费使用&#xff0c;支持周期 24 个月。 Docker CE 分为 stable test 和 nightly 三个更新频道。…

交通 | python网络爬虫:“多线程并行 + 多线程异步协程

推文作者&#xff1a;Amiee 编者按&#xff1a; 常规爬虫都是爬完一个网页接着爬下一个网页&#xff0c;不适应数据量大的网页&#xff0c;本文介绍了多线程处理同时爬取多个网页的内容&#xff0c;提升爬虫效率。 1.引言​ 一般而言&#xff0c;常规爬虫都是爬完一个网页接着…

如何通过MES系统提高生产计划效率?

导 读 ( 文/ 1730 ) 在现代制造业中&#xff0c;通过制造执行系统&#xff08;MES&#xff09;系统来提高生产计划效率是至关重要的。本文将介绍如何通过MES系统来优化生产计划&#xff0c;包括实时数据分析、智能排程和协同协作。通过这些关键方法&#xff0c;企业可以提高生产…

Flink之窗口聚合算子

1.窗口聚合算子 在Flink中窗口聚合算子主要分类两类 滚动聚合算子(增量聚合)全窗口聚合算子(全量聚合) 1.1 滚动聚合算子 滚动聚合算子一次只处理一条数据,通过算子中的累加器对聚合结果进行更新,当窗口触发时再从累加器中取结果数据,一般使用算子如下: aggregatemaxmaxBy…

如何通过 NFTScan API 按照 NFT 合约地址检索数据?

在当前 NFT 市场还在不断扩张的背景下&#xff0c;各种 NFT 项目依旧是井喷式涌现&#xff0c;投资者和开发者都面临获取项目全貌数据的困境。公链上提取和处理大量的数据既费时又费力&#xff0c;缺乏全面的信息支持&#xff0c;将难以深入判断一个 NFT 项目的真实情况&#x…