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. 总结


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

shelgi
+关注
目录
打赏
0
0
0
0
16
分享
相关文章
Jetson学习笔记(四):pth(torch模型文件)转trt(tensorrt引擎文件)实操
关于如何使用torch2trt工具将PyTorch模型转换为TensorRT引擎文件的实操指南。
422 1
Jetson学习笔记(四):pth(torch模型文件)转trt(tensorrt引擎文件)实操
YOLOv8有效改进系列及项目实战目录 包含卷积,主干 注意力,检测头等创新机制 以及 各种目标检测分割项目实战案例
这个摘要主要涵盖了一个关于YOLO目标检测的深度学习专栏的内容概览。该专栏专注于YOLO算法的历史、前沿研究和实战应用,提供了一系列的文章,详细讲解了YOLO的改进方法,包括卷积优化、损失函数创新、注意力机制、网络结构和主干网络的更新,以及针对不同场景如红外成像、小目标检测等的应用。此外,还提供了每周多次的更新频率以保持内容的时效性,并指导读者进行论文写作和项目实现,包括具体的代码示例和实战项目,如行人检测、对象分割、姿态估计等。该专栏还涉及到面试准备和实习就业指导,帮助读者提升在图像算法领域的专业技能。
Nvidia Isaac Sim安装与配置 入门教程 2024(2)
本文是Nvidia Isaac Sim安装与配置的入门教程,指导用户如何检查系统配置、安装Omniverse环境、配置Nucleus服务器、安装Isaac Sim软件包、设置命令行环境和编辑器环境,以及如何启动Isaac Sim仿真和加载机器人与环境。
2969 0
NoSQL数据库与传统关系型数据库的比较
【7月更文挑战第29天】NoSQL数据库与传统关系型数据库各有其独特的优势和适用场景。关系型数据库在复杂查询、事务处理和一致性方面表现出色,但在扩展性和处理大规模数据集时可能受到限制。而NoSQL数据库则以高扩展性、高性能和高可用性为目标,适用于处理大规模数据集和高并发读写场景。在选择数据库时,开发者应根据具体的应用场景和需求进行权衡和选择。
|
11月前
【Qt 学习笔记】Qt常用控件 | 按钮类控件 | Check Box的使用及说明
【Qt 学习笔记】Qt常用控件 | 按钮类控件 | Check Box的使用及说明
286 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问