电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>电子资料>使用Raspberry Pi进行机器学习智能库存跟踪

使用Raspberry Pi进行机器学习智能库存跟踪

2023-06-26 | zip | 0.00 MB | 次下载 | 免费

资料介绍

描述

在今天的教程中,我将向您展示如何使用对象检测创建智能库存跟踪器,由深度学习提供支持,仅使用 Raspberry Pi 4 和相机。我们将在 YOLOv4 微型模型上应用迁移学习来识别自定义对象,然后使用简单的 Python 脚本解析模型的输出以生成每个对象的计数。最后,我们还将将该应用程序与 Azure IoT Central 集成,以便我们可以远程方便地监控我们的库存。

poYBAGNYv_-AU00fAAHjZYt7G5k195.png
 

项目概况

您是否曾经路过杂货店,但不确定是否需要多买一盒牛奶?好吧,如果有某种方法可以让我们看到冰箱内部的信息来更新我们的信息呢?今天,借助机器学习物联网基础设施,我们将把这种便利变成现实。

 

机器学习:图像分类与目标检测

图像分类和对象检测等对象识别任务都是使用深度神经网络执行的,但区分两者是有意义的。在图像分类中,我们的输入是包含单个类的图像。例如,我们可能有一张猫或狗的照片,我们希望模型将其分类为单个输出。

然而,在对象检测中,我们希望模型不仅能识别多个对象,还能定位照片中每个类的所有实例。事实上,与分类相反,我们现在可以计算帧中存在的每种类型对象的数量——这正是我们这个项目所需要的!

pYYBAGNYwAGANmFGAACXaSaX_Bw488.png
资料来源:数据营
 

有关更多信息,Jason Brownlee 的文章对不同类型的计算机视觉任务进行了很好的介绍。

什么是迁移学习?

由于计算机视觉任务通常被认为是复杂的任务,因此即使在强大的 GPU 上训练功能模型也可能需要数天时间。幸运的是,只要我们同时拥有架构和权重,任何人都可以轻松实现已经训练过的现有模型。

但是,如果我们想训练模型识别其他事物怎么办?毕竟,期望这些模型自然而然地能够很好地识别我们家庭对杂货产品的特定选择,这将是一个遥不可及的想法。在这种情况下,我们不必从头开始训练新模型。相反,我们可以应用迁移学习。

poYBAGNYwAeAHTgaAAHCxEl2lM4438.jpg
资料来源:datascience.aero
 

迁移学习是一种技术,我们利用预训练模型,并使用新数据集对其进行训练,以完成类似任务。它使我们能够用更少的数据在模型中实现更高的性能,同时仍然大大减少了训练所需的时间和资源。今天,我们将使用 YOLOv4 Tiny 进行迁移学习。

什么是YOLO?

YOLO 代表 You Only Look Once,是用于对象检测的最先进的神经网络机器学习框架。当它的第一篇论文于 2015 年发布时,它在推理速度上击败了其他模型,允许以牺牲准确性为代价进行实时对象检测。今天,YOLO 的工作在不同方面继续进行,以在保持低延迟的同时提高准确性。

对于今天的项目,我们使用的是第四版,YOLOv4。更具体地说,我们将使用 YOLOv4 的微型版本,它具有更小的网络规模。虽然我们确实用较小的模型牺牲了一些准确性,但这会降低计算能力的要求,使模型能够在像我们的 Raspberry Pi 这样的边缘设备上以良好的性能运行。

准备您的自定义数据集

作为我们训练自定义模型的第一步,我们必须通过收集我们想要检测的项目的照片来构建我们的数据集。每个班级至少需要 50 张图片。在我的项目中,我决定计算牛奶盒、鸡蛋和酸奶包的数量,所以我的数据集最终应该总共有至少 150 张图像。

以下是收集数据集时的一些提示。

  • 通常,捕获具有各种照明条件和摄像机角度的图像,以及不同方向的对象的图像,以创建更强大的数据集。
  • 对于通常以多个形式存在的对象,例如鸡蛋,请确保包括单个图像以及组中的其他图像。
  • 如果你经常堆叠一些物体,比如牛奶盒,你会想要在它们堆叠的地方包含几张图像,以便我们的模型可以相应地学习。

