Jetson nano

  • 一、u盘系统安装
  • 1.1 烧录EMMC引导
  • 1.2 烧录U盘系统
  • 二、启动、环境配置
  • 2.1 设置vnc分辨率
  • 2.2. 更新软件
  • 三、启动、环境配置
  • 3.1 安装conda
  • 3.2 安装python3.6版本torch1.8
  • 3.3 配置yolov5 tensorrt加速
  • 3.3.1 转换wts和engine
  • 3.3.2使用python脚本运行engine
  • 其它记录
  • 安装java
  • 备份,扩展


一、u盘系统安装

简介:购买的是4G版,板载16g emmc,但16g硬盘完全不够用,按照一开始的方案想着直接用但空间完全不足,因此将系统改装到64GU盘中启动
所有教程均在https:///study/jetson-nano中有

1.1 烧录EMMC引导

因为板载EMMC中已经有系统了,因此不需要再烧录系统了,但需要烧录EMMC引导,让其能够引导到U盘系统中

  • 安装VMware
    进入下载网址点击下载
  • jetson nano python版本管理 jetson nano pytorch教程_python

  • 按照 vmware安装教程进行安装
    注意如果开启了Hyper-V则需要点击自动安装WHP
  • jetson nano python版本管理 jetson nano pytorch教程_服务器_02

  • 安装引导
    按照 3.烧录EMMC引导这篇教程进行即可,这里无所谓用u盘还是移动硬盘都可以,我是使用的固态硬盘+usb3.0转接线装的系统,注意提供的64g udisk版镜像,写入系统后只有64g可用,如使用128G硬盘,需要使用分区工具(linux中下载gparted)进行扩容到128G,可参考5.U盘扩容进行

1.2 烧录U盘系统

按照4.烧录U盘系统教程进行

二、启动、环境配置

2.1 设置vnc分辨率

该镜像中vnc等均安装好了,连接显示屏查看板子的ip,后续即可通过vnc直接连接,密码同用户密码,但是不接显示屏分辨率较低,因此需要还要设置下启动分辨率
执行 sudo vi ~/.config/autostart/resolution.desktop,填入如下内容修改自启动分辨率为1366x768

[Desktop Entry]
Type=Application
Name=resolution
Exec=xrandr --fb 1366x768
NoDisplay=true

2.2. 更新软件

因为Jetson nano是arm64架构,国内源支持不好,因此不换源
如果自己有代理则可以设置代理,没有则继续后续步骤

sudo vi /etc/apt/apt.conf.d/proxy.conf 添加如下

Acquire {
  HTTP::proxy "http://192.168.1.38:7890";
  HTTPS::proxy "http://192.168.1.38:7890";
}

执行如下进行更新

sudo apt-get update
sudo apt-get full-upgrade

显示错误

Errors were encountered while processing:
 nvidia-l4t-bootloader
 nvidia-l4t-xusb-firmware
 nvidia-l4t-initrd

执行如下指令解决错误,再重新更新

cd /var/lib/dpkg
sudo mv info info.bak
sudo mkdir info
sudo apt-get upgrade

安装JTOP

sudo apt install curl
sudo apt install nano
cd ~
curl https://bootstrap.pypa.io/pip/3.6/get-pip.py -o get-pip.py
sudo python3 get-pip.py # 运行安装脚本
sudo pip3 install jetson-stats
sudo jtop
或重启后执行jtop

查看

jetson nano python版本管理 jetson nano pytorch教程_java_03

三、启动、环境配置

3.1 安装conda

弃用
以下参考yolov5 部署jetson nano(通用) 保姆级教学 下载 https:///Archiconda/build-tools/releases
bash

3.2 安装python3.6版本torch1.8

参考 Install PyTorch on Jetson Nano. 我是从Qengineering/PyTorch-Jetson-Nano下载的torch-1.8.0a0+37c1f4a-cp36-cp36m-linux_aarch64.whltorchvision-0.9.0a0+01dfa8e-cp36-cp36m-linux_aarch64.whl 还可以参考这里下载 https://forums.developer.nvidia.com/t/pytorch-for-jetson/72048

# install the dependencies (if not already onboard)
$ sudo apt-get install python3-pip libjpeg-dev libopenblas-dev libopenmpi-dev libomp-dev
$ sudo -H pip3 install future
$ sudo pip3 install -U --user wheel mock pillow
$ sudo -H pip3 install testresources
# above 58.3.0 you get version issues
$ sudo -H pip3 install setuptools==58.3.0
$ sudo -H pip3 install Cython
# install PyTorch 1.8.0
$ sudo -H pip3 install torch-1.8.0a0+37c1f4a-cp36-cp36m-linux_aarch64.whl
 sudo -H pip3 install torchvision-0.9.0a0+01dfa8e-cp36-cp36m-linux_aarch64.whl

