草庐IT

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

IamYZD 2023-09-16 原文

前言

因为一次竞赛接触了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出来的这几个应该已经足够了…)

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

有关Jetson nano部署Yolov5 ——从烧录到运行 1:1复刻全过程的更多相关文章

  1. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

  2. ruby-on-rails - Ruby on Rails 可以部署在 Azure 网站上吗? - 2

    我可以在Azure网站上部署RubyonRails吗? 最佳答案 还没有。目前仅支持.NET和PHP。 关于ruby-on-rails-RubyonRails可以部署在Azure网站上吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/12964010/

  3. jenkins部署1--jenkins+gitee持续集成 - 2

    前置步骤我们都操作完了,这篇开始介绍jenkins的集成。话不多说,看操作1、登录进入jenkins后会让你选择安装插件,选择第一个默认的就行。安装完成后设置账号密码,重新登录。2、配置JDK和Git都需要执行路径,所以需要先把执行路径找到,先进入服务器的docker容器,2.1JDK的路径root@69eef9ee86cf:/usr/bin#echo$JAVA_HOME/usr/local/openjdk-82.2Git的路径root@69eef9ee86cf:/#whichgit/usr/bin/git3、先配置JDK和Git。点击:ManageJenkins>>GlobalToolCon

  4. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  5. Ruby,使用包含 TK GUI 的 ocra 部署一个 exe - 2

    Ocra无法处理需要“tk”的应用程序require'tk'puts'nope'用奥克拉http://github.com/larsch/ocra不起作用(如链接中的一个问题所述)问题:https://github.com/larsch/ocra/issues/29(Ocra是1.9的"new"rubyscript2exe,本质上它用于将rb脚本部署为可执行文件)唯一的问题似乎是缺少tcl的DLL文件我不认为这是一个问题据我所知,问题是缺少tk的DLL文件如果它们是已知的,则可以在执行ocra时将它们包括在内有没有办法知道tk工作所需的DLL依赖项? 最佳答

  6. ruby-on-rails - NameError(未初始化常量 Unzipper::Zip)但仅在 Heroku 部署(Rails)上 - 2

    我有一个类unzipper.rb,它使用Rubyzip解压文件。在我的本地环境中,我可以成功解压缩文件,而无需使用require'zip'明确包含依赖项但是在Heroku上,我得到一个NameError(uninitializedconstantUnzipper::Zip)我只能通过使用明确的require来解决问题:为什么这在H​​eroku环境中是必需的,但在本地主机上却不是?我的印象是Rails自动需要所有gem。app/services/unzipper.rbrequire'zip'#OnlyrequiredforHeroku.Workslocallywithout!class

  7. ruby - Sinatra + Heroku + Datamapper 使用 dm-sqlite-adapter 部署问题 - 2

    出于某种原因,heroku尝试要求dm-sqlite-adapter,即使它应该在这里使用Postgres。请注意,这发生在我打开任何URL时-而不是在gitpush本身期间。我构建了一个默认的Facebook应用程序。gem文件:source:gemcuttergem"foreman"gem"sinatra"gem"mogli"gem"json"gem"httparty"gem"thin"gem"data_mapper"gem"heroku"group:productiondogem"pg"gem"dm-postgres-adapter"endgroup:development,:t

  8. ruby-on-rails - 在服务器上没有互联网访问权限的 Capistrano 部署 - 2

    如何使用Capistrano将Rails应用程序部署到无法访问外部网络或存储库的生产或暂存服务器?我已经设法完成部署的一半,并意识到Capistrano没有在我的本地机器上下载gitrepo,但它首先连接到远程服务器并尝试在那里下载Git存储库。我希望有一个类似Javaee的构建系统,其中创建可交付成果并将该可交付成果发送到服务器。就像您构建.ear文件并将其部署到您想要的任何服务器上一样。显然在RoR中,你被迫(据我所知)在该服务器上构建应用程序,在那里创建一个gem存储库,在那里克隆最新的分支等等。有什么方法可以将准备运行的包发送到远程服务器吗? 最佳答

  9. Cesium源码解析一(terrain文件的加载、解析与渲染全过程梳理) - 2

    快速导航(持续更新中…)Cesium源码解析一(terrain文件的加载、解析与渲染全过程梳理)Cesium源码解析二(metadataAvailability的含义)Cesium源码解析三(metadata元数据拓展中行列号的分块规则解析)Cesium源码解析四(Quantized-Mesh(.terrain)格式文件在CesiumJS和UE中加载情况的对比)目录1.前言2.本篇的由来3.terrain文件的加载3.1更新环境3.2更新和执行渲染命令3.3数据优化3.4结束当前帧4.总结1.前言  目前市场上三维比较火的实现方案主要有两种,b/s的方案主要是Cesium,c/s的方案主要是u

  10. Streampark集成Cloudera Flink、ldap、告警,以及部署常见问题 - 2

    集成背景我们当前集群使用的是ClouderaCDP,Flink版本为ClouderaVersion1.14,整体Flink安装目录以及配置文件结构与社区版本有较大出入。直接根据Streampark官方文档进行部署,将无法配置FlinkHome,以及后续整体Flink任务提交到集群中,因此需要进行针对化适配集成,在满足使用需求上,尽量提供完整的Streampark使用体验。集成步骤版本匹配问题解决首先解决无法识别Cloudera中的FlinkHome问题,根据报错主要明确到的事情是无法读取到Flink版本、lib下面的jar包名称无法匹配。修改对象:修改源码:(解决无法匹配clouderajar

随机推荐