Raspberry Pi 上运行 TensorFlow Lite 目标检测

介绍

本指南提供了有关如何在 Raspberry Pi 上设置 TensorFlow Lite 并使用它运行对象检测模型的分步说明。它还展示了如何在 Pi 上设置 Coral USB 加速器并运行 Edge TPU 检测模型。它适用于运行 Rasbpian Buster 或 Rasbpian Stretch 的 Raspberry Pi 3 和 Raspberry Pi 4。

本指南是我更大的 TensorFlow Lite 教程系列的第二部分:

  1. 如何在 Windows 10 上训练、转换和运行自定义 TensorFlow Lite 对象检测模型
  2. 如何在 Raspberry Pi 上运行 TensorFlow Lite 对象检测模型<—- 你在这里!

本指南的这一部分分为三个部分:

此存储库还包括用于在图像、视频或网络摄像头/Picamera 源上运行 TFLite 和 Edge TPU 模型的脚本。

如何在 Raspberry Pi 上设置和运行 TensorFlow Lite 对象检测模型

在 Raspberry Pi 上设置 TensorFlow Lite 比常规 TensorFlow 容易得多!这些是设置 TensorFlow Lite 所需的步骤:

  • 1a. 更新树莓派
  • 1b. 下载此存储库并创建虚拟环境
  • 1c。安装 TensorFlow 和 OpenCV
  • 1天。设置 TensorFlow Lite 检测模型
  • 1e。运行 TensorFlow Lite 模型!
  • 我还制作了一个介绍本指南的 YouTube 视频:

Link to my YouTube video!

更新树莓派

1
2
sudo apt-get update
sudo apt-get dist-upgrade

根据您更新 Pi 的时间,更新可能需要一分钟到一小时之间的任何时间。

在此过程中,让我们确保在 Raspberry Pi 配置菜单中启用了相机界面。单击屏幕左上角的 Pi 图标,选择 Preferences -> Raspberry Pi Configuration,然后转到 Interfaces 选项卡并确认 Camera 设置为 Enabled。如果不是,请立即启用它,然后重新启动 Raspberry Pi。

下载虚拟环境

接下来,通过发出以下命令克隆此 GitHub 存储库。该存储库包含我们将用于运行 TensorFlow Lite 的脚本,以及一个使安装一切变得更容易的 shell 脚本。问题:

1
git clone https://github.com/EdjeElectronics/TensorFlow-Lite-Object-Detection-on-Android-and-Raspberry-Pi.git

这会将所有内容下载到名为 TensorFlow-Lite-Object-Detection-on-Android-and-Raspberry-Pi 的文件夹中。这有点长,所以将文件夹重命名为“tflite1”,然后 cd 进入它:

1
2
mv TensorFlow-Lite-Object-Detection-on-Android-and-Raspberry-Pi tflite1
cd tflite1

我们将在此 /home/pi/tflite1 目录中处理本指南的其余部分。接下来是创建一个名为“tflite1-env”的虚拟环境。

我在本指南中使用了虚拟环境,因为它可以防止可能已安装在您的 Pi 上的软件包库版本之间发生任何冲突。将 TensorFlow 安装在自己的环境中可以避免版本冲突。例如,如果您已经使用我的其他指南在 Pi 上安装了 TensorFlow v1.8,则可以保持该安装不变,而不必担心覆盖它。

通过发出以下命令安装 virtualenv:

1
sudo pip3 install virtualenv

然后,通过发出以下命令创建“tflite1-env”虚拟环境:

1
python3 -m venv tflite1-env

这将在 tflite1 目录中创建一个名为 tflite1-env 的文件夹。tflite1-env 文件夹将保存此环境的所有包库。接下来,通过发出以下命令激活环境:

1
source tflite1-env/bin/activate

source tflite1-env/bin/activate每次打开新的终端窗口时,您都需要从 /home/pi/tflite1 目录中发出命令以重新激活环境。您可以通过检查 (tflite1-env) 是否出现在命令提示符中的路径之前来判断环境何时处于活动状态,如下面的屏幕截图所示。

此时,如果您发出 .tflite1 目录,那么您的 tflite1 目录应该是这样的ls

安装TensorFlow和opencv

接下来,我们将安装 TensorFlow、OpenCV 以及这两个包所需的所有依赖项。运行 TensorFlow Lite 不需要 OpenCV,但此存储库中的对象检测脚本使用它来抓取图像并在其上绘制检测结果。

为了让事情更简单,我编写了一个 shell 脚本,它会自动下载并安装所有的包和依赖项。通过发出以下命令运行它:

1
bash get_pi_requirements.sh

