在本指南中,将探讨如何在树莓派上部署自定义计算机视觉模型,使用Roboflow提供的优化Docker容器。树莓派因其价格亲民、体积小巧、功耗低、具备离线能力等特点,常被用作边缘设备。
要开始部署,首先需要在Roboflow上创建账户,然后创建工作空间和项目。可以通过以下方式之一或多种方式为项目添加数据:
- 导入已标注的数据集
- 从Roboflow Universe克隆项目
- 自行标注数据集
接下来,生成数据集版本并训练模型。这里快速概述了这些步骤,但如果想了解创建数据集的详细教程,可以参考Roboflow的快速入门指南。
在这个例子中,将使用在Roboflow Universe的“Construction”数据集页面上找到的Construction Site Safety数据集和预训练模型。兼容的数据集版本会有一个绿色的勾选标记,表示用于训练的模型类型。
安装Docker
要在树莓派上安装Docker,首先需要检查系统是否兼容,然后安装必要的先决条件。需要一个运行64位Ubuntu系统的Raspberry Pi 4(或Raspberry Pi 400)。要验证正在运行兼容的系统,可以在树莓派的命令行中输入arch
并确认它输出aarch64
。
如果还没有为树莓派安装64位Ubuntu操作系统,以下是如何在SD卡或启动驱动器上使用Raspberry Pi Imager进行设置的步骤:
- 下载Raspberry Pi Imager
- 在系统上安装Raspberry Pi Imager
- 确保已经将SD卡或启动驱动器添加到计算机或笔记本电脑上的适当可移动存储位置
- 启动Raspberry Pi Imager
- 点击
Choose OS
,然后选择Raspberry Pi OS (Other)
,最后选择Raspberry Pi OS (64-Bit)
- 点击
Choose Storage
并选择适当的存储设备 - 点击
Write
- 从计算机或笔记本电脑上的可移动存储位置移除SD卡或启动驱动器
接下来,按照的说明完成Raspberry Pi OS (64位)在Raspberry Pi 4(或Raspberry Pi 400)上的设置。
安装Docker的推荐方法:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
这是一个更漫长的过程:
sudo apt-get install apt-transport-https ca-certificates software-properties-common -y
curl -fsSL https://download.docker.com/linux/raspbian/gpg | sudo apt-key add -
echo "deb [arch=armhf] https://download.docker.com/linux/raspbian stretch stable" | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt-get update
sudo apt-get install docker-ce
安装Roboflow推理服务器
推理API服务器可作为Docker容器使用,为树莓派优化和配置。要安装推理API服务器,请拉取容器:
sudo docker pull roboflow/inference-server:cpu
此命令会自动检测树莓派CPU,并为设备拉取正确的部署容器。
Roboflow推理,本指南中用于部署模型,现已作为开源项目提供。推理可在各种设备上运行,从ARM CPU设备如树莓派到NVIDIA Jetson。有关推理的更多信息,请参见。
运行Roboflow推理服务器
sudo docker run --net=host roboflow/inference-server:cpu
推理服务器安装:成功。树莓派现在可以进行预测。包括用多种语言编写的预编写代码片段,以帮助加速开发。
对模型的第一次推理调用将需要几秒钟来下载和初始化模型权重。一旦成功进行了初始推理调用,后续的预测将被更快地处理。
使用Python SDK
如上所述,可以选择使用托管推理API来接收模型预测。另一个可用的选项是使用Roboflow Python SDK。
要安装Roboflowpython包,请激活Python环境或虚拟环境,并输入:
pip install roboflow
在虚拟环境中安装Roboflow python包。将以下代码片段添加到Python文件中。这可以在记事本中完成.txt文件并保存为.py文件,或者在代码编辑器如Vim或VSCode中完成。
from roboflow import Roboflow
rf = Roboflow(api_key="YOUR_PRIVATE_API_KEY")
project = rf.workspace("YOUR_WORKSPACE").project("YOUR_PROJECT")
model = project.version(VERSION_NUMBER, local="http://localhost:9001/").model
prediction = version.model.predict("YOUR_IMAGE.jpg")
print(prediction.json())
用私有API密钥替换YOUR_PRIVATE_API_KEY,并替换为API Docs选项卡上的API密钥:Construction Site Safety (Roboflow Universe API Docs) YOUR_WORKSPACE:用项目的workspace_id替换,例如本例中的roboflow-universe-projects YOUR_PROJECT:用项目的project_id替换,例如本例中的construction-site-safety VERSION_NUMBER:用对应训练模型的version_number的数值整数替换,例如本例中的25。
在进行必要的更新后保存并运行.py文件。例如,如果文件名为infer.py,则使用以下命令运行:
python3 infer.py
第一次推理:下载和初始化模型权重。一个图像上的示例模型预测。模型可以作为客户端-服务器上下文运行,并将图像发送到树莓派进行推理,从网络上的另一台机器。
为此,只需将version变量定义中的localhost替换为树莓派的本地IP地址。
树莓派性能预期
在树莓派400上看到了大约每秒1.3帧的结果。这些结果在客户端-服务器上下文中获得(因此有一些轻微的网络延迟),并且模型为416x416。模型容器可在树莓派断开互联网连接后继续处理预测。但是,这将取消在托管图像上运行预测的能力。关闭树莓派将关闭容器,因此如果树莓派断电或关闭,重复上述步骤,从运行Roboflow推理服务器部分开始,再次处理模型预测。
恭喜!按照本教程,现在能够在树莓派上部署自定义计算机视觉模型进行边缘推理。使用Roboflow训练和部署模型的好处是能够用一行代码更改模型或部署目标。现在已经在设备上安装了Docker容器,将能够快速部署任何未来模型的最佳版本到生产应用程序。