1. 镜像烧录
1.1 相关资源下载
从树莓派官网中,下载树莓派镜像烧录(Raspberry Pi Imager)软件;前往Ubuntu Mate官网,下载系统镜像。(烧录Raspberry Pi OS aarch64系统同样可以,环境配置部分的操作都可以通用,验证过了)
1.2 镜像烧录
打开树莓派镜像烧录软件,将插入了SD卡的读卡器插入电脑。选择下载的系统镜像,及插入的SD卡,点击烧录,等待烧录完成。
2. 系统安装与基本配置
2.1 系统安装
将烧录好的SD卡插入到树莓派中,并插入鼠标键盘方便后续操作,对树莓派上电,等待自启动,并进行一些简单设置(语言、位置、网络、用户名及密码等),等待系统安装完成。
2.2 系统基本配置
2.2.1 更新
需保证网络正常,然后进行更新
1
2
sudo apt update
sudo apt upgrade
如果出现报错,先将树莓派重启sudo reboot
,再次更新即可。
2.2.2 安装开启ssh服务并设置开机自启
1
2
3
sudo apt install openssh-server
sudo service ssh start
sudo systemctl enable ssh
查看本机ip地址
1
2
sudo apt install net-tools
ifconfig
ssh连接树莓派,其中user_name为系统用户名,xxx.xxx.xxx.xxx为IP地址
1
ssh user_name@xxx.xxx.xxx.xxx
2.2.3 安装开启VNC服务并设置开机自启
未完…
2.2.4 安装树莓派官方系统中的raspi-config
树莓派官方的Raspberry Pi OS中预安装了raspi-config,某些设置相对比较方便,在其他第三方系统中则需要自行安装,首先从其官网下载安装文件,下载地址:archive.raspberrypi.org/debian/pool/main/r/raspi-config
此处,我下载的为raspi-config_20220112_all.deb
- 安装相关依赖
1
sudo apt install whiptail parted lua5.1 alsa-utils psmisc
- 安装raspi-config
1
sudo dpkg -i raspi-config_20220112_all.deb
- 运行raspi-config
1
sudo raspi-config
2.2.5 安装中文输入法
1
sudo apt-get install fcitx fcitx-googlepinyin fcitx-module-cloudpinyin fcitx-sunpinyin
然后进入系统设置,首先进入"System Settings->Personal->Language Support"
,将"Keyboard input method system"
修改为"fcitx"
;然后进入"System Settings->Other->Fcitx Configuration"
,点击+
号,取消勾选Only Show Current Language
,然后搜索找出Google Pinyin
,点击OK
添加即可。ctrl+space
进行输入法的切换。
2.2.6 验证USB摄像头是否可用
树莓派有官方的CSI接口摄像头(但我没有),具体怎么使用还不知道(没看过资料,只大概知道需要先在raspi-config中开启摄像头,使用raspistill
命令可以捕获图像)。但我手上只有一条USB接口的摄像头,需要验证该摄像头是否可以在树莓派上正常使用
1
2
3
4
5
6
7
# 插入USB摄像头,查看其设别号(插入和拔下分别查看设备号,消失的就是摄像头的了)
ls /dev/video*
# 安装fswebcam
sudo apt install fswebcam
# 捕获摄像头图片,存储到/PATH/OF/img.jpg,
# 此处我的摄像头设备号为/dev/video0
fswebcam /dev/video0 /PATH/OF/img.jpg
2.2.7 系统镜像备份
将SD卡从树莓派上取下,插入读卡器,并插入到另一台Ubuntu操作系统的计算机上。 参考了用树莓派4b构建深度学习应用(二)软件篇
1
2
3
4
5
6
7
8
# 1 查看U盘的盘符,在此处我的U盘为/dev/sdg
lsblk
# 2 利用dd命令将SD卡中的数据保存为.img镜像文件
sudo dd if=/dev/sdg of=/PATH/OF/rpi_arm64_backup.img bs=8M
# 3 缩小.img镜像文件尺寸
git clone https://github.com/Drewsif/PiShrink
cd PiShrink/
sudo ./pishrink.sh -s /PATH/OF/rpi_arm64_backup.img /PATH/OF/rpi_arm64_backup_small.img
未完
3. 其他开发环境配置
3.0 Python虚拟环境管理(Miniforge安装)
>1. Miniforge的安装
一直使用Anaconda作为python虚拟环境管理工具,但是Anaconda和Miniconda对树莓派的支持并不好,两者的官网上倒是都有支持aarch64的包可以下载,但是我都试了一些有问题。所以决定使用Miniforge进行替代,暂时感觉使用正常。
前往清华镜像站下载Miniforge,此处我下载的是Miniforge3-4.11.0-0-Linux-aarch64.sh
;进行安装:
1
2
3
4
5
cd Downloads
# 安装过程最后,Do you wish the installer to initialize Miniforge3 by running conda init? [yes|no]
# 我选择的是yes,选择no的话可能需要自己将环境变量添加到.bashrc中
bash Miniforge3-4.11.0-0-Linux-aarch64.sh
source ~/.bashrc
>2. 安装numpy
1
conda install numpy
>3. 创建虚拟环境
1
2
3
4
5
6
7
# 此处安装的Miniforge的base环境下的python为3.9.7
# 新建一个python3.7的虚拟环境raspi,用于后续的环境配置
conda create -n raspi python=3.7
# 激活虚拟环境
conda activate raspi
# 安装numpy、pyyaml
conda install numpy pyyaml
3.1 OpenCV 4.5.5的编译与安装
3.1.1 使用pip安装release版本
由于树莓派为arm架构,本来打算手动编译安装OpenCV,因为conda安装找不到相关的包。但是后来尝试了pip安装,结果发现官方有编译好的包可以直接安装,见pypi.org/project/opencv-contrib-python。(所以,手动编译安装OpenCV就没太大必要了)
1
2
3
4
5
6
7
# 进入raspi虚拟环境
conda activate raspi
# 以下四种应该都可以,此处我安装的是opencv-contrib-python
pip install opencv-contrib-python
pip install opencv-python
pip install opencv-python-headless
pip install opencv-contrib-python-headless
如下图,网站上显示,支持aarch64架构的opencv对应的Python Version为3.6,但我虚拟环境是python3.7,测试了一下读取图片是没有问题的。
3.1.2 从源码进行编译安装
$\color{red}{NOTE: 以下部分为非必要操作}$
NOTE:还未在Ubuntu Mate上测试(待测试),在Raspberry Pi OS 32位上测试过能编译成功。
参考了用树莓派4b构建深度学习应用(三)OpenCV篇和Ubuntu 16.04编译配置opencv 4.1.1 + opencv_contrib 4.1.1(C++ & Python)
>1. 依赖库的安装
1
2
3
4
5
6
7
sudo apt -y install build-essential cmake unzip pkg-config
sudo apt -y install libjpeg-dev libpng-dev libtiff-dev
sudo apt -y install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt -y install libxvidcore-dev libx264-dev
sudo apt -y install libgtk-3-dev
sudo apt -y install libcanberra-gtk*
sudo apt -y install libatlas-base-dev gfortran
>2. 构建、编译OpenCV(待测试)
首先从OpenCV的官方github库中下载opencv-4.5.5和opencv_contrib-4.5.5的源码。
构建
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
cd opencv-4.5.5
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local/opencv-4.5.5 \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D WITH_TBB=ON \
-D WITH_V4L=ON \
-D WITH_QT=OFF \
-D WITH_OPENGL=OFF \
-D WITH_FFMPEG=ON \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.5.5/modules \
-D BUILD_EXAMPLES=ON \
-D ENABLE_NEON=ON \
-D ENABLE_VFPV3=ON \
-D OPENCV_ENABLE_NONFREE=ON \
-D CMAKE_SHARED_LINKER_FLAGS='-latomic' \
-D OPENCV_GENERATE_PKGCONFIG=YES ..
编译
1
make -j4
安装
1
sudo make install
未完
3.2 PyTorch及TorchVision的编译与安装
3.2.1 安装官方或第三方编译release的whl文件
有大佬提供了aarch64的release版本,下载地址https://github.com/KumaTea/pytorch-aarch64/releases,此处我下载的分别是:
torch-1.7.1-cp37-cp37m-linux_aarch64.whltorchaudio-0.7.2-cp37-cp37m-linux_aarch64.whltorchvision-0.8.2-cp37-cp37m-linux_aarch64.whl
(1.7.1版本安装后报错,找不到libpython3.7m.co.1.0;改为1.8.1版本后正常)
- torch-1.8.1+ffmpeg-cp37-cp37m-linux_aarch64.whl
- torchvision-0.9.1+ffmpeg-cp37-cp37m-linux_aarch64.whl
- torchaudio-0.8.1-cp37-cp37m-linux_aarch64.whl
安装:
1
2
3
4
5
6
# 进入raspi虚拟环境
conda activate raspi
# 安装
pip install torch-1.8.1+ffmpeg-cp37-cp37m-linux_aarch64.whl
pip install torchvision-0.9.1+ffmpeg-cp37-cp37m-linux_aarch64.whl
pip install torchaudio-0.8.1-cp37-cp37m-linux_aarch64.whl
NOTE: 测试了一下vgg16前向计算,感觉速度过于慢了,感觉不太正常!从源码编译安装试试(待完成) ***
仔细找了一下,发现pytorch官方其实发布了各个版本编译的whl文件,其中就包括了aarch64版本的,下载地址:https://download.pytorch.org/whl/cpu/torch_stable.html,我从中下载安装了pytorch1.8.1和torchvision0.9.1,模型前向计算速度感觉应该是正常了,但是会有警告输出。
此外,我新建了一个虚拟环境(命名为pytorch),在该环境下安装测试了pytorch-1.9.0 (linux_aarch64
那个,manylinux2014_aarch64
安装后使用异常) + torchvision-0.10.0 + torchaudio-0.9.0(推荐安装这个版本),安装后用使用正常,没有奇怪的警告输出,且使用YOLO_v5进行测试也正常。(1.10.0版本安装后存在问题,其他版本未提供whl文件或缺少torchvision的whl文件)
***
3.2.2 从源码进行编译安装
$\color{red}{NOTE: 以下部分为非必要操作}$
NOTE:在Raspberry PI OS aarch64系统下测试可行,未在Ubuntu Mate上测试,在Ubuntu Mate上应该是一致的。 自己手动编译安装Pytorch、torchvision、torchaudio(未测试) 此处我编译安装的版本为:pytorch 1.8.1,torchvisioin 0.9.1 (参考官方github readme,以及用树莓派4b构建深度学习应用(四)PyTorch篇和树莓派安装pytorch,史上最全方法合集(附安装链接))
>1. 依赖库的安装及一些预操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 在虚拟环境 raspi 下进行编译和安装
conda activate raspi
# 依赖库的安装来源于官方github readme,
# 其中mkl mkl-include库的安装有问题,无法找到相关包
conda install astunparse numpy ninja pyyaml setuptools cmake cffi typing_extensions future six requests dataclasses
conda install pillow
# 临时编译参数设置,可设置的参数很多,此处参考的是其他blog的设置,
# 具体有哪些可设置的参数也没找到一个详细的介绍(先这样吧)
export NO_CUDA=1
export NO_DISTRIBUTED=1
export NO_MKLDNN=1
export NO_NNPACK=1
export NO_QNNPACK=1
>2. 下载pytorch源码并拉取所要安装的分支版本
1
2
3
4
5
cd ~/Downloads
git clone --recursive https://github.com/pytorch/pytorch
cd pytorch
git checkout v1.8.1
git submodule update --init --recursive
>3. 编译pytorch生成whl文件并安装
1
2
3
4
5
python setup.py bdist_wheel
# 生成的 whl 文件存储于 dist 路径下
cd dist
# 安装 whl
pip install torchvision-0.9.0a0+8fb5838-cp37-cp37m-linux_aarch64.whl
>4. 下载torchvision源码并拉取与pytorch版本匹配的分支版本
1
2
3
4
5
6
cd ~/Downloads
git clone https://github.com/pytorch/vision
cd vision
# pytorch 1.8.1 对应 vision 版本为 0.9.1
git checkout v0.9.1
git submodule update --init --recursive
>5. 编译torchvision生成whl文件并安装
1
2
3
python setup.py bdist_wheel
cd dist
pip install torchvision-0.9.0a0+8fb5838-cp37-cp37m-linux_aarch64.whl
>6. 测试 测试结果正常,前向推理速度应该也正常。
yolo_v5测试结果也正常