这将下载大约 400MB 的安装文件,因此需要一段时间。在它工作的时候去喝杯咖啡吧!如果您想查看已安装的所有内容,只需打开 get_pi_dependencies.sh 即可查看软件包列表。

注意:如果您在运行bash get_pi_requirements.sh命令时遇到错误,可能是因为您的 Internet 连接超时,或者因为下载的包数据已损坏。如果出现错误,请尝试重新运行该命令几次。

另一个注意事项:shell 脚本会自动安装最新版本的 TensorFlow。如果您想安装特定版本,pip3 install tensorflow==X.XX请在运行脚本后发出(其中 X.XX 替换为您要安装的版本)。这将使用指定版本覆盖现有安装。

那很简单!进入下一步。

步骤 1d。设置 TensorFlow Lite 检测模型

接下来,我们将设置将与 TensorFlow Lite 一起使用的检测模型。本指南展示了如何下载由 Google 提供的示例 TFLite 模型,或如何使用您按照我的 TensorFlow Lite 教程系列第 1 部分自行训练的模型

检测模型有两个与之关联的文件:detect.tflite 文件(模型本身)和 labelmap.txt 文件(为模型提供标签图)。我组织模型文件的首选方法是创建一个文件夹(例如“BirdSquirrelRaccoon_TFLite_model”)并将detect.tflite 和labelmap.txt 都保存在该文件夹中。这也是 Google 的可下载示例 TFLite 模型的组织方式。

选项 1. 使用 Google 的示例 TFLite 模型

Google 提供了一个示例量化 SSDLite-MobileNet-v2 对象检测模型,该模型在 MSCOCO 数据集上训练并转换为在 TensorFlow Lite 上运行。它可以检测和识别 80 种不同的常见物体,例如人、汽车、杯子等。

通过发出以下命令下载示例模型(可以在TensorFlow 官方网站的对象检测页面上找到):

1
wget https://storage.googleapis.com/download.tensorflow.org/models/tflite/coco_ssd_mobilenet_v1_1.0_quant_2018_06_29.zip

通过发出(此命令自动创建文件夹)将其解压缩到名为“Sample_TFLite_model”的文件夹中:
1
unzip coco_ssd_mobilenet_v1_1.0_quant_2018_06_29.zip -d Sample_TFLite_model

好的,示例模型已准备就绪!

选项 2:使用您自己的自定义训练模型

您还可以通过将模型文件夹移动到 /home/pi/tflite 目录来使用自定义对象检测模型。如果您按照我的 TensorFlow Lite 指南的第 1 部分在您的 PC 上训练和转换 TFLite 模型,您应该有一个名为“TFLite_model”的文件夹,其中包含一个 detect.tflite 和 labelmap.txt 文件。(它还会有一个 tflite_graph.pb 和 tflite_graph.pbtxt 文件,TensorFlow Lite 不需要这些文件,但可以留在文件夹中。)

您可以简单地将该文件夹复制到 USB 驱动器,将 USB 驱动器插入您的 Raspberry Pi,然后将该文件夹移动到 /home/pi/tflite1 目录中。(或者,您可以通过电子邮件将其发送给自己,或将其放在 Google 云端硬盘上,或者使用您喜欢的任何文件传输方法。)这是我的 /home/pi/tflite1 目录中的“BirdSquirrelRaccoon_TFLite_model”文件夹的示例:

现在您的自定义模型已准备就绪!

步骤 1e。运行 TensorFlow Lite 模型!

是时候看看 TFLite 对象检测模型的实际效果了!首先,通过关闭您不使用的任何应用程序来释放内存和处理能力。另外,请确保您已插入网络摄像头或 Picamera。

通过从 /home/pi/tflite1 目录中发出以下命令来运行实时网络摄像头检测脚本。(在运行该命令之前,通过检查 (tflite1-env) 出现在命令提示符前面来确保 tflite1-env 环境处于活动状态。)TFLite_detection_webcam.py 脚本将与 Picamera 或 USB 网络摄像头一起使用。

1
python3 TFLite_detection_webcam.py --modeldir=Sample_TFLite_model

如果您的模型文件夹的名称与“Sample_TFLite_model”不同,请改用该名称。例如,我会--modeldir=BirdSquirrelRaccoon_TFLite_model用来运行我的自定义鸟类、松鼠和浣熊检测模型。

初始化片刻后,将出现一个窗口,显示网络摄像头源。检测到的对象将实时显示边界框和标签。

我TensorFlow精简版培训指导的第3部分给出的指令使用TFLite_detection_image.py和TFLite_detection_video.py脚本。确保在运行脚本时使用python3而不是python