ubuntu下yolox tensorrt模型部署

  • TensorRT系列教程之 Windows10下yolov8 tensorrt模型加速部署
  • TensorRT系列教程之 Linux下 yolov8 tensorrt模型加速部署
  • TensorRT系列教程之 Linux下 yolov7 tensorrt模型加速部署
  • TensorRT系列教程之 Linux下 yolov6 tensorrt模型加速部署
  • TensorRT系列教程之 Linux下 yolov5 tensorrt模型加速部署
  • TensorRT系列教程之 Linux下 yolox tensorrt模型加速部署

    文章目录

    • ubuntu下yolox 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并设置
      • 二、yolox环境安装与onnx导出
      • 三、利用tensorrt编译onnx模型
      • 四、编译执行yolox-tensorrt工程
      • 五、结束语

ubuntuyolox_tensorrt_8">ubuntu下yolox tensorrt模型部署

  • YOLOX是一种基于深度学习的目标检测算法,它的主要优点是速度快、精度高。相比其他目标检测算法,YOLOX在保持高精度的同时,能够实现更快的检测速度,这使得它在实际应用中具有很大的优势。
  • YOLOX的创新点主要体现在两个方面:SimOTA和PANet。SimOTA是一种基于Transformer的目标检测算法,它通过引入自注意力机制来提高模型的表达能力,从而提高了检测精度。PANet是一种金字塔注意力网络,它能够在不同的尺度上对目标进行检测,从而提高了模型的鲁棒性。
  • 在业内,YOLOX已经得到了广泛的认可和应用。例如,在Kaggle的车辆检测挑战赛中,YOLOX获得了第一名的好成绩。此外,YOLOX还在COCO数据集上取得了很好的性能表现。这些成果表明,YOLOX是一种非常优秀的目标检测算法,具有很高的实用价值和广泛的应用前景。
  • 从性能方面来看,YOLOX在速度和精度上都表现出色。在速度方面,YOLOX比其他一些主流的目标检测算法要快很多,这使得它在实时场景下的应用具有很大的优势。在精度方面,YOLOX与其他一些高精度的目标检测算法相当甚至更好。这些优点使得YOLOX成为了一种非常受欢迎的目标检测算法。
  • 总之,YOLOX是一种非常优秀的目标检测算法,它具有速度快、精度高、创新性强等优点。在业内已经得到了广泛的认可和应用,并且在性能方面表现出色。未来,随着深度学习技术的不断发展和完善,相信YOLOX将会在更多的领域发挥出更大的作用。

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

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

二、yolox环境安装与onnx导出

推理的时候是支持多batch推理的,本文以batch_size=1为例子,可以直接从网盘下载onnx文件[weiyun]:weiyun or google driver ,你也可以自己下载仓库,然后按照下面指令手动导出onnx文件:

# 下载yolox源码
git clone https://github.com/Megvii-BaseDetection/YOLOX

切换版本为yolox 0.3.0

git checkout  0.3.0

安装 yolox环境

pip install -r requirements.txt

用以下指令导出onnx模型文件,640表示模型的输入分辨率为:640X640,416同理表示:416X416。

# 640 for image
python tools/export_onnx.py --output-name=yolox_s.onnx  --exp_file=exps/default/yolox_s.py --ckpt=yolox_s.pth --decode_in_inference --batch-size=1
python tools/export_onnx.py --output-name=yolox_m.onnx  --exp_file=exps/default/yolox_m.py --ckpt=yolox_m.pth --decode_in_inference --batch-size=1
python tools/export_onnx.py --output-name=yolox_x.onnx  --exp_file=exps/default/yolox_x.py --ckpt=yolox_x.pth --decode_in_inference --batch-size=1
python tools/export_onnx.py --output-name=yolox_s.onnx  --exp_file=exps/default/yolox_s.py --ckpt=yolox_s.pth --decode_in_inference --batch-size=1
# 416 for image
python tools/export_onnx.py --output-name=yolox_nano.onnx --exp_file=exps/default/yolox_nano.py --ckpt=yolox_nano.pth --decode_in_inference --batch-size=1
python tools/export_onnx.py --output-name=yolox_tiny.onnx --exp_file=exps/default/yolox_tiny.py --ckpt=yolox_tiny.pth --decode_in_inference --batch-size=1

