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模型加速部署
-
TensorRT系列之 Linux下 u2net 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工程
- 五、结束语
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推理结果一致。

一、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

相关文章:
ubuntu下yolox tensorrt模型部署
TensorRT系列之 Windows10下yolov8 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov8 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov7 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov6 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov5 tensorrt模型加速…...
外汇天眼:外汇投资入门必看!做好3件事,任何人都能提高交易胜率
近年来外汇市场愈来愈热络,许多投资人看准世界金融变化的趋势,纷纷开始入场布局,期望把握行情大赚一笔。 如果你之前没有做过外汇交易,建议最好先透过「外汇天眼学院」学习各种相关的知识与技术分析,等到对外汇有一定的…...
idea dubge 详细
目录 一、概述 二、debug操作分析 1、打断点 2、运行debug模式 3、重新执行debug 4、让程序执行到下一次断点后暂停 5、让断点处的代码再加一行代码 6、停止debug程序 7、显示所有断点 8、添加断点运行的条件 9、屏蔽所有断点 10、把光标移到当前程序运行位置 11、单步跳过 12、…...
短视频矩阵系统/pc、小程序版独立原发源码开发搭建上线
短视频剪辑矩阵系统开发源码----源头搭建 矩阵系统源码主要有三种框架:Spring、Struts和Hibernate。Spring框架是一个全栈式的Java应用程序开发框架,提供了IOC容器、AOP、事务管理等功能。Struts框架是一个MVC架构的Web应用程序框架,用于将数…...
Linux不同格式的文件怎么压缩和解压
Linux不同格式的文件怎么压缩和解压 tar介绍不同格式文件压缩和解压 tar介绍 tar(tape archive)是一个在Unix和类Unix操作系统中用于文件打包和归档的命令行工具。它通常与其他工具(例如gzip、bzip2、xz)一起使用来创建归档文件并…...
Java 领域模型之失血、贫血、充血、胀血模型
1.失血模型 失血模型仅仅包含数据的定义和getter/setter方法,业务逻辑和应用逻辑都放到服务层中。这种类在Java中叫POJO。 action service: 核心业务(复杂度:重) model:简单Set Get dao :数据持…...
ifndef是什么,如何使用?
引言 使用HbuilderX uni-ui模板创建的uni-app项目,main.js文件中看到有如下的注释: // #ifndef VUE3 ...... // #endif // #ifdef VUE3 ...... // #endif 相信很多没有uini-app项目开发经验的朋友,初次接触uni-app项目,可…...
PXIE板卡,4口QSFP+,PCIE GEN3 X8,XILINX FPGA XCVU3P设计
PXIE板卡,4口QSFP,PCIE GEN3 X8,基于XILINX FPGA XCVU3P设计。 1:电路拓扑 ● 支持利用 EEPROM 存储数据; ● 电源时序控制和总功耗监控; 2:电路调试 3:测试 PCIE gen3 x8&#…...
数据分析:密度图
目前拥有的数据如图,三列分别对应瑕疵种类,对应的置信 度,x方向坐标。 现在想要做的事是观看瑕疵种类和置信度之间的关系。 要显示数据分布的集中程度,可以使用以下几种常见的图形来观察: 1、箱线图(Box P…...
docker load and build过程的一些步骤理解
docker load 命令执行原理 “docker load” command, the following steps are followed to load an image from a specified tar file to the local image repository: Parsing the tar file: Docker first parses the tar file to check its integrity and verify the form…...
批量处理图像模板
以下是一个Python模板,用于批量处理图像并将处理后的图像保存在另一个文件夹中。在此示例中,将使用Pillow库来处理图像,可以使用其他图像处理库,根据需要进行修改。 首先,确保已经安装了Pillow库,可以使…...
2023_Spark_实验十四:SparkSQL入门操作
1、将emp.csv、dept.csv文件上传到分布式环境,再用 hdfs dfs -put dept.csv /input/ hdfs dfs -put emp.csv /input/ 将本地文件put到hdfs文件系统的input目录下 2、或者调用本地文件也可以。区别:sc.textFile("file:///D:\\temp\\emp.csv&qu…...
如何将几个模型合并成一个
1、什么时候需要合并模型? 组装和装配:当你需要将多个零件或组件组装成一个整体时,可以合并它们成为一个模型。例如,在制造业中,当需要设计和展示一个完整的机械装置或产品时,可以将各个零部件合并成一个模…...
异常气体识别与飘移
Olfactory Target/Background Odor Detection via Self-expression Model 解决非目标气体检测 摘要:提出了SeELM模型(自表达ELM模型) 分为两步:1.对获得的数据集进行建模,计算出自我表达系数矩阵,2.对于异…...
分类预测 | Matlab实现WOA-BiLSTM鲸鱼算法优化双向长短期记忆神经网络的数据多输入分类预测
分类预测 | Matlab实现WOA-BiLSTM鲸鱼算法优化双向长短期记忆神经网络的数据多输入分类预测 目录 分类预测 | Matlab实现WOA-BiLSTM鲸鱼算法优化双向长短期记忆神经网络的数据多输入分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现WOA-BiLSTM鲸鱼算法…...
35 机器学习(三):混淆矩阵|朴素贝叶斯|决策树|随机森林
文章目录 分类模型的评估混淆矩阵精确率和召回率 接口介绍其他的补充 朴素贝叶斯基础原理介绍拉普拉斯平滑下面给出应用的例子朴素贝叶斯的思辨 决策树基础使用基本原理信息熵信息增益信息增益率Gini指数 剪枝api介绍 随机森林------集成学习初识基本使用api介绍 分类模型的评估…...
ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+
该错误提示表示您的 OpenSSL 版本过低,无法兼容 urllib3 v2.0。 解决此问题的方法是升级您的 OpenSSL 版本至 1.1.1 或以上。具体操作如下: 方法一: 检查您的 OpenSSL 版本,使用以下命令: openssl version 如果您的…...
webrtc gcc算法(1)
老的webrtc gcc算法,大概流程: 这两个拥塞控制算法分别是在发送端和接收端实现的, 接收端的拥塞控制算法所计算出的估计带宽, 会通过RTCP的remb反馈到发送端, 发送端综合两个控制算法的结果得到一个最终的发送码率,并以…...
2022年亚太杯APMCM数学建模大赛C题全球变暖与否全过程文档及程序
2022年亚太杯APMCM数学建模大赛 C题 全球变暖与否 原题再现: 加拿大的49.6C创造了地球北纬50以上地区的气温新纪录,一周内数百人死于高温;美国加利福尼亚州死亡谷是54.4C,这是有史以来地球上记录的最高温度;科威特53…...
苹果开发者 Xcode发布TestFlight全流程
打包前注意事项 使用Xcode导出安装包之前,必须先确认账户的所有合约是否全部同意,如果有不同意的,在出包的时候会弹出报错 这是什么意思 这意味着您有一些需要在应用商店连接上验证的协议(protocol)/契约(Contract)。解决方案 连接到应用商店…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...
c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...