使用 labelImg 标记数据集

poYBAGNYwAyAaC50AAUBcVJ5L70132.png
 

有许多开源工具可用于标记计算机视觉项目的图像。我决定使用labelImg。它是免费的、开源的,可以使用以下两个命令轻松安装和运行。

pip3 install labelImg
labelImg

GUI(图形用户界面)应该打开,您可以开始为图像添加标签使用左侧窗格中的Open Dir选择图像所在的文件夹。加载图像后,使用 W 并单击并拖动以开始在对象周围绘制边界框。

在保存每个文件之前,请确保导出格式为Pascal VOC ,它应该写入与图像同名的 xml 文件。完成后,您应该会得到一个包含一堆图像和 xml 文件的文件夹,如下所示。

pYYBAGNYwA-AL3yIAAG3DpfnkoI997.png
 

使用 RoboFlow 处理标记数据

我们将首先使用 Roboflow 的平台来增强我们的图像。虽然我们可以自己以编程方式完成此操作,但 Roboflow 为以后提供了一些便利。增强是计算机视觉数据处理中的一种技术,我们通过翻转、旋转、倾斜、重新着色等对图像进行转换。

这是非常强大的,因为每次转换都会产生一张新照片。如果我们为每个训练样本创建三个增强版本,我们将拥有总样本数的 4 倍!再说了,谁有耐心手工标注每班200张照片?

pYYBAGNYwBKAbvU8AAFvCBFUaUo823.png
资料来源:Valentina Alto on Analytics Vidhya
 

要开始使用,请先在此处注册一个 Roboflow 帐户。免费帐户有一些限制,但对于我们今天的项目来说已经足够了。登录后,为对象检测(边界框)创建一个新数据集。你可以随意命名它。我将我的命名为“Groceries”,因为将来推广这个数据集可能会很有用。

然后,拖放您的图像和 xml 文件以上传它们。完成后选择“完成上传”,让 Roboflow 为您拆分数据。在增强选项下,添加水平和垂直翻转以及旋转 -15、+15。在预处理下,Auto-Orient 和 Resize 应该已经自动完成。如果没有,您可以参考我在下面的屏幕截图。

poYBAGNYwBWAVTqTAAGgGbW5NvY768.png
 

在右上角,单击生成。完成后,选择“YOLO Darknet”格式和“显示下载代码”。然后,你会看到一个 !curl 命令。保存它以在我们教程的后面部分使用。

Google Colab 上的迁移学习

现在是时候进行迁移学习了!本部分基于Roboflow 的教程及其随附的 Colab 笔记本,该笔记本使用血细胞数据集执行迁移学习。

对于这个项目,我对 Roboflow 的 notebook 进行了一些小改动,以便代码将使用默认情况下提供给免费 Colab 用户的 GPU 运行。首先将我的笔记本副本保存到您的 Google 云端硬盘,以便您进行编辑。

在您的副本中,导航到编辑 > 笔记本设置,并确保为硬件加速器选择 GPU。除非您的 GPU 架构因某种原因有所不同,否则您唯一需要进行的其他更改将是“为 YOLOv4 设置自定义数据集”部分中的第一个单元格。用上一节中的 curl 命令替换最后一行。

# Paste your link here
%cd /content/darknet
!curl -L  > roboflow.zip; unzip roboflow.zip; rm roboflow.zip

对于那些好奇的人来说,这个笔记本基本上可以根据我们的数据集自动执行我们需要对 YOLOv4 Tiny 架构进行的更改。可以在此处找到原始的分步说明,但它们很长并且可能会让初学者感到困惑。

现在,继续逐个运行单元格。培训需要一段时间,但在您休息之前,请注意,重置 Google Colab 运行时将删除从会话中创建的所有文件。是的 - 这包括模型的重量!

