Jetson nano部署Yolov5 ——从烧录到运行 1:1复刻全过程

前言

因为一次竞赛接触了jetson nano和yolov5,网上的资料大多重复也有许多的坑,在配置过程中摸爬滚打了好几天,出坑后决定写下这份教程供大家参考

事先声明,这篇文章的许多内容本身并不是原创,而是将配置过程中的文献进行了搜集整理,但是所有步骤都1:1复刻我的配置过程,包括其中的出错和解决途径,但是每个人的设备和网络上的包都是不断更新的,不能保证写下这篇文章之后的版本在兼容性上没有问题,总之提前祝大家好运!

参考来源:

https://blog.csdn.net/weixin_45454706/article/details/110346822?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EsearchFromBaidu%7Edefault-2.pc_relevant_baidujshouduan&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EsearchFromBaidu%7Edefault-2.pc_relevant_baidujshouduan

https://blog.csdn.net/beckhans/article/details/89136269

一、 烧录

1.下载镜像
英伟达官方地址:

https://developer.nvidia.com/embedded/dlc/jetson-nano-dev-kit-sd-card-image

2.使用SD Card Formatter格式化TF卡
这个软件网上搜一下比较容易的
在这里插入图片描述
3.使用Etcher写入镜像
附上下载地址:

https://www.balena.io/etcher/

在这里插入图片描述

4.插卡!开机!

5.开启root用户
之后的很多命令需要用到root权限,我们需要开启root用户

sudo passwd root

之后设置密码即可

#我的这个镜像里面是自带ubuntu18.04,python3.6的,虽然yolov5官方的requirements.txt里面要求了python3.8等等,但其实3.6也是能跑的

二、配置

开发板需要插上网线联网!!!
如果出现错误建议先检查命令是否有输入错误!
如果报错的话建议sudo apt-get update然后再重新尝试一下

1.备份

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo gedit /etc/apt/sources.list

2.删除所有内容,更换成下面的

deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main multiverse restricted universe

3.配置CUDA
jetson nano内置好了cuda,但需要配置环境变量才能使用,打开命令行添加环境变量即可,我这里是cuda10.2如果不是使用我的镜像就需要根据自己的cuda版本去填写路径了

gedit ~/.bashrc

#在最后添加这些

export PATH=/usr/local/cuda-10.2/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CUDA_ROOT=/usr/local/cuda

#应用当前配置

source ~/.bashrc

4.查看是否配置成功

nvcc -V

在这里插入图片描述
5.安装pip3

sudo apt-get update
sudo apt-get install python3-pip python3-dev -y

6.安装jtop (选装)
安装jtop库这个可以监控自己的设备cpugpu工作状态

sudo -H pip3 install jetson-stats
sudo jtop		#运行jtop(第一次可能不行,第二次就好了)  按【q】退出

7.配置需要用到的库

sudo apt-get install build-essential make cmake cmake-curses-gui -y
sudo apt-get install git g++ pkg-config curl -y
sudo apt-get install libatlas-base-dev gfortran libcanberra-gtk-module libcanberra-gtk3-module -y
sudo apt-get install libhdf5-serial-dev hdf5-tools -y
sudo apt-get install nano locate screen -y

8.安装所需要的依赖环境

sudo apt-get install libfreetype6-dev -y
sudo apt-get install protobuf-compiler libprotobuf-dev openssl -y
sudo apt-get install libssl-dev libcurl4-openssl-dev -y
sudo apt-get install cython3 -y

9.安装opencv的系统级依赖,一些编解码的库

sudo apt-get install build-essential -y
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev -y
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff5-dev libdc1394-22-dev -y
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev -y
sudo apt-get install libxvidcore-dev libx264-dev -y
sudo apt-get install libatlas-base-dev gfortran -y
sudo apt-get install ffmpeg -y

10.更新CMake
这一步是必须的,因为arm架构的很多东西都要从源码编译

wget http://www.cmake.org/files/v3.13/cmake-3.13.0.tar.gz
tar xpvf cmake-3.13.0.tar.gz cmake-3.13.0/  #解压
cd cmake-3.13.0/
./bootstrap --system-curl	# 漫长的等待,做一套眼保健操...
make -j4 #编译  同样是漫长的等待...
echo 'export PATH=~/cmake-3.13.0/bin/:$PATH' >> ~/.bashrc
source ~/.bashrc #更新.bashrc

11.U盘兼容
之后的步骤可能需要使用U盘把文件拷入开发板,但是对于大容量设备可能会出现无法挂载,一条安装命令解决

sudo apt-get install exfat-utils

三、安装pytorch

jetson nano上的linux其实不是x86架构而是类似手机的ARM架构,这也就导致它的很多包和普通的linux上的不是通用的。也是我踩过的坑之一,pytorch官网下载的包,在实际使用时无法调用开发板的显卡(这是个大问题,失去显卡的开发板算力暴跌!)。这里的pytorch以及接下来的torchvision等包都需要安装Nvidia官网给出的版本
1.下载pytorch1.8
Nvidia官方链接:(好像是外网…)

https://forums.developer.nvidia.com/t/pytorch-for-jetson-version-1-9-0-now-available/72048

个人下载链接:

