文章目录
- 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加速方法。
有源码!有源码!有源码! 不要慌,哈哈哈。
一、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推理视频流效果。
五、结束语
都看到这里了,觉得可以请点赞收藏,有条件的去仓库点个star,仓库:https://github.com/FeiYull/tensorrt-alpha