【jetson nano】jetson nano环境配置+yolov5部署+tensorRT加速模型

2023-05-16

目录

  • jetson nano环境配置+yolov5部署+tensorRT加速模型
    • 致谢
    • 主机和jetson nano环境
    • jetson系统开机烧录、系统设置、换源
    • python环境配置
    • conda环境
    • yolov5环境
    • matplotlib和opencv-python
    • tensorRT加速
    • Jetson Nano的conda 虚拟环境中使用TensorRT
      • 建立软链接
      • 查看版本
    • 运行export.py和detect.py
    • 其他错误
      • KeyError: 'names'
    • 总结
    • 其他可能有用的参考文章
    • 图片展示

jetson nano环境配置+yolov5部署+tensorRT加速模型

断断续续地前后花了一个多星期配置环境以及部署模型,期间也报了无数错误,参考了很多文档,求助了身边的朋友,因此尽可能详细的记录一下这个过程。

致谢

此处感谢Xnhyacinth在配置过程中对我的帮助哈哈哈꒰ঌ( ⌯’ '⌯)໒꒱

主机和jetson nano环境

我主机上的环境是python3.9,cuda11.6
jetson nano环境jetpack4.6,cuda10.2,python3.6(conda)
jtop查看系统配置

jetson系统开机烧录、系统设置、换源

先熟悉各个接口及其功能,具体可参考NVIDIA官方文档(见下文)先组装好买来的风扇,准备好无线网卡,我用的是即插即用的usb版本的无线网卡,JD上有卖,组装时发现jetson nano开发板上有一个跳线帽,那里默认是没有短接的,这样的话只能连接电脑电源,必须先把跳线帽短接才能连接直流电源。
NVIDIA jetson nano官网
刚开始的烧录,sd卡格式化以及相关工作都是对照这个来的,基本没什么问题。完成之后就可以得到一个Ubuntu18.04的系统,然后如果有无线网卡可以直接连接WiFi,我后面一般都是通过xshell连接开发板,直接在主机操作,除了需要查看图片或者视频的时候才接屏幕。
这个阶段我还部分参考了以下文档,在此做一个记录不赘述了。
Nvidia Jetson Nano介绍与使用指南
Jetson Nano 从入门到实战(案例:Opencv配置、人脸检测、二维码检测)这篇文章我主要参考了2.4.1到2.4.3的部分,配置了一些系统环境并换源,因为不换源下载东西速度可能比较慢,具体如何换源的网上资料很多,可以自行查阅。

python环境配置

刚开始我没有用虚拟环境,自带的环境里是python2.7,先下载3.6,又在环境里装了torch,花了好几天所有环境全部装完到最后跑yolov5的时候还是报错,然后请教了其他人,让我安装conda的虚拟环境,于是从头再来,重新装conda环境。前面的坑我就不说了,我们直接安装conda环境。建议卡在这里的也可以直接使用conda环境,确实方便很多。

conda环境

安装conda环境前我们要一直意识到一个问题,jetson nano是aarch64架构的,因此Jetson Nano开发板无法成功安装Anaconda。下载所有环境配置或者网上搜攻略都要加上jetson nano或者arm64位架构。conda环境同样如此,miniconda和anconda都不支持jetson nano,我们需要下载archiconda(Archiconda是用于64位ARM平台的Conda发行版),命令和使用方式和前两者都一样,所以也很方便。下载地址如下。
下载地址
安装完成之后按照在Windows系统上一样创建环境,(可以搜索如何用conda创建环境,我这里装的是python3.6)创建完成后激活环境(我给环境取名为yolov5)

#激活环境
conda activate yolov5

然后我们需要先安装很多包,很多很多。。我参考的是下面这个链接。建议这篇文章的第七步之前都可以按照作者写的走一遍,特别是下载一些包和cmake那段,一条一条命令复制过去安装,不然后面安装环境的时候会发现很多包下载不成功。
Jetson Nano部署YOLOv5与Tensorrtx加速——(自己走一遍全过程记录)

yolov5环境

然后接下来可以直接把你的yolo代码传到开发板上(我用的xftp),也可以先用官方的代码测试一下,先把环境跑一遍。我这里是先用官方代码跑了一遍再放的自己的代码。
先在jetson nano上安装一个git,然后直接

git clone https://github.com/ultralytics/yolov5.git

应该默认的是v7.0,反正是测试无关紧要。git下来之后,cd到yolov5主目录下,直接

pip install -r requirements.txt

应该有一部分下载不成功,先别着急,可以试着看看里面有哪些包需要安装,一个一个安装,尽量选低一些版本,实在不行手动下载安装包到本地然后安装,有找不到的包可以去pypi.org搜索下载,注意选择历史版本,然后选合适的python版本和系统版本,关键词“linux”“cp36”“arrch64”。
arrch64

matplotlib和opencv-python

我当时遇到的情况是有两个包安装不上,耽搁了一天,一个是matplotlib,一个是opencv-python。第二个包我甚至参考了很多网上的编译安装opencv的教程,用c++编译安装的方式折腾了很久,实际上不需要,只要参考Jetson Nano部署YOLOv5与Tensorrtx加速——(自己走一遍全过程记录)并把作者的那些环境配置安装完之后就解决了。
全部环境安装完成之后直接命令行切到主目录然后输入python detect.py执行,如果下载速度很慢可以提前去yolov5官方仓库把yolov5s.pt下载到主目录,没有报错就会在run/detect/exp目录下生成两张图片,这就成功了。

tensorRT加速

tensorRT本质上就是把模型压缩,变得更快,因为jetson nano算力不够所以需要加速。官方仓库在这里我参考的仓库里面的README.md文档,按照他的指令转化成wts以及engine格式的模型文件。
另外还包括以下几篇文章的tensor加速部分。但是以下文章的该部分仅供参考,要确保自己的yolo以及各项版本和你下载的tensorRT一致(实际上很有可能不一致,也就是说即使生成了engine文件也用不了)。
Jetson nano上部署自己的Yolov5模型(TensorRT加速)onnx模型转engine文件
Jetson Nano部署YOLOv5与Tensorrtx加速——(自己走一遍全过程记录)
之所以说仅供参考是因为

1. 里面的部分内容与实际情况不一致
比如修改训练好的模型数量,默认是80我们不需要修改,但如果是自己训练的模型就需要修改,修改地址并非他们所说的tensorrtx/yolov5/yololayer.h,而是应该参考官方文档README里面的这样一句话:

 cd [PATH-TO-TENSORRTX]/yolov5/
 # Update kNumClass in src/config.h if your model is trained on custom dataset

上面的注释中提到了如果要修改分类数量应该在src/config.h文件中更新kNumClass变量
官方仓库文档
但是还是有可能报错,TensorRT生成engine文件异常([TRT] Network::addScale::434, condition: shift.count > 0 ?)(这是可能出现的问题之一,我还遇到了其他的错误,比如生成了engine文件却不能适配等),如果用下面的方法就不会出现这个问题。

2. 其实并不需要用上述方法,如果你是跑yolo模型
实际上yolov5主目录里有export.py,可以直接调用tensorRT包实现把模型从xx.pt到xx.engine的转换,非常方便,不需要其他操作。并且jetson nano有自带的tensorRT包,我们只需要和我们的conda环境里的包的安装目录建立软连接即可。具体方法见下节

Jetson Nano的conda 虚拟环境中使用TensorRT

建立软链接

TensorRT的系统安装路径为:/usr/lib/python3.6/dist-packages/tensorrt/(这个是大家都一样不变的)
执行以下命令,建立虚拟环境(自己的虚拟环境)对应的软链接(注意自己的archiconda的安装目录,这是本人目录仅供参考/home/alen123/archiconda3/envs/yolov5/lib/python3.6/site-packages

sudo ln -s /usr/lib/python3.6/dist-packages/tensorrt* /home/alen123/archiconda3/envs/yolov5/lib/python3.6/site-packages

查看版本

>>> python
>>> import tensorrt
>>> tensorrt.__version__

运行export.py和detect.py

完成上步工作之后,tensorRT已经作为一个包可以直接调用了,然后直接在终端执行以下代码:

python export.py --weights yolov5.pt --include engine -- device 0 

可能会报错,告诉你部分包未安装,这时候别着急安装,先cat requirements.txt,查找对应的包,以onnx为例,找到requirements.txt里面onnx对应的版本,直接在命令行下载文件要求的最低版本,默认应该是被注释掉了,在Export里面,我的是

# onnx>=1.9.0  # ONNX export

所以直接

pip install onnx==1.9.0

其他包同样如此。
重新执行

python export.py --weights yolov5.pt --include engine -- device 0 

会生成一个engine文件。如果想要在开发板上跑时有更快的速度可以加--half,降低精度的,同时可以显著提高速度,我跑自己的模型时没用tensorRT加速速度是>100ms每帧。加速后,但加--half前速度大约是50ms每帧,加了--half之后是30ms每帧。

python export.py --weights yolov5.pt --include engine --half -- device 0

然后就会生成一个xx.engine文件,再执行detect.py,可以在文件里改,如果懒得改也可以直接命令行改模型:

python detect.py --weights yolov5.engine

这样就大功告成了,如果换成自己训练好的模型也是一样的,注意模型名字,数据路径什么的变化。

其他错误

其实一遍下来还有很多其他琐碎的错误,但有些在调试过程中解决了就没有全记录下来,接下来想到可能会慢慢补充。

KeyError: ‘names’

  File "detect.py", line 368, in <module>
    main(opt)
  File "detect.py", line 262, in main
    run(**vars(opt))
  File "/home/alen123/archiconda3/envs/yolov5/lib/python3.6/site-packages/torch/autograd/grad_mode.py", line 27, in decorate_context
    return func(*args, **kwargs)
  File "detect.py", line 98, in run
    model = DetectMultiBackend(weights, device=device, dnn=dnn, data=data, fp16=half)
  File "/home/alen123/yolov5-7.0/models/common.py", line 500, in __init__
    names = yaml_load(data)['names'] if data else {i: f'class{i}' for i in range(999)}
KeyError: 'names'

在跑自己的模型时遇到的,原因是数据的yaml文件里面没有模型类别名字,在自己训练的模型的yaml文件最后加上即可。我的模型只有开关两类,所以我要加上下面的内容。

names:
  0: open
  1: closed

总结

花了3个小时写的,内容有点仓促,可能会慢慢补充,大家可以和我交流,如有错误之处恳请指正。总得来说在业界jetson nano的配置和使用都比较完善,资料也比较齐全,所以费点时间都可以在网上找到,谨以此文做一个备份和记录供大家参考。

其他可能有用的参考文章

Nvidia Jetson nano 安装Archiconda、gpu版torch、踩坑记录
win10 yolov5转换Tensorrt的engine模型全流程安装运行解读(使用TRT的PythonApi)

图片展示

运行屏幕展示
外观展示

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【jetson nano】jetson nano环境配置+yolov5部署+tensorRT加速模型 的相关文章

  • 如何在付费页面复制走想要的文字

    1 按F12打开控制台 出现如下界面 xff1a 2 点击图中方框按钮或者按Ctrl 43 B选择元素 xff0c 出现如下界面 xff1a 3 在左边点击想要复制的文字 xff0c 右边就会弹出对应的元素 xff0c 然后双击右边元素就可
  • 锂电池容量下降怎么办?锂电池容量下降修复方法

    锂电池容量下降怎么办 锂电池容量下降修复方法 据存能电气小编所知 xff0c 锂离子电池的容量在300 500次充放电循环后会下降到80 xff5e 85 xff0c 想要恢复初始续航性能必须更换新电池 近日声称有科研人员发明了能让锂离子电
  • 2021-02-18

    多旋翼飞行器学习笔记 二 机架设计 2 1布局设计 1 机身基本布局 交叉型 xff1a 目前常用的是X字型布局 xff0c 因为 xff1a xff08 1 xff09 机动性更强 xff1b xff08 2 xff09 前视相机的视场角
  • UDP协议

    文章目录 UDP协议1 UDP协议概述1 1基于IP协议略微改进1 2不可靠性1 3无连接1 4UDP协议存在的意义 2 UDP报文段2 1UDP报文段格式2 2校验和及其计算 UDP协议 Internet 协议集支持一个无连接的传输协议
  • ROS小车,乐视深度相机+cartographer+move_base从零开始配置导航

    ROS小车导航 制作教程链接小车制作stm32ide配置PWM小车蓝牙控制使用说明 ROS小车驱动板如何从编码器得到转速 xff1f 任务划分小车与ROS的串口通信cartographer安装运行cartographer示例建图仿照back
  • kalibr标定realsenseD435i(二)--多相机标定

    kalibr标定板 xff08 棋盘格 xff09 用师兄的 xff08 长这样 xff09 步骤一 xff1a 建立的ROS中的Kalibr的工作空间 xff0c 建立一个名为 xff1a checkerboard yaml的文件 xff
  • Ubuntu下python2与python3之间的切换

    由于ubuntu中python2与python3一般都有安装 xff0c 所以必要时需要进行切换 1 我们设置一下python2为默认 sudo update alternatives install usr bin python pyth
  • vscode终端无输出

    两个原因 1是code runner设置造成 xff0c 可以在设置中搜索输入run in terminal xff0c 勾选即可 2是因为解决include路径是安装Mingw的版本问题 xff0c 可以通过更换版本解决 更换版本首先删除
  • 简历上银行项目

    61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • ‘pip‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

    pip不是内部或外部命令 xff0c 也不是可运行的程序或批处理文件 到底有多么神秘 xff1f 不亲身体验 xff0c 怎可知道 xff1f 博主最近就体验了一把 本来想用 pip install 几个包的 xff0c 后来它提示我 pi
  • HTMLTestRunner生成测试报告报错 ModuleNotFoundError: No module named ‘StringIO‘

    今天在学习使用HTMLTestRunner生成测试报告时遇到一个报错 xff0c 如图所示 xff1a 网上搜索了下 No module named 39 StringIO 39 解决方法 xff0c 原来我用的是Python 3 X版本
  • 实例分割最全综述(上):二阶段实例分割和一阶段实例分割

    作者 fresher 原文链接 xff1a https zhuanlan zhihu com p 533568152 点击下方卡片 xff0c 关注 自动驾驶之心 公众号 ADAS巨卷干货 xff0c 即可获取 1 实例分割简介 实例分割是
  • Xshell下载安装教程和使用教程(超详细)

    目录 一 Xshell使用教程 1 XSHELL是什么 2 主要特征 xff1a 3 创建会话注意事项 注意事项1 保存登陆信息 注意事项1 登陆脚本设置 4 XSHELL常用环境 XSHELL外观设置 XSHELL快捷键设置 XSHELL
  • 虚拟机Linux系统无法正常进入图形化界面 报错bash :startx command not found

    CentOS 最小化安装 xff0c 解决无法使用yum命令问题 以及图形界面切换 xff01 目录 一 xff0c 输入安装X Window命令 xff0c 安装出错 xff01 xff01 二 xff0c 验证yum是否正常安装了 xf
  • Vmware虚拟机startx进入图形界面闪退 报错

    调整VMware硬盘启动优先级 第一步 xff1a 打开电源时进入固件 xff0c 也就是BIOS 设置界面 第二步 xff1a 找到Main 最下面的Boot time Diagnostic Screen xff0c 敲 Enter xf
  • 【记录】python搭建openpose环境遇到的坑(不能再多了。。)

    记录 python搭建openpose环境遇到的坑 xff08 不能再多了 xff09 背景 xff1a 重装的系统 xff0c anaconda3 1 坑1 xff1a 在anaconda下创建一个新的环境时遇见如下问题 xff1a Co
  • http请求报文与响应报文

    https blog csdn net weixin 45912307 article details 109454522 1 http get请求报文 请求行 GET HTTP 1 1 61 gt 请求方法 方式 请求的资源路径 http
  • 函数执行时堆栈的详细过程

    文章目录 1 函数示例2 main函数中局部变量入栈过程3 main函数调用sum函数参数压栈4 调用sum函数的准备5 调用sum函数6 sum函数执行结束7 处理sum函数的结果返回 1 函数示例 2 main函数中局部变量入栈过程 3
  • java get方式请求url

    public String sendGet String result 61 34 34 BufferedReader in 61 null 读取响应输入流 try 创建URL对象 java net URL connURL 61 new j
  • 做自动化项目的时候自由协议通信怎么做

    工业现场 xff0c 一些扫码枪 称重传感器的通信协议 xff0c 有可能是厂家自己规定的 比如下面我给大家看一段RFID设备的通信协议 xff0c 如果你不能理解它是在干什么 xff0c 那就要好好学习plc的自由协议通信 这边举一个典型

随机推荐

  • vue3 element-plus el-progress 圆形circle进度条 内置文字换行

    span class token operator lt span div span class token operator gt span span class token operator lt span el span class
  • 一文彻底搞懂激光雷达原理!

    点击下方卡片 xff0c 关注 自动驾驶之心 公众号 ADAS巨卷干货 xff0c 即可获取 最近一直在搞激光雷达相关东西 xff0c 今天把了解的激光雷达知识做一个框架整理 xff0c 顺便梳理了一下行业里面激光雷达相关公司 xff0c
  • 基于深度学习网络 在可穿戴式机器人中使用IMU实现人体活动实时识别

    可穿戴式外骨骼机器人已成为支持人类运动的一种新兴高科技产品 xff0c 能够在人体康复训练 日常活动和制造任务中提供必要的运动支持 xff0c 而搭建高精度 低延迟的人体活动识别系统 xff0c 能够帮助可穿戴式机器人快速准确地识别人体活动
  • DAY19-20 PX4入坑成功

    这几天在研究科学上网 xff0c 我就不写出来了 总之 xff0c 我把PX4拉到了自己的电脑上 在入门的过程中 xff0c 我根据自己以前的学习习惯 xff0c 开始大面积地搜集教程视频 xff0c 可惜并没有 xff01 这下我瞬间没招
  • 记一次C++ std::cout未定义及大量报错处理

    原因是什么并不清楚 但无论怎么处理 xff0c cout lt lt xxxxx 都会报 cout 未定义 xff0c 并且强行编译会一直报错 我最终处理方法是把MinGW给卸载 xff0c 然后重新下载安装 结果是此方法完全可行
  • ubuntu16.04 针对rosdep init初始化报错的解决方案(一针见血版)

    Ubuntu16 04 ros安装以及出现的问题 一 更换国内源 二 添加ROS源 三 添加密钥 四 安装ROS 五 初始化ROS 一 更换国内源 先复制一份源文件 再更换源地址 sudo cp etc apt sources list e
  • Linux使用gcc编译报错对pthread_create未定义的引用

    在包含pthread h头文件后 还是报错未定义的引用 span class token operator span tmp span class token operator span cc6zqi5F span class token
  • 狂神说java java基础篇 学习笔记

    java基础的视频内容笔记都在这了前言等字数非常长的章节 xff0c 使用了AI语音识别成文字后修改的 xff0c 有错漏欢迎提出面对对象模块的按照自己的理解进行了内容修改 xff0c 可以对比原视频内容理解 xff0c 如有建议欢迎提出
  • 解决Ubuntu没有wifi图标的问题

    在配置过程中输入命令后就没有wifi图标了 xff0c 不能上网了 xff08 可能是删除了网卡驱动 xff09 后续使用命令查询网卡 hardware of Internet 状态 lshw C network 查看网卡状态发现 无线网被
  • 2022-11-15日Linux安装csitools问题及解决办法

    问题一 xff1a 执行完这三步后电脑没有wifi图标了 xff0c 不能联网了 sudo modprobe r iwldvm iwlwifi mac80211 sudo modprobe r iwlwifi mac80211 cfg802
  • win10扩展c盘容量(2022-11-17)亲测可用

    个人经验 xff1a 想要通过右键我的电脑 管理 磁盘管理 xff0c 将紧挨着C盘的E盘压缩一100G扩展给C盘 这种做法试了不行 xff0c 即使让可用空间挨着C盘 xff0c C盘的扩展卷选项也是灰色的 解决 xff1a 下载傲梅分区
  • S-V信道模型理解

    Saleh和Valenzuela提出的S V信道模型是基于大量室内信道测试构建的 xff0c 更加符合室内真实路径的传播规律 xff0c 可以用来进行信道建模与仿真 下图显示了具有多簇射线的S V信道模型 xff0c 该模型中多径以簇形式达
  • wifi收发数据包分析

    根据802 11n协议WIFI每次发送64字节数据 Intel5300网卡接收的数据包大小为213字节或者393字节或者573字节 说明接受的数据包包含多个发送的包 猜想每个数据包是由多个主体重复加上固定的标志位组成 x 61 1 2 3
  • 清华大学 | 摄像头-激光雷达的时空在线集成标定方法

    点击下方卡片 xff0c 关注 自动驾驶之心 公众号 ADAS巨卷干货 xff0c 即可获取 后台回复 多模态综述 获取论文 xff01 后台回复 ECCV2022 获取ECCV2022所有自动驾驶方向论文 xff01 后台回复 领域综述
  • 操作系统-硬件结构(小林coding笔记)

    控制和管理整个计算机系统的硬件和软件资源 xff1b 提供给用户和其他软件方便的接口和环境 xff1b 主要包括进程管理 内存管理 文件系统 设备管理和网络系统 图灵机的工作方式 基本思想就是用机器模拟人类用纸笔进行数学运算的过程 主要包含
  • 操作系统-三、操作系统结构(小林coding笔记)

    3 1Linux内核和Windows内核 Windows和Linux是常见的两款操作系统 xff0c 操作系统最核心的东西就是内核 内核 内核作为应用连接硬件设备的桥梁 内核的四个基本功能 xff1a 进程调度 内存管理 硬件通信 系统调用
  • 操作系统-四、内存管理(小林coding笔记)

    虚拟内存 防止内存运行多个程序时崩溃 把进程所使用的地址隔离开 xff0c 让操作系统为每个进程分配一套独立的虚拟地址 操作系统会提供一种机制 xff0c 将不同进程的虚拟地址和不同内存的物理地址映射起来 内存分段 程序时由若干逻辑分段组成
  • libcurl库

    目录 1 libcurl简介2 libcurl的使用3 libcurl的安装Libcurl库等第三方库的通用编译方法 3 调用libcurl访问百度主页4 libcurl 相关API解读1 curl global init 2 curl g
  • ERROR: cannot launch node of type: rplidar_ros

    1首先使用rospack find 命令查找该功能包 xff0c 如果输出功能包路径则该功能包存在 xff0c 如果提示没有则说明我们需要下载一个rplidar ros rospack find rplidar ros 2使用sudo ap
  • 【jetson nano】jetson nano环境配置+yolov5部署+tensorRT加速模型

    目录 jetson nano环境配置 43 yolov5部署 43 tensorRT加速模型致谢主机和jetson nano环境jetson系统开机烧录 系统设置 换源python环境配置conda环境yolov5环境matplotlib和