重要的!训练块完成后,请务必在运行时超时之前获取以下内容。

  • 从 content/darknet/backup/custom-yolov4-tiny-detector_best.weights 保存最佳权重
  • 从 content/darknet/cfg 中提取 custom-yolov4-tiny-detector.cfg

其余三个单元可用于在我们的测试数据上测试我们的模型。您可以重复运行最后一个单元格以拉出不同的随机照片供模型推断。

使用 Raspberry Pi 在边缘进行 ML 推理

现在我们有了自定义的 YOLOv4 微型模型,我们可以继续在我们的 Raspberry Pi 上对其进行测试。为此,我们首先必须设置我们的环境。注意:本教程使用 Raspberry Pi OS。

第 1 步:在您的 Raspberry Pi 上克隆 AlexeyAB 的暗网存储库并使用 make 编译。

git clone https://github.com/AlexeyAB/darknet
cd darknet
make

第二步:编辑./darknet/data/coco.names下的coco.names文件。使用任何文本编辑器,将此文件中的类替换为您的自定义类。在我的情况下,它是以下内容。

Egg
Milk
Yoghurt

第 3 步:将 Colab 笔记本中保存的权重放在 darknet/backup 文件夹中,将 custom-yolov4-tiny-detector.cfg 放在 darknet/cfg 文件夹中。

第 4 步:将您选择的名为“test.jpg”的测试图像放在 darknet 文件夹中,然后运行以下命令来测试模型。

./darknet detect cfg/custom-yolov4-tiny-detector.cfg backup/custom-yolov4-tiny-detector_best.weights test.jpg -dont-show

结果应显示在命令行界面中。伟大的!您会注意到运行推理所需的时间相当长 - 超过 7 秒。幸运的是,由于不需要如此频繁地更新冰箱的库存,这不会成为问题。

poYBAGNYwBeAM1YMAAC4FOa8I0Q864.png
 

还应该在 darknet 文件夹中生成一个 predictions.png 文件,这样您就可以看到每个已识别项目周围生成的边界框。

poYBAGNYwBuAZ2EGAAE-AxCQ914774.png
 

在 Microsoft Azure IoT Central 上部署

当然,如果我们不能远程访问这些数据,那么到目前为止我们所做的就不会很有用。我们项目的下一步是创建一个 Azure IoT Central 应用程序,我们将在其中定期发送我们的库存状态,以便我们可以远程监控它。在继续之前,请在此处创建一个免费的 Microsoft Azure 帐户

步骤 1:创建 Azure IoT Central 应用程序

前往Azure IoT Central。向下滚动并选择创建自定义应用程序在显示以下屏幕之前,系统将提示您登录。选择应用程序名称和 URL,并将应用程序模板保留为自定义应用程序。在定价计划下,现在选择免费。然后,继续创建您的应用程序。

pYYBAGNYwB6Afj7YAAEB7V2KMkA862.png
 

步骤 2:添加设备模板

使用侧边栏,导航到Device template ,然后点击+New 从那里,选择IoT 设备,然后选择Next: Customize 从这里,选择一个设备模板名称——我选择了“RaspberryPi”。然后,继续创建模板。

pYYBAGNYwCCAWSdvAAE4HizYcKs271.png
 

第 3 步:将接口和功能添加到设备模板

在上一步之后,您应该会自动转到新设备模板。选择自定义模型,然后添加继承接口再次选择自定义

之后,您将需要根据您正在跟踪的项目向界面添加功能。确保这些是您想要设置的正确参数,因为在我们发布设备模板后它们无法更改。点击保存,但暂时不要发布。

poYBAGNYwCOAbl7fAAD4pMY0HP0006.png
 

第 4 步:设置设备视图

为了在我们的 Azure IoT Central 应用程序上很好地可视化我们的数据,我们必须设置我们的设备视图。导航到设备面板上的视图并选择可视化设备

在此之后,在 Edit view 窗格下,单击Select a Telemetry 选择您的第一个项目,然后单击Add tile 该图块应显示在右侧的仪表板预览中。对于每个图块,将其显示值更改为“最后一个已知值”。