三、利用tensorrt编译onnx模型

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

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

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

# 640
../../../../TensorRT-8.4.2.4/bin/trtexec   --onnx=yolox_s.onnx   --saveEngine=yolox_s.trt  --buildOnly
../../../../TensorRT-8.4.2.4/bin/trtexec   --onnx=yolox_m.onnx   --saveEngine=yolox_m.trt  --buildOnly
../../../../TensorRT-8.4.2.4/bin/trtexec   --onnx=yolox_x.onnx   --saveEngine=yolox_x.trt  --buildOnly

# 416
../../../../TensorRT-8.4.2.4/bin/trtexec   --onnx=yolox_nano.onnx   --saveEngine=yolox_nano.trt  --buildOnly
../../../../TensorRT-8.4.2.4/bin/trtexec   --onnx=yolox_tiny.onnx   --saveEngine=yolox_tiny.trt  --buildOnly

四、编译执行yolox-tensorrt工程

使用命令行编译下代码

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

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

## 640
# infer image
./app_yolox  --model=../../data/yolox/yolox_s.trt     --size=640 --batch_size=1  --img=../../data/6406401.jpg  --show --savePath=../

# infer video
./app_yolox  --model=../../data/yolox/yolox_s.trt     --size=640 --batch_size=1  --video=../../data/people.mp4  --show 

# infer camera
./app_yolox  --model=../../data/yolox/yolox_s.trt     --size=640 --batch_size=1  --cam_id=0  --show

# 416
./app_yolox  --model=../../data/yolox/yolox_nano.trt  --size=416 --batch_size=1  --img=../../data/6406401.jpg  --show --savePath

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

五、结束语

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


http://www.niftyadmin.cn/n/5096013.html

相关文章

汉得欧洲x甄知科技 | 携手共拓全球化布局,助力出海中企数智化发展

HAND Europe 荣幸获得华为云颁发的 GrowCloud 合作伙伴奖项&#xff0c;进一步巩固了其在企业数字化领域的重要地位。于 2023 年 10 月 5 日&#xff0c;HAND Europe 参加了华为云荷比卢峰会&#xff0c;并因其在全球拓展方面的杰出贡献而荣获 GrowCloud 合作伙伴奖项的认可。 …

Can Language Models Make Fun? A Case Study in Chinese Comical Crosstalk

本文是LLM系列文章&#xff0c;针对《Can Language Models Make Fun? A Case Study in Chinese Comical Crosstalk》的翻译。 语言模型能制造乐趣吗?中国滑稽相声个案研究 摘要1 引言2 问题定义3 数据集4 使用自动评估生成基准5 人工评估6 讨论7 结论与未来工作 摘要 语言是…

Zhong__Certbot简单使用

时间&#xff1a;2023.10.16 环境&#xff1a;Ubuntu 22系统云服务器/Nginx 目的&#xff1a;使用https方式访问网站 说明&#xff1a; 作者&#xff1a;Zhong Certbot网站&#xff1a;Certbot 假设我们的网站为 www.zhong.com 我们想要通过 https://www.zhong.com 网址…

PHP 火车票售票查询管理系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP火车票售票查询管理系统是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 PHP 火车票售票查询管理系统1 代码 https://download.csdn.net/download/qq_41…

如何构建前端自动化测试套件?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

SLAM从入门到精通(a*搜路算法)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 目前机器人常用的搜路算法主要有这么几种&#xff0c;迪杰斯特拉算法、a*算法、贪心算法。每一种算法都有自己的场景和优势&#xff0c;可以灵活选…

【多线程】JUC(java.util.concurrent)的常见类 信号量 线程安全的集合类

目录 1. Callable接口 1.1 Callable接口和Runnable接口的区别&#xff1f; 1.2 使用Callable接口编写代码。 2. ReentrantLock 可重入锁 3.信号量 semaphore 3.1 Java中信号量的使用 4.CountDownLatch JUC: java.util.concurrent -> 这个包里的内容主要是一些多线程…

C# Winform编程(2)常用控件

C# Winform编程&#xff08;2&#xff09;常用控件 常用控件 常用控件 标签&#xff0c;文本&#xff0c;按钮&#xff0c;列表框&#xff0c;组合框等的使用 Program.cs using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks…