Nvidia Jetson XAvier NX开发套件从装机到pytorch环境搭建YoloV5+DeepSort+TensorRT

2023-05-16

目录

  • 1. 刷机与装机
    • 1.1 准备VMware工作站和linux的unbuntu16.04虚拟机:
    • 1.2 将SD上的系统移动至SSD
    • 1.3 SSH配置
    • 1.4 查看Jetpack版本
    • 1.5 启动风扇
  • 2. 深度学习环境配置
    • 2.1 python环境配置
      • 2.1.1 安装Miniforge(Conda的Arm代替版)
    • 2.2 配置Miniforge——伪conda环境
    • 2.3 pytorch环境配置
      • 2.3.1 查看cuda版本
      • 2.2 pytorch虚拟环境创建
      • 2.2 安装pytorch(默认就是GPU版)
    • 2.2.1 正常安装
      • 2.2.2 缺少'.so'报错
      • 2.2.3 Illegal instruction (core dumped)`报错
      • 2.3 安装torchvision
  • 3. 神经网络前向推理
    • 3.1 根据训练的参数文件生成推理权重文件
    • 3.2 编译并生成TensorRT格式的engine文件

1. 刷机与装机

1.1 准备VMware工作站和linux的unbuntu16.04虚拟机:

窗口太小:
在这里插入图片描述
设置里进display调一下分辨率:
在这里插入图片描述
把sdmanager的deb包放到Downloads目录下:
在这里插入图片描述
打开终端,输入:

sudo apt-get install ./XXXXXXXXXXXXX.deb

sd
安装sdkmanager完毕后输入以下命令启动:

sdkmanager

这里我挂了梯子,所以进Nvidia官网快一点,下载也会相应快一点:

先给jetson NX 通电,连接micoUSB——USB线从Jetson到电脑上,选择虚拟机作为连接主体:
在这里插入图片描述

装你需要的系统(unbuntu)和包(cuda、cudnn、deepstream等):
在这里插入图片描述
装好的文件和包可以在相应目录下看到,我这里选取我需要的cudnn和cuda包,用U盘拷走,放Jetson系统里面
在这里插入图片描述
然后会发现总是有一些包安装得不尽人意,没事,大不了跳过就行了:
在这里插入图片描述
这里直接finish并exit

1.2 将SD上的系统移动至SSD

如果你的Jetson Xavier NX套件是默认tf卡启动的那种的话,你不仅可以使用SDKmananger 装机,你还可以使用SD卡镜像装机; 如果你和我一样是使用emmc 启动方式的话,你需要摆脱16G内嵌小SD卡的束缚,即将装好的系统移入到128G的固态中。

1.3 SSH配置

直接用Filezalla传文件会连接不上,默认FTP服务是开启的,所以出现下面这种情况是你密码输错了,或者输一下端口号:22 再登陆就可以了:
在这里插入图片描述
重新填写密码并输入端口号22 后:
在这里插入图片描述

1.4 查看Jetpack版本

cat /etc/nv_tegra_release

发现是4.5.1版本,其实你在用sdkmanager装机的时候就可以选择,此处只是再次确认一下:
在这里插入图片描述

1.5 启动风扇

以255的风速运行风扇一段时间:

1.	sudo sh -c 'echo 255 > /sys/devices/pwm-fan/target_pwm' 

设置开机风扇以255风速自启动需要编辑一下配置文件:

1.	sudo vim /etc/rc.local

在打开的文件中加入这几行:

1.	#!/bin/bash
2.	sleep 10
3.	sudo /usr/bin/jetson_clocks
4.	sudo sh -c 'echo 255 > /sys/devices/pwm-fan/target_pwm'

保存并退出后,移交给该文档自启动权限:

1.	sudo chmod u+x /etc/rc.local

重启看一下风扇,发现自己转起来了!!

2. 深度学习环境配置

2.1 python环境配置

首先要明确两点:
一. 虚拟环境下的Python和深度学习框架包括cuda和cudnn、tensorrt包和本地root的不在同一个目录下,所以你sudo apt-get安装的,在pytorch虚拟环境下直接是用不了的;
二. jetson的虚拟环境里面, python 和python3等价, pip 和pip3等价, 这点和树莓派明显区别(当然树莓派也使用不了虚拟环境),和正常的linux / windows很像;
三. 在jetson的root环境中,python默认还是进入Python2.7了,只有输入Python3才能进入Python3.6.13环境。

2.1.1 安装Miniforge(Conda的Arm代替版)

Miniforge下载地址

直接复制自己下载的版本,不要粘贴我的代码再改,那样会报错…虽然我也不知道为啥:
在这里插入图片描述

示例:

sh Miniforge-pypy3-4.10.3-5-Linux-aarch64.sh

成功:
在这里插入图片描述

2.2 配置Miniforge——伪conda环境

在刚刚弹出的>>>环境里面,输入以下命令,配置国科大conda环境:

# 这里使用国科大镜像源
conda config --prepend channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
conda config --prepend channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
conda config --set show_channel_urls yes

装完之后重启一个终端,可以看到直接进入到base环境,conda配置成功了!!
在这里插入图片描述

2.3 pytorch环境配置

2.3.1 查看cuda版本

无论是base环境还是pytorch虚拟环境下,平白无故直接输入nvcc -V, 都会吃一行报错:

bash: nvcc: 未找到命令

解决办法:
添加相关环境变量:

vim  ~/.bashrc 

在文件最下方加入:

export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
export CUDA_ROOT=/usr/local/cuda

保存并退出后,
执行:

source .bashrc

以上完成后,重启终端如果还不行的话,重启jetson再输入

nvcc -V

就能看到自己的cuda release是10.2版本了!!

2.2 pytorch虚拟环境创建

在base环境下直接运行以下命令创建pytroch虚拟环境:

conda create -n pytorch python=3.6

在这里插入图片描述
执行以下命令进入conda环境(和Anaconda命令完全一样):

conda activate pytorch

可以看到进入了虚拟环境:
在这里插入图片描述

2.2 安装pytorch(默认就是GPU版)

2.2.1 正常安装

pytorch选择1.7版本的:

sudo apt-get install python3-pip libopenblas-base libopenmpi-dev 
pip3 install Cython
pip3 install numpy
pip3 install torch-1.7.0-cp36-cp36m-linux_aarch64.whl

测试是否安装成功:

import torch
print(torch.__version__)
print('CUDA available: ' + str(torch.cuda.is_available()))
a = torch.cuda.FloatTensor(2).zero_()
print('Tensor a = ' + str(a))
b = torch.randn(2).cuda()
print('Tensor b = ' + str(b))
c = a + b
print('Tensor c = ' + str(c))

2.2.2 缺少’.so’报错

我在验证torch的时候报错了,这比较奇怪,因为我在jetson nano上运行上述命令就可以,但这次运行后报错:

OSError: libcurand.so.10: cannot open shared object file: No such file or director

在这里插入图片描述

发现是因为链接到对应的库,简单找了一下,发现没有,就sudo apt-get upgrade了一下, 然后安装cuda-Toolkit==10.2 ,然后进去 /usr/local/ 一看,发现多了一个cuda-10.2的文件夹,然而里面本来就有cuda,所以这个cuda-10.2应该和cuda是一样的,想想都不可能成功。
果不其然,这时候import torch 发现改成报 can’t find 'libcudnn.8.so’这样的错了,于是乎我全局模糊搜索了一下相关信息:

sudo find . -name '*libcudnn'

发现没有搜到任何东西,我意识到出了大问题:一定有相关的没装好,于是根据libcudnn赶紧到 /usr/local/ 下面看有没有cudnn,结果发现:没有
于是怀疑因缺少cudnn的工具包导致的import 错误,于是这才重新使用SDKmanager下载了相关的包,覆盖了一下jetson上除系统和原有文件之外的官方工具包,然后重新试了一下:在这里插入图片描述

这次结果是好的,import torch不再报错
为了印证确实是缺少cudnn相关包,我再次输入

sudo find . -name 'cudnn'

模糊搜索,却发现新的cudnn并没有找到,但这次却import 成功了,不得不说这种’.so的报错’是一个带点误导性的报错,根本的解决方案就是重装一下工具包,根据1.1部分的内容有针对性地用sdkmanager重装几个相关的加速工具包就好了。```

2.2.3 Illegal instruction (core dumped)`报错

import torch 这时候等待很长时间后会报错:
Illegal instruction (core dumped)
查阅资料发现若安装的是numpy 1.19.5则会出现以上错误,而安装pytorch时自动安装的numpy即1.19.5。
Github上讨论给出了一些不同解决方法,我选择了比较简单的一种:卸载numpy 1.19.5,重新安装numpy1.19.4即可解决:

pip3 install numpy==1.19.4

2.3 安装torchvision

因为我安装的是1.7.0的pytorch,对应 torchvision 版本是0.8.1,所以安装如下:

解压后,进入文件夹, 执行:

export BUILD_VERSION=0.8.1
sudo python3 setup.py install 

要是给你报以下的错误,你就把sudo去掉再试试:

python No module named 'setuptools'

编译的时候发现报错:
在这里插入图片描述

fatal error: libavcodec/avcodec.h: No such file or directory

进入setup.py, 输入:

/ffmpeg

定位到该行,修改:

if has ffmpeg 改为if False即可

在这里插入图片描述

修改完后,再次输入python setup.py install,发现这次很快就编译成功了。

3. 神经网络前向推理

使用YoloV5+DeepSort+TensorRT 目标检测、跟踪项目进行测试:

3.1 根据训练的参数文件生成推理权重文件

将Python文件先拷到yolov5文件夹下:

cp {tensorrtx}/yolov5/gen_wts.py {ultralytics}/yolov5

进入yolov5文件夹,运行Python代码以载入训练好的yolov5s.pt 参数文件生成对应权重文件:

cd {ultralytics}/yolov5 python gen_wts.py yolov5s.pt

如果报错说没有yaml模块的话,输入:

pip install pyyaml

运行成功后可以看到生成了一个wts类型的权重文件。

3.2 编译并生成TensorRT格式的engine文件

进入yolov5目录:

cd {tensorrtx}/yolov5/

创建并进入build文件夹:

mkdir build
cd build

将权重文件复制到tensorrtx文件夹下:

cp {ultralytics}/yolov5/best.wts {tensorrtx}/yolov5/build

开始cmake编译:

cmake ..
make

生成engine文件

sudo ./yolov5 -s best.wts best.engine s
sudo ./yolov5 -d best.engine ../samples

然后你可能会遇到如下报错:

jetson no module named 'tensorrt'

先查看一下tensorrt版本:

dpkg -l | grep TensorRT

这时候你会发现报错说啥也没有找到。
在虚拟环境下进入Python,试一下:

import tensorrt

很可能仍然报错说没有模块。
这是因为tensorrt这个包你无论是通过sdkmanager装的还是本地sudo apt-get装的,最后都是装在了 /var/apt 目录下,你在 ‘Miniforge/env/pytorch/python3.6/ ’ 这个虚拟环境里根本链接不到tensorrt的包,因此考虑说咱们单纯跑pytorch代码的话在虚拟环境中调试,等需要实际部署了再放root环境下跑就OK
这么处理也许有些不太优雅,但目前我能想到的就是这么做,如果有大佬知道怎么链接本地的tensorrt包,请在评论区留言,谢谢!

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

Nvidia Jetson XAvier NX开发套件从装机到pytorch环境搭建YoloV5+DeepSort+TensorRT 的相关文章

  • (三)串口调试工具和串口下载工具的区别:ST-LINK、J-LINK、U-LINK;SWD、JTAG、SWIM

    基础知识 一 串口 xff08 1 xff09 什么是串口 xff08 2 xff09 串行接口的划分标准 同步 异步 xff08 3 xff09 Uart串口与RS232串口的区别 xff08 4 xff09 串口的用途 二 烧录方式IS
  • RTOS信号量、邮箱、队列与事件

    一 定义 信号量 xff0c 邮箱 xff0c 队列的最大不同在于它们发送的内容不同 1 信号量是一个触发信号 xff0c 也是一个计数器 xff0c 等待接收信号的任务一般只有接收到信号才可以执行 xff0c 否则任务一直暂停 xff08
  • px4|添加自己的topic并记录至日志

    用于添加自己新建的话题并保存需要的数据至日志方便后续调试分析 目录 一 新建 msg文件 二 添加 msg文件路径至CMakeLists txt 三 添加该话题至日志中 四 编译与使用 一 新建 msg文件 在工程文件目录下的msg文件夹中
  • PX4|mavros offboard控制

    在px4官网中有相关mavros的教程MAVROS Offboard control example C 43 43 PX4 自动驾驶用户指南 本文将对该教程进行复现 xff0c 并加以细节补充 首先安装mavros sudo apt ge
  • PX4|电脑端发送自定义mavros消息至飞控端(mavros二次开发

    本文将实现在电脑端利用mavros将自定义消息发送至飞控端 xff0c 并在飞控段将接受到的信息打印至日志输出 针对mavros二次开发需要对相关ros包进行源码编译 xff0c 具体步骤如下 建立工作空间 span class token
  • Fidder判断前后端的问题

    第一种情况 xff1a fiddler 在没有设置过过滤器的情况下面没有抓到请求信息 xff0c 可能是前端页面元素没有绑定事件 xff0c 也有可能是前端发生了JS 错误 xff0c 这就是前端的bug 第二种情况 xff1a 若抓取到的
  • C++中::和:的用法

    前言 xff1a 虽然C 43 43 中 xff1a xff1a 和 xff1a 比较常见 xff0c 但是闭上眼睛回忆一下两者的用法 xff0c 但还真不一定能全部回答上来 xff0c 现在就做个总结 xff1a 1 单冒号 xff1a
  • 树莓派安装系统和ROS,并换成国内软件源。

    这里直接放出我参考的几位博主的帖子 xff1a 树莓派社区网站 xff1a 树莓派资源下载 树莓派实验室 一 安装ubuntu mate系统 在树莓派4B上安装Ubuntu Mate 20 04 和ROS 老孟 xff08 MLY xff0
  • ROS中无法定位软件包问题

    一 ROS版本不对 ROS 和ubuntu版本对应关系 二 ROS软件源有问题 类似于以下问题多半是ROS软件源不对 更换ROS软件源 在目录 etc apt sources list d中 软件源更换为中科大的软件源 deb https
  • 手机用久了就慢,卡到不行,怎么回事?三招帮你搞定!

    大家使用智能手机时 xff0c 是不是都有这样的困扰 手机用久了 xff0c 速度越来越慢 手机为什么会越来越慢 xff0c 如何才能发挥手机的最大性能 xff1f 别急 xff0c 小4妹三招帮你搞定 xff01 安卓手机提速秘笈 内存大
  • Matlab 读取txt文件指定行的数据

    方法1 方案1 filename 61 39 volume sress displace txt 39 替换为实际的文件名 line number 61 4 替换为实际的行号 打开文件并读取行 fid 61 fopen filename f
  • 树莓派从入门到放弃之VNC开机自启动和修改语言

    一 VNC开机自启动配置 使用VNCviewer连接树莓派或者使用Putty连接 xff0c 打开终端 首先编辑vncserver配置文件键入 xff1a sudo nano etc init d vncserver 复制以下代码 xff0
  • 审稿中ff是什么意思

    f 或者 ff 都是表示引用页数的 xff0c 意思是 xff1a and following page or pages 比如 36 ff xff0c 表示36页之后的页数被用作参考 如果只有1个f 90f 就表示90页和91页 refe
  • mesoscale hydrologic model (mHM) 和multiscale parameter regionalization (MPR)

    文章目录 常见问题what is mesoscale hydrologic model mHM how does the mHm model upscale the parameterswhat is the multiscale para
  • Word转PDF

    首先在投稿的时候发现上转的文件转成PDF有一些图片缺失了 xff0c 推测是图片太大的原因 xff08 但是图片并不是很大 xff0c 目前还不知道原因 x1f622 xff09 尝试使用先本地用Microsoft Print to PDF
  • 新bing/New bing配置和操作

    申请进入候补名单完成任务获得加速使用header editor插件防止跳转到国内bing使用user agent修改浏览器的ui
  • PCA-APCA-MLR

    全称 principal component analysis absolute principal component score multiple linear regression 原理 绝对因子分析 多元线性回归受体模型 APCS
  • partial least squares regresssion (PLSR)偏最小二乘

    适用范围 样本量很小 不是正态分布 线性回归一般需要满足正态分布 原理 使用了包括PCA 典型相关 步骤 第一步 确认主成分数量 通过交叉有效性 RMSEP图和投影重要性VIP分析进行确认 第二步 基于第一步主成分数量基础上 进行分析 第二
  • plt.subplots_adjust(wspace=0.01, hspace=0.01)

    有时候这个质量调节没有变化 xff0c 依然保留大的gaps无法remove xff0c 这个时候试着调整一下figsize参数 xff0c 将figsize调小一点
  • MODIS四天产品的差值为daily数据并进行sg滤波处理

    span class token keyword import span numpy span class token keyword as span np span class token keyword from span scipy

随机推荐