前言
前几天完成了在树莓派上部署yolov5s,但是效果实在不好,大概0.3的fps,在老师的支持下又买了一块jetson nano的板子,开始折腾。
以下是拿到板子装过系统,从更换源到实现yolov5部署的一个完整过程。
参考
https://blog.csdn.net/IamYZD/article/details/119618950
https://blog.csdn.net/u012254599/article/details/99291834
https://blog.csdn.net/weixin_45454706/article/details/110346822
一、配置系统(列出来了步骤,详细内容网上很多)
下载系统
SD卡格式化
把下载的系统烧录进SD卡
插卡开机,进行一些初始化设计
我的系统是ubuntu 18.4 cuda 10.2 python是nano自带的3.6
二、更换国内源
我是已经用板子连上了wifi
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
我们下载完系统,是自带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
可以在终端输入nvcc - V ,就可以成功看到自己的cuda版本了
三、配置环境
1.更新系统和包
sudo apt-get update
sudo apt-get upgrade
2.安装pip3
sudo apt-get install python3-pip python3-dev -y
3.安装jtop,可以在终端查看自己电脑cpu和gpu情况
sudo -H pip3 install jetson-stats
sudo jtop #运行jtop(第一次可能不行,第二次就好了) 按【q】退出
4.配置所需要的库(配置就完了,少配置了后面安装包会出错)
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
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
sudo apt-get install gfortran -y
sudo apt-get install libjpeg-dev -y
sudo apt-get install libopenmpi2 -y
sudo apt-get install libopenblas-dev -y
sudo apt-get install libjpeg-dev zlib1g-dev -y
5.安装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
6.更新cmke,这一步是必须的,因为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
7.U盘兼容,之后的步骤可能需要使用U盘把文件拷入开发板,但是对于大容量设备可能会出现无法挂载,一条安装命令解决
sudo apt-get install exfat-utils
四、配置yolov5所需环境
1.安装torch和torchvision
我所配置的是1.8的torch和0.9的torchvision
文件我已经上传在下面链接,其中torch是编译好的直接安装就行了,torchvision需要我们编译一下
链接:https://pan.baidu.com/s/1cGS-gYdnEvT-9M0ve3hacg
提取码:01F6
下载好之后把里面的torch和torchvision文件夹弄到nano中
先下载torch
sudo pip3 install 把torch.whl拖到终端中
然后对于torchvision这里没有现成的要编译
cd torchvision # 进入到这个包的目录下
export BUILD_VERSION=0.9.0
sudo python3 setup.py install # 安装(估计要20分钟不止吧)
2.检查一下我们的这俩东西下载好没
python3
import torch
import torchvision
print(torch.cuda.is_available()) # 这一步如果输出True那么就成功了!
quit() # 最后退出python编译
3.这里遇到了两个错误
①我在这里import torchvision 出错,错误如下
原因:缺少pillow包
解决方法:sudo pip3 install pillow
②but我安装pillow报错
Command"/usr/bin/python3-u-c"importsetuptools,tokenize;__file__='/tmp/pip-build-pj404zn8/pillow/setup.py';f=getattr(tokenize,'open',open)(__file__);code=f.read().replace('\r\n','\n');f.close();exec(compile(code,__file__,'exec'))"install--record/tmp/pip-ch8hv_jb-record/install-record.txt--single-version-externally-managed--compile"failedwitherrorcode1in/tmp/pip-build-pj404zn8/pillow/
安装pillow时报错,
原因:缺少支持包
解决方法:安装支持包sudo apt-get install libjpeg-dev
4.安装剩下requirement.txt中所需要的包
sudo pip3 install matplotlib==3.2.2
sudo pip3 install --upgrade Cython #更新一下这个包
sudo apt-get remove python-numpy
sudo pip3 install numpy==1.19.4
sudo pip3 install scipy==1.4.1. # 这个包安装巨慢,耐心等待
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
安装以上包的时候有的会很慢,不要以为是卡着了,其实实在努力安装中,耐心等待
五、推理
进入我们yolov5源码文件夹下
sudo python3 detect.py
进行推理
六、总结
经过我们以上的步骤,就可以成功实现部署
yolov5s未加优化的情况下在jetson nano上的推理速度大概就是9-10fps
接下来我会进行tensorrt模型转换,等转换完成了再记录一下
附加:增加Swap交换空间
依次输入以下命令,可以使交换空间增加4G,解决一些耗尽内存的程序出错。
sudo fallocate -l 4G /var/swapfile
sudo chmod 600 /var/swapfile
sudo mkswap /var/swapfile
sudo swapon /var/swapfile
sudo bash -c 'echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab'
①错误:打开调用摄像头的绿屏
解决方法: 更改调用参数
sudo python3 detect.py
改为
sudo python3 detect.py --source 1
②错误:
配置环境中,在进行更新时报错:nvidia-l4t-bootloader的错误
Setting up nvidia-l4t-bootloader (32.4.4-20201027211359) ...
3448-300---1--jetson-nano-qspi-sd-mmcblk0p1
Starting bootloader post-install procedure.
ERROR. Procedure for bootloader update FAILED.
Cannot install package. Exiting...
dpkg: error processing package nvidia-l4t-bootloader (--configure):
installed nvidia-l4t-bootloader package post-installation script subprocess returned error exit status 1
Processing triggers for libc-bin (2.27-3ubuntu1.3) ...
Errors were encountered while processing:
nvidia-l4t-bootloader
E: Sub-process /usr/bin/dpkg returned an error code (1)
解决方法:
$ sudo mv /var/lib/dpkg/info/ /var/lib/dpkg/info_old/
$ sudo mkdir /var/lib/dpkg/info/
$ sudo apt-get update
$ sudo apt-get -f install
$ sudo mv /var/lib/dpkg/info/* /var/lib/dpkg/info_old/
$ sudo rm -rf /var/lib/dpkg/info
$ sudo mv /var/lib/dpkg/info_old/ /var/lib/dpkg/info/
输入上述命令之后,在执行 sudo apt-get update
和 sudo apt-get upgrade
就不会有问题了。