poYBAGNYwCaAOUj6AABL9sZNyXA654.png
 

我为总共三个项目添加了三个图块,最终得到如下所示的仪表板。对设置感到满意后,单击页面顶部的发布。

pYYBAGNYwCmAXrKvAADlii-EjL8681.png
 

第 5 步:创建设备

现在,我们必须创建一个设备。导航到设备并单击 + 新建。输入您选择的设备名称,并记住选择您之前创建的设备模板。我选择了“Rpi”。

点击进入您刚刚创建的设备。您应该会看到您之前设置的仪表板,但没有显示任何数据。我们将通过让我们的 Raspberry Pi 将一些数据发送到我们的 Azure IoT Central 应用程序来解决这个问题。点击屏幕右上角的“连接”,会弹出一个窗口。

poYBAGNYwCuAJtOIAACLbTq0D6s842.png
 

第 6 步:生成连接密钥

在新的浏览器窗口中打开此Azure IoT Central 连接字符串生成器。用上面窗口中的相应数据填空。请注意,“设备密钥”是指主密钥。最后,记录下生成的连接字符串以备后用。

第 7 步:为 Azure IoT 设置 Raspberry Pi

作为最后一步,在 Raspberry Pi CLI 上运行以下命令以安装 Azure IoT 的相关包。

sudo pip3 install azure-iot-device azure-iot-hub azure-iothub-service-client azure-iothub-device-client

运行完整的工作流程

到目前为止,我们一直在使用零碎的东西,但现在是时候将它们放在一起来创建我们的机器学习驱动的智能冰箱库存跟踪器了。在执行这些步骤之前,首先在此处访问我的 Github 存储库并将文件下载为 ZIP。img.txtparseSendData.py放入你的暗网文件夹。

1. 拍照

首先,我们使用连接到 Raspberry Pi 的相机拍照,使用命令…。该文件以 img.jpg 格式保存到暗网文件夹。

对于 Raspberry Pi 相机模块,请使用以下内容。确保首先通过 raspi-config > Interface 启用相机。

raspistill -o /darknet/img.jpg

如果你和我一样使用 USB 网络摄像头,先安装 fswebcam 包,然后我们可以用类似的方式拍照。第二个命令拍摄一张照片并将其作为 img.jpg 写入暗网文件夹,并具有特定的延迟、跳帧和分辨率。您可以根据自己的喜好调整它们。

sudo apt-get install fswebcam
fswebcam -D 2 -S 20 -r 1920x1080 --no-banner darknet/img.jpg

2. 运行并记录推理结果

要解析数据并将其发送到 Azure IoT Central,我们需要在文本文件中获取模型的输出。我们使用下面的命令读入img.txt(仅img.jpg)中列出的文件,进行物体检测,并将输出写入result.txt。

./darknet detector test cfg/coco.data cfg/custom-yolov4-tiny-detector.cfg backup/custom-yolov4-tiny-detector_best.weights -dont_show -ext_output < img.txt > result.txt

3. 解析并发送数据到 Azure IoT Central

现在,打开 parseSendData.py。这是一个简单的 Python 脚本,它将解析 result.txt 文件,计算每个类的实例,然后将其发送到 Azure IoT Central。首先,将 CONNECTION_STRING 替换为您在上一节第 12 步中获得的那个。

CONNECTION_STRING = <Replace with your own string>

然后,通过将键替换为您的项目类来更新字典。请注意,您必须根据您之前在 coco.data 文件中编写的内容来匹配每个类的字符串。否则,您将遇到关键错误。

现在,使用以下命令通过命令行运行 python 脚本:

python3 /parseSendData.py

如果一切顺利,您应该会看到类似于以下输出的内容,并且脚本将完成且没有错误。

Attempting to Send Messages to Azure IoT
Sending message: {'Egg': 6, 'Milk': 1, 'Yoghurt': 2}
Message Sent

返回 Azure IoT Central 上的设备视图。数字应该会在几分钟后出现!

