因为一次竞赛接触了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
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
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拖到命令窗口中,让它自动填充文件位置
安装需要略漫长的等待…
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编译
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
#下载过程如果因为网络原因失败的话可以在命令后加上 -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
#这个不是必须的,但是我为了调试代码方便就安装了
#但是要注意的是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出来的这几个应该已经足够了…)
感谢大家看到了最后一行