使用 Coral USB 加速器在 Raspberry Pi 上部署 YOLOv5 模型






2.33/5 (2投票s)
在本篇文章中,我们将把 YOLOv5 口罩检测器部署到 Raspberry Pi 上。
引言
在上一篇文章中,我们在普通电脑上测试了口罩检测器。在这篇文章中,我们将把我们的检测器解决方案部署到边缘设备——带有 Coral USB 加速器的 Raspberry Pi 上。
此部分所需的硬件包括:
- 具备互联网连接(仅用于配置)的 Raspberry Pi 3 / 4,运行 Raspberry Pi OS(以前称为 Raspbian)
- Raspberry Pi HQ 摄像头(任何 USB 网络摄像头均可)
- Coral USB 加速器
- 与您的 Pi 兼容的显示器
Coral USB 加速器是谷歌设计的一款硬件配件。它为您的系统增加了一个边缘 TPU 处理器,使您的系统能够以非常高的速度运行机器学习模型。我建议您查看其数据表。您可以将其插入几乎任何设备。在我们的例子中,我们将将其与 Pi 结合使用,因为该板本身无法以高 FPS 进行良好的检测。
拥有加速器的 Raspberry Pi 并不是执行此任务的唯一便携式设备。事实上,如果您正在开发商业解决方案,那么独立式Coral 开发板,或者英伟达 Jetson 硬件系列中的产品会是更好的选择。
一旦原型设计完成,这两者都为大规模生产提供了有吸引力的扩展选项。然而,对于基本的原型设计和实验,带有 Coral 加速器棒的 Raspberry Pi 4 也能胜任。
最后一点:如果您不想将此解决方案部署到 Raspberry Pi,也可以不这样做。如果您更愿意,该模型可以在台式机或笔记本电脑上良好运行。
Raspberry Pi 上的初始步骤
如果 Coral 棒已连接到 Pi,请拔下它。我会在可以连接它时通知您。我们首先需要安装几个库才能在上面运行 YOLO 模型并利用 Coral 设备。
首先,让我们更新 Raspberry Pi 板。打开终端窗口并运行
sudo apt-get update
sudo apt-get upgrade
上述行可能需要几分钟才能完成。通过单击左上角的 Raspberry 图标 > 首选项 > Raspberry Pi 配置 > 接口选项卡,检查摄像头的接口是否已激活。选择摄像头的启用单选按钮,然后单击确定。重新启动您的 Raspberry Pi 板。
准备目录和创建虚拟环境
让我们首先创建一个隔离的环境以避免将来发生冲突。这是您今后应该采用的做法,它将使您免于遇到许多问题。要获取虚拟环境的 pip 包,请运行以下行:
sudo pip3 install virtualenv
安装完成后,运行以下行进行准备:
mkdir FaceMaskDetection
cd FaceMaskDetection
git clone https://github.com/zldrobit/yolov5.git
cd yolov5
git checkout tf-android
git clone https://github.com/sergiovirahonda/FaceMaskDetectionOnPi.git
cd FaceMaskDetectionOnPi
mv customweights detect4pi.py requirements4pi.txt /home/pi/FaceMaskDetection/yolov5
cd ..
好了,现在是时候在项目目录中创建隔离环境并激活它,以便可以进行依赖项的安装了:
python3 -m venv tflite1-env
source tflite1-env/bin/activate
最后,运行以下命令:
pip install -r requirements4pi.txt
在 Raspberry Pi 上安装 TFLite 解释器和 PyTorch
我之前提到过,Raspberry Pi 板在运行 TensorFlow 模型方面并不算很优秀,因为它们的处理能力不足。为了使这个项目可行,我们需要采用 TFLite 的解决方法,然后安装 PyTorch,因为我们的脚本仍然使用它的一些方法。请注意,我们不会在 PyTorch 之上运行模型,我们只会利用它的一些能力。让我们开始确定您的 Pi 的处理器架构,请执行以下命令:
uname -a
如果显示您的处理器架构是 ARM7L,让我们安装相应的 TFLite 版本。
如果您的 Pi 安装了 Python 3.6
pip3 install https://dl.google.com/coral/python/tflite_runtime-2.1.0.post1-cp36-cp36m-linux_armv7l.whl
如果您的 Pi 安装了 Python 3.7
pip3 install https://dl.google.com/coral/python/tflite_runtime-2.1.0.post1-cp37-cp37m-linux_armv7l.whl
如果您的 Pi 具有任何其他 Python 版本或不同的处理器架构,我建议您查阅此指南,并在“仅安装 TensorFlow Lite 解释器”部分查找 Linux (ARM 或 AARCH) 平台选项。
完成后,就可以安装 PyTorch 了——这是一个开源的 Python 机器学习库,用于多种类型的应用程序,包括涉及计算机视觉的应用程序。我们的 Raspberry Pi 没有普通的 Intel x86 处理器架构。相反,它有一个 ARM 架构;因此,您想在 Pi 上安装的所有 Python 包都必须为该特定架构进行编译。
ARM 处理器没有官方软件包。我们仍然可以从预编译的 wheel 包安装 PyTorch,但它们可能因您的 Pi 具有的处理器版本而异。请浏览此 NVIDIA 论坛以找到正确的版本和安装说明。我还发现了这个仓库,其中包含一些其他 ARM 版本的软件包。我的 Raspberry Pi 具有 ARMv7l 处理器。
如果您的 Raspberry Pi 处理器相同,您可以使用我用过的 wheel。您可以在我的 Git 仓库中找到它。
让我们开始安装 PyTorch 运行所需的依赖项:
sudo apt install libopenblas-dev libblas-dev m4 cmake cython python3-dev python3-yaml python3-setuptools
完成后,请导航到 Raspberry Pi 上的 /Documents 目录,并执行此命令以下载 .whl 文件:
cd /home/pi/Documents
git clone https://github.com/sergiovirahonda/PyTorchForRPi.git
完成后,运行此命令开始安装:
cd /home/pi/Documents/PyTorchForRPi
pip3 torch-1.0.0a0+8322165-cp37-cp37m-linux_armv7l.whl
最后一个命令将需要大约两分钟才能完成。如果一切顺利,恭喜您!您已经完成了最困难的部分。
在 Raspberry Pi 上安装 Coral USB 加速器依赖项
这不是必需的 - 只有当您想加速检测速度时,才需要此步骤。
在同一个终端窗口中,导航到项目文件夹。进入文件夹后,使用以下行将 Coral 包存储库添加到您的 apt-get 发行版列表中:
echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-get update
现在我们可以最终安装 Edge TPU 运行时,这是使用 USB 加速器的唯一要求。安装 libedgetpu 库(标准版本,不会导致您的 Coral 过热),方法是运行:
sudo apt-get install libedgetpu1-std
您现在可以将 Coral USB 板插入 Raspberry Pi。
在 Raspberry Pi 板上部署检测器
确保您的 Coral USB 加速器和网络摄像头已插入。打开终端窗口并导航到项目目录:
cd /home/pi/FaceMaskDetection
source tflite1-env/bin/activate
cd yolov5
通过运行以下命令安装项目的要求:
pip3 install -r requirements4pi.txt
要初始化不带 Coral USB 加速器的检测器,请执行:
!python detect4pi.py --weights customweights/best-fp16.tflite --img 416 --conf 0.45 --source 0 --classes 0 1
否则,您需要运行此命令:
!python detect4pi.py --weights customweights/best-fp16.tflite --img 416 --conf 0.45 --source 0 --classes 0 1 --edgetpu
这两个选项都将打开网络摄像头并按预期初始化检测。
下一步?
实际上,什么都没有。我们已经完成了这个具有挑战性的项目!希望最终结果符合您的预期。