Jetson Nano tensorrt部署YOLOX流程

简介: Jetson Nano tensorrt部署YOLOX流程

Jetson Nano tensorrt部署YOLOX流程


1. 起因


之前项目本来是cpu跑,后来硬件对于视频编解码来不及,于是整个项目换到GPU环境上重构.由于之前部署用的模型是yolov5效果很差并且yolox是易于新手部署的,于是用yolox重新训了一版模型,效果有很大提升.昨天部署到边缘盒子中需要在盒子里重新做模型转换因此有了这篇Blog,这篇Blog主要记录一下部署流程.


2. 开始


部署流程大致如下:


  1. 训练好模型,导出onnx
  2. onnx转tensorrt
  3. 改写前处理/后处理部分,以及输入输出,利用tensorrt推理
  4. 编译进行测试
  5. 整合项目


这篇Blog默认是已经有了onnx模型以后的流程,模型训练以及导出onnx在官方代码库中都有很好的实现,根据自己需要导出就行.其实yolox是非常易于部署的,官方差不多已经把整套流程都写好了,这也是为什么拿它当例子的原因,应该可以算得上部署的“hello world”了吧


2.1 onnx转tensorrt


将转出的onnx模型scp传到Nano中,Nano应该是默认配置好了tensorrt环境的,所以只需要找到trtexec就可以直接转换了

image.png


我的环境下直接去/usr/src/tensorrt/bin/下就有这个,然后运行转换命令

./trtexec --onnx=yolox.onnx --saveEngine=yolox.trt --fp16

这里我默认batchsize就是1,所以不用添加optShapes(min,max).另外workspace也是用默认值就好


2.2 C++部分


我们需要用c++结合opencv,tensorrt重写模型的前处理以及后处理,这部分官网给出了demo,我们只需要拷贝下来然后根据自己需要修改一下.


首先去下载代码github.com/Megvii-Base…


然后修改CMakeLists中的链接库路径,查看cudnn等可以试试下面命令

ls /usr/lib/aarch64-linux-gnu | grep dnn


image.png

看到了对应的一些链接库文件,说明我们只需要把link_directories设置为这个路径

最终修改后的CMakeLists.txt如下


image.png


接下来修改cpp中的一些设置


首先是输入和输出的名字,这些是导出onnx时绑定的,你得去看export onnx时设置的input和output,这个要对应上.比如我导出时input是images,output是output,所以这里修改INPUT_BLOB_NAME="images"


image.png

然后根据自己的模型预测结果修改预测类别数和名字


image.png


剩下的如果没有对yolox进行改进或者没有添加处理步骤,其他都都不需要改


2.3 编译并测试


万事俱备开始编译


cmake .
make -j8
复制代码


就可以看到yolox这个可执行文件,然后进行测试

./yolox ./yolox.trt -i ./imgs/1.png

下面是输入的图片以及输出的预测图片


image.png

可以看出我们需要的车型分类以及单轮双轮都检测出来了,然后测试没问题之后把这部分代码移植到项目中,并将nms和置信度设置添加到config文件中,最终实际推理时间也能达到准实时符合要求.


3. 总结


其实这些并不难,难点都在针对各种实际问题设计高效算法,这才是最需要思考的,部署这部分多玩几次自然就熟练了.

目录
相关文章
|
关系型数据库 MySQL 测试技术
MySQL的`IN`的优化经验
限制IN列表的长度:IN子句中的元素数量较多时,会显著降低查询性能。尽量减少IN中的项数量。
1125 0
|
数据处理 开发工具 git
coco2017数据集转换为yolo格式(记录过程)
最近做一个yolov5的落地应用项目,用的anylabeling打标,需要将coco2017的数据集转为yolo格式,故写下记录过程!
|
Ubuntu 开发工具 计算机视觉
RK3588 RGA 图像操作
RK3588 RGA 图像操作
|
自然语言处理 算法 数据挖掘
自蒸馏:一种简单高效的优化方式
背景知识蒸馏(knowledge distillation)指的是将预训练好的教师模型的知识通过蒸馏的方式迁移至学生模型,一般来说,教师模型会比学生模型网络容量更大,模型结构更复杂。对于学生而言,主要增益信息来自于更强的模型产出的带有更多可信信息的soft_label。例如下右图中,两个“2”对应的hard_label都是一样的,即0-9分类中,仅“2”类别对应概率为1.0,而soft_label
自蒸馏:一种简单高效的优化方式
正则表达式 - 中文、英文姓名匹配
正则表达式 - 中文、英文姓名匹配
4478 0
|
10月前
|
安全 Ubuntu 数据安全/隐私保护
怎么解决无法拉取Docker镜像?不如我们自己建一个加速站(
本教程介绍如何通过GitHub Actions与阿里云容器镜像服务,构建私有Docker镜像加速通道,解决国内无法拉取微软官方Jekyll开发镜像的问题。适用于个人救急使用,无需依赖公共加速器,安全高效。
1258 9
怎么解决无法拉取Docker镜像?不如我们自己建一个加速站(
|
API Python 数据格式
深度分析京东API接口,用Python脚本实现
深度分析京东API接口,用Python脚本实现
|
人工智能 自然语言处理 监控
【惊喜】25.5k star 被公认为最省时的后台模板:ngx‑admin 深度解析!
小华同学专注分享高效工作与前沿AI工具,每日精选开源技术与实战技巧,助你节省50%时间,快速提升效率。订阅用户已超10万+,覆盖多种技术领域,免费获取升级秘籍!
474 0
|
9月前
|
存储 弹性计算 测试技术
2026年阿里云服务器购买流程及配置选择新手图文指南
阿里云服务器主要分为轻量应用服务器和云服务器 ECS 两类,选择时需结合实际应用场景,从实例类型、CPU 内存、公网带宽、存储配置四个核心维度考虑,确保资源匹配需求且成本合理。购买时,特价机型可通过官方活动页面直接选购,企业级高性能服务器或有特殊配置需求的场景,则需通过云服务器 ECS 官方页面自定义购买,下面详细介绍配置选择方法与购买流程。
|
监控 Java Linux
Jetson 学习笔记(十二):CSI摄像头实现rtsp流的传输并对动态获取多路流进行探索
本文是关于如何在Jetson设备上使用CSI摄像头实现RTSP流传输的详细教程,包括安装依赖、编译gst-rtsp-server、测试、源代码介绍以及如何动态获取多路流的RTSP服务器。
1805 2
Jetson 学习笔记(十二):CSI摄像头实现rtsp流的传输并对动态获取多路流进行探索