Jetson Nano简介
Jetson Nano是NVIDIA推出的高性能边缘端部署小型计算设备,其中包含了一块128核Maxwell架构的GPU,虽然并不是最新架构,但是由于只是用于嵌入式开发,需要考虑经济成本。因此,Nano的算力并不高,主要用于 轻量级/实时 网络的推理,暂时无法完成模型训练等计算密集任务。
操作步骤概览
1、根据官方教程使用VMware烧录emmc引导
2、利用读卡器向SD卡烧录操作系统(Ubuntu 18.04)
3、外接HDMI显示器开机(密码nvidia)并扩展内存
4、修改国内镜像源
5、安装python3-pip并更新软件安装包
6、根据jetpack到paddleinference官网下载对应的C++/Python预测库
7、安装相关的库(numpy、opencv、faiss等)
8、将训练好的模型导出为静态图
9、编写前后处理代码和推理逻辑,实现端侧部署
首先,需要进行emmc引导和TF卡烧录过程,这部分在官方提供的视频教程(套件自带视频资料)有详细讲解,按步操作即可,并无难度。
组装
本次使用的是Jetson Nano B01套件,完成上面操作系统烧录之后插入TF卡,并进行简单的组装,如下图所示:
然后,上电开机,接入HDMI显示器。为了让风扇运转可以使用,打开终端输入如下指令:
$ sudo sh -c 'echo 150 > /sys/devices/pwm-fan/target_pwm'
其中,'150' 可以是0~255任意整数,越大风扇转速越高。
测试摄像头
CSI摄像头连接方式如下图所示:
连接好后测试摄像头是否正常:
$ ls /dev/video*
运行结果为 /dev/video0
说明安装成功!
然后运行以下摄像头测试代码:
## test_video.py
import cv2
cap = cv2.VideoCapture("nvarguscamerasrc \
!video/x-raw(memory:NVMM), width=640, height=480, format=NV12, framerate=30/1\
!nvvidconv flip-method=0 ! videoconvert ! video/x-raw, format=BGR ! appsink")
while True:
sucess, img=cap.read()
cv2.imshow("capture", img)
k=cv2.waitKey(1)
if k == 27:
cv2.destroyAllWindows()
break
elif k==ord("s"):
cv2.imwrite("video.jpg",img)
cv2.destroyAllWindows()
break
cap.release()
SSH连接
-
为了开发方便,可以在上位机(Windows主机)使用SSH远程连接jetson nano,需要注意的是上位机和下位机需要在同一局域网内才可以连接。
-
为了进行SSH远程连接,首先要在jetson nano上修改配置文件
/etc/ssh/sshd_config
允许SSH登录,具体来说,需要添加PermitRootLogin yes
,可参考此博文 -
配置密码:
passwd nvidia
然后输入密码即可(开机密码也会随之修改!!)
- 配置完成后可使用Mobaxterm进行SSH连接,输入jetson nano的IP地址,端口号默认为22,用户名为nvidia,密码自己设置即可,连接成功后如下图所示:
配置软件环境
- 更换国内源,用以下命令打开文件(建议先拷贝一份再修改)
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
sudo gedit /etc/apt/sources.list
- 使用如下内容替换文件内容(对应Ubuntu 18.04)
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
- 然后更新安装pip
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install python3-pip
pip3 install --upgrade pip
注意: 执行sudo apt-get update
的时候有时会出现E: Unable to lock directory /var/lib/apt/lists
,此时在命令行执行以下指令即可:
sudo fuser -vki /var/lib/apt/lists/lock
然后重新执行sudo apt-get update
执行sudo apt-get upgrade
由于网络问题可能很慢,容易出错,一定耐心等待,否则,无法安装python3-pip或者其他软件。
这里有个小问题记录一下,我在我的jetsonanno上安装python3-dev会报错,按照很多教程都无法解决。但是不安装也暂时没啥问题 。
- 更新pip源
sudo mkdir .pip
cd .pip
sudo touch pip.conf
sudo gedit pip.conf
然后输入以下内容,保存关闭
[global]
timeout = 6000
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = https://pypi.tuna.tsinghua.edu.cn
接下来安装深度学习框架,这里选择Paddle,因为使用Paddle很多软件环境已经配置好了比较方便一些。
-
输入如下命令查看jetpack版本:
$ cat /etc/nv_tegra_release
得到jetpack版本为4.6.1,Python的预装版本为3.6.9,在PaddleInference官网下载nano,jetpack 4.6.1,python3.6对应的paddlepaddle,然后利用Mobaxterm上传到jetson nano即可。
$ pip3 install paddlepaddle_gpu-2.3.0-cp36-cp36m-linux_aarch64.whl
如果安装报错可能是网络不稳定,可以重试一下!
配置CUDA
首先打开配置文件
$ sudo gedit ~/.bashrc
在文件末尾添加以下路径:
export CUDA_HOME=/usr/local/cuda-10.2
export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64:$LD_LIBRARY_PATH
export PATH=/usr/local/cuda-10.2/bin:$PATH
运行
$ source ~/.bashrc
查看cuda版本:
$ nvcc -V
开发桌面端应用
安装PyQt5
- 由于官方镜像中PyQt5使用的gtk不适配,需要输入以下命令
$ sudo apt-get build-dep qt5-default
$ sudo apt install libcanberra-gtk-module
$ sudo apt install qt5-style-plugins
$ echo "export QT_QPA_PLATFORMTHEME=gtk2" >> ~/.profile
- 下载之后链接到Python3中:
ln -s /usr/lib/python3/dist-packages/PyQt5/ ~/.virtualenvs/xxx/lib/python3.x/site-packages/
ln -s /usr/lib/python3/dist-packages/sip* ~/.virtualenvs/xxx/lib/python3.x/site-packages/
- 进入python3终端输入,不报错就成功了:
>>> import PyQt5
>>>
应用开发
利用pyqt5搭建界面,实现功能包括测试摄像头、录制视频、推理图片/文件夹、推理视频、实时推理,逐个功能实现,最终界面如下图所示:
Illegal instruction(core dumped)问题解决
- 这个是Python脚本运行时,导入依赖库可能出现异常退出进程,解决方式参考这篇博客
1.终端运行
sudo gedit ~/.bashrc
2.末尾添加如下内容,保存并关闭:
export OPENBLAS_CORETYPE=ARMV8
3.终端运行
source ~/.bashrc
总结
由于端侧性能有限,为了防止出现卡帧,采用每两帧推理一次,相邻两帧使用第一帧的推理结果,在视觉上不会有差异,但是fps可以提高一倍。