pYYBAGNYwC2AZniPAABn8ORIrdQ267.png
 

自动化工作流程

我们需要做的最后一步是使用 bash 脚本自动化上一节的整个过程。幸运的是,我们可以使用cron安排整个过程在我们的 Raspberry Pi 上每隔半小时自动运行一次。

首先,我们在我们的暗网文件夹中创建一个名为“workflow.sh”的 bash 脚本,如下所示。bash 脚本本质上是一个控制台命令列表,可以在一个组中一起运行,因此它们不必单独运行。稍后,我们将使用 cron 自动执行此脚本。

fswebcam -D 2 -S 20 -r 1920x1080 --no-banner img.jpg

./darknet detector test cfg/coco.data cfg/custom-yolov4-tiny-detector.cfg backup/custom-yolov4-tiny-detector_best.weights -dont_show -ext_output < img.txt > result.txt

python3 parseSendData.py

然后,我们通过运行以下命令使脚本可执行。确保您当前的工作目录是脚本所在的暗网文件夹。

chmod +x workflow.sh

现在,如果您运行脚本,您应该会在终端输出中看到整个工作流程自动连续发生。我们的程序只需执行一次即可拍摄照片、运行模型、解析数据并将其上传到 Azure IoT Central。整洁的!

要使用 cron 安排此脚本的执行,首先通过运行以下命令打开 crontab 编辑器。Cron 预装了 Raspberry Pi OS。

crontab -e

系统将提示您选择编辑器。如果您不知道该选择哪个,请选择简单的 nano 编辑器(第一个选项)。然后,将在您的命令行中打开一个文件。我们必须将我们的预定命令添加到这个文件中才能自动运行。在文件的底部,添加以下内容。

*/30 * * * * /home/pi/darknet/workflow.sh

就是这样!让您的 Raspberry Pi 和摄像头就位,您应该会在接下来的半小时内看到数据流入您的 Azure IoT Central 应用程序。

结论

谢谢阅读!我希望本文对您创建智能库存跟踪项目有所帮助。构建一个供个人使用的机器学习应用程序变得如此容易令人惊讶。通过物联网和云集成,这些应用程序在满足实际需求方面更加有用。

有关边缘机器学习的更多项目,请随时查看以下内容:

 

下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1山景DSP芯片AP8248A2数据手册
  2. 1.06 MB  |  532次下载  |  免费
  3. 2RK3399完整板原理图(支持平板,盒子VR)
  4. 3.28 MB  |  339次下载  |  免费
  5. 3TC358743XBG评估板参考手册
  6. 1.36 MB  |  330次下载  |  免费
  7. 4DFM软件使用教程
  8. 0.84 MB  |  295次下载  |  免费
  9. 5元宇宙深度解析—未来的未来-风口还是泡沫
  10. 6.40 MB  |  227次下载  |  免费
  11. 6迪文DGUS开发指南
  12. 31.67 MB  |  194次下载  |  免费
  13. 7元宇宙底层硬件系列报告
  14. 13.42 MB  |  182次下载  |  免费
  15. 8FP5207XR-G1中文应用手册
  16. 1.09 MB  |  178次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234315次下载  |  免费
  3. 2555集成电路应用800例(新编版)
  4. 0.00 MB  |  33566次下载  |  免费
  5. 3接口电路图大全
  6. 未知  |  30323次下载  |  免费
  7. 4开关电源设计实例指南
  8. 未知  |  21549次下载  |  免费
  9. 5电气工程师手册免费下载(新编第二版pdf电子书)
  10. 0.00 MB  |  15349次下载  |  免费
  11. 6数字电路基础pdf(下载)
  12. 未知  |  13750次下载  |  免费
  13. 7电子制作实例集锦 下载
  14. 未知  |  8113次下载  |  免费
  15. 8《LED驱动电路设计》 温德尔著
  16. 0.00 MB  |  6656次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935054次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537798次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420027次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234315次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233046次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191187次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183279次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138040次下载  |  免费