执行python3,再输入如下,显示为True即可

import torch
torch.cuda.is_available()
  • 其它包
    首先git clone https:///ultralytics/yolov5下载yolov5包,如有代理可设置git config --global http.proxy 192.168.1.38:7890进行下载
    执行cd yolov5进入包内
    执行vi requirements.txt编辑
    如图注释掉torch和torchvision,由于我在psutil安装时也出错了,因此也注释了psutil

    执行python3 detect.py --source data/images/bus.jpg --weights --img 640,得到结果

如报错
ImportError: /usr/lib/aarch64-linux-gnu/.1: cannot allocate memory in static TLS block 则在执行前脚本加 LD_PRELOAD=.1 python3 your_python_script或者在.bashrc中加export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/.1:$LD_PRELOAD

如不下载yolov5源码,可编写如下执行进行测试

import torch

if __name__ == "__main__":
    model = torch.hub.load("ultralytics/yolov5", "yolov5s")
    print(model)
    for i in range(10):
        img = "./bus.jpg"
        results = model(img)
        results.print()

在我的机子上执行结果如下,150余毫秒一张进行推理

jetson nano python版本管理 jetson nano pytorch教程_服务器_04

3.3 配置yolov5 tensorrt加速

3.3.1 转换wts和engine

参考 https://wiki.seeedstudio.com/YOLOv5-Object-Detection-Jetson/#inference-on-jetson-device
教程中软件是放置在用户home目录下,而我是放置在其它文件夹中
步骤基本为,详细指令见教程

  1. 配置好环境,torch等(前面已安装)
  2. github下载ultralytics/yolov5wang-xinyu/tensorrtx
  3. 使用tensorrtx/yolov5中gen_wts.py脚本将转换为yolov5s.wts
  4. jetson nano python版本管理 jetson nano pytorch教程_服务器_05


  5. 进入tensorrtx/yolov5修改yololayer.h中CLASS_NUM值为你的类别值
  6. 在tensorrtx/yolov5新建build文件夹,将yolov5s.wts复制进去,编译,编译完成后如下
  7. 序列化模型,即将yolov5s.wts转为yolov5s.engine,注意sudo ./yolov5 -s best.wts best.engine s最后的s是指示你的模型型号
  8. build文件夹同级有samples文件夹,内有图片,执行推理,将生成前面带下划线的检测图
3.3.2使用python脚本运行engine
  1. pip install pycuda
  2. 执行python3 yolov5_trt.py
  3. jetson nano python版本管理 jetson nano pytorch教程_linux_06


其它记录

安装java

jetson nano python版本管理 jetson nano pytorch教程_linux_07


mkdir /home/nano/Soft/java

将文件复制过去

cd ~/Soft/java

tar -xvf jdk-8u351-linux-aarch64.tar.gz

jetson nano python版本管理 jetson nano pytorch教程_java_08


vim ~/.bashrc 编辑bash配置,在最后面加入这两行

export JAVA_HOME=/home/nano/Soft/java/jdk1.8.0_351
export PATH=${JAVA_HOME}/bin:${PATH}

重启或执行source ~/.bashrc再执行 java -version,结果如下

jetson nano python版本管理 jetson nano pytorch教程_服务器_09

备份,扩展

扩展硬盘:64g感觉还是一般般,后使用移动硬盘+usb硬盘盒当作系统盘,将系统写入了128g移动硬盘中,写入后是64g,因此需要用软件扩展,可以使用linux下的gparted或者windows下的DiskGenius将硬盘未分配空间扩展到系统分区

备份: 备份时可以在linux下使用dd命令进行备份,但是备份后文件大小将和硬盘的已分配空间大小一致,且恢复或写入别的硬盘时对应的硬盘大小必须要大于备份文件大小,因此可以先通过linux下的gparted或者windows下的DiskGenius将系统分区缩小,再备份

sudo fdisk -u -l /dev/sdc // 查看end最大的值,后面的count+1即可

sudo dd bs=512 count=117000192 if=/dev/sdc of=“/media/liang/Elements SE/jetson-nano-backup/nano.img”

jetson nano python版本管理 jetson nano pytorch教程_java_10