#BaiDu
https://pan.baidu.com/s/1Nfm9w1DfE2k_cZQ1zTykMQ 
提取码:zpsa
#CSND
https://download.csdn.net/download/IamYZD/21027946
(第一次上传资源,应该是设置了免费了...)

2.安装pytorch1.8
把下载的包拷到开发板上,建议放桌面上,安装完就可以删了
sudo pip3 install # 直接把.whl拖到命令窗口中,让它自动填充文件位置
在这里插入图片描述
安装需要略漫长的等待…

四、安装torchvision 0.9.0版本

pytorch和torchvision版本是需要对应的!

1.提前打上我们需要的依赖(是我踩过的大坑没错了)
sudo apt-get install libopenmpi2
sudo apt-get install libopenblas-dev
sudo apt-get install libjpeg-dev zlib1g-dev

2.安装
#同样需要特殊的匹配jetson nano的版本
#下载地址是外网…

git clone --branch v0.7.0 https://github.com/pytorch/vision torchvision

上一步没成功的话不要紧,步骤【三】中我的个人链接里包含了这个torchvision
把下载的包拷到开发板上,同样建议放桌面上,安装完就可以删了

cd torchvision	# 进入到这个包的目录下
export BUILD_VERSION=0.9.0
sudo python3 setup.py install		# 安装(估计要20分钟不止吧)

3.检验一下是否成功安装

python3
import torch
import torchvision
print(torch.cuda.is_available())	# 这一步如果输出True那么就成功了!
quit()	# 最后退出python编译

在这里插入图片描述

五、下载yolov5-5.0源代码

Github上搜索yolov5第一个就是了,上外网有困难的这里也上传了5.0的版本,我在weights文件夹下预置了s、m、l、x四个尺寸的模型

#BaiDu
https://pan.baidu.com/s/1UGJX7d2sSx04whjbQb3RTA 
提取码:q0f3
#CSDN
还在审核中...(2021.08.21.00.47)

至于如何使用yolov5这篇文章里暂且不做说明了,但是推荐一个B站up主的讲解

https://www.bilibili.com/video/BV1tf4y1t7ru?p=4

六、安装yolov5需要的包

#下载过程如果因为网络原因失败的话可以在命令后加上 -i https://pypi.tuna.tsinghua.edu.cn/simple 来使用清华镜像源

sudo pip3 install matplotlib==3.2.2
sudo pip3 install --upgrade Cython	#更新一下这个包

#numpy有些特殊,已经自带了,但是是apt-get安装的,所以先卸掉原来的,也方便之后包的管理

sudo apt-get remove python-numpy
sudo pip3 install numpy==1.19.4
sudo pip3 install scipy==1.4.1.	# 这个包安装巨慢,耐心等待

#这之后的一些包我在安装时都没有指定版本,这里的指令是根据之后pip3 list补上的

sudo pip3 install tqdm==4.61.2
sudo pip3 install seaborn==0.11.1
sudo pip3 install scikit-build==0.11.1	# 安装opencv需要这个包
sudo pip3 install opencv-python==4.5.3.56	# 不出意外也是一个相当漫长的过程
sudo pip3 install tensorboard==2.5.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
sudo pip3 install --upgrade PyYAML	# 我升级到了5.4.1 也可以sudo pip3 install PyYAML==5.4.1
sudo pip3 install thop
sudo pip3 install pycocotools

七、安装Pycharm

#这个不是必须的,但是我为了调试代码方便就安装了
#但是要注意的是jetson nano在跑这个原版yolov5时内存是很吃紧的,最终运行还是建议用命令行来跑
1.安装JDK(显然jetson nano没有自带这个)
#想不到吧,Pycharm用JAVA写的…

sudo apt install openjdk-11-jdk

2.安装PyCharm
之后的步骤参考这位博主的博客就可以了

https://blog.csdn.net/zhuanshu666/article/details/73554885

最后

经过以上配置,不出意外的话各位的jetson nano上已经可以正常跑yolov5了
在源码的detect.py同目录下

python3 detect.py

主要重心还是在于帮助大家完成jetson nano上的配置问题,如果对于yolov5代码的本身有问题,可以参考一个第【五】步那位B站up主的讲解

后续&延伸

受限于Jetson nano的性能,yolov5的s模型也只有1秒9帧这样的识别速度,应该说不算差,但是是有提升办法的
这里也给出传送门
1.安装pycuda

https://blog.csdn.net/weixin_44501699/article/details/106470671

2.TensorRT加速

源代码下载地址:
链接:https://pan.baidu.com/s/1SFWCmEHe6cn_uVfig_bJDQ 
提取码:x97q
https://blog.csdn.net/ailaier/article/details/116270962
#文章里面提到的的DeepStream我没有配置成功...
https://blog.csdn.net/hahasl555/article/details/116500763
# 这位的的代码是有些小问题的,但是他的评论区给出了解决办法————
auto yolo = addYoLoLayer(network, weightMap, det0, det1, det2);
改为
auto yolo = addYoLoLayer(network, weightMap, "model.33", std::vector<IConvolutionLayer*>{det0, det1, det2, det3});

之后有时间可能也会写一篇关于tensorRT加速的博客(也可能不会吧,其实网上也已经存在相当的文献了,我po出来的这几个应该已经足够了…)

感谢大家看到了最后一行 😄

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2023年3月8日
下一篇 2023年3月8日

相关推荐