我们可以看到图像中每个感兴趣的边界框,并为它们分配一个类标签。物体检测最常见的应用是人脸识别、口罩检测等。因此,我们将构建一个口罩检测器来检测人是否戴口罩。在 COVID 情况下,为了解决当前场景的问题,使用技术将自动执行检测任务,并避免手动检查违规者。
在今天的教程中,我们将学习如何使用强大的云平台Edge Impulse构建我们自己的口罩检测模型,通过该平台我们在 NVIDIA Jetson 板上部署经过训练的模型,并将其与 CSI 摄像头传感器连接以捕获实时图像。本教程可以应用来自您自己的图像数据集的数据集或来自Kaggle的标记公共数据集。图像数据集有两个类,分别是with_mask和without_mask。
在本教程结束时,您将能够:
使用Edge Impulse平台收集用于实时检测的良好数据集
数据标注
使用Edge Impulse训练口罩检测模型
在 NVIDIA Jetson 板上部署对象检测
要求
我们的项目将需要以下内容:
所需硬件:
NVIDIA Jetson 板(这里我们将使用Xavier NX 开发工具包)
笔记本电脑或独立 PC
对于实时摄像头演示,需要 Raspberry Pi 摄像头模块等摄像头。在这里,我们将使用Arducam Complete High Quality Camera Bundle。
所需软件:
边缘脉冲帐户。
一些TinyML和深度学习的经验是有帮助的,但不是必需的。
要无头运行 NVIDIA Jetson Nano 板(不带显示器),请从您的笔记本电脑设置 SSH 访问或 RDP 连接。
熟悉Linux命令行,bash之类的shell,nano之类的编辑器。
NVIDIA Jetson Xavier NX 开发者套件
在这里,我将使用 Nvidia Xavier NX 板。与 Jetson Nano 相比,Xavier NX 的速度要快两到七倍,具体取决于应用。
在 NVIDIA Jetson 主板上安装 Edge Impulse
Edge Impulse是一个基于云的平台。使用 Edge Impulse 平台,用户无需深入了解编程或 AI、ML 概念即可训练他们的 AI、ML 模型。
要使用Edge Impulse训练机器学习模型,请创建一个Edge Impulse帐户,验证您的帐户,然后开始一个新项目。
在开始任何事情之前,最好更新所有内容。您可以通过输入以下命令来做到这一点。
sudo apt-get update sudo apt-get upgrade
同样在我们开始之前,将您的相机模块连接到您的 Nvidia Jetson 板上的 CSI 端口。然后,要在 Nvidia Jetson 板上使用 Edge Impulse,您首先必须安装 Edge Impulse 及其依赖项。
从终端运行:
wget -q -O - https://cdn.edgeimpulse.com/firmware/linux/jetson.sh | bash
您应该得到如下所示的响应。
+ edge-impulse-linux@1.3.3 added 347 packages from 416 contributors in 68.138
现在,使用以下命令运行 Edge Impulse:
edge-impulse-linux
您将被要求登录您的 Edge Impulse 帐户。然后系统会要求您选择一个项目,最后选择一个麦克风和摄像头以连接到该项目。
Edge Impulse Linux client v1.3.3 ? What is your user name or e-mail address (edgeimpulse.com)? com ? What is your password? [hidden] ? Select a microphone (or run this command with --disable-microphone to skip sel ection) jetson-xaviernx - jetson-xaviernx-ape [SER] Using microphone hw:1,0 [SER] Using camera CSI camera starting... [SER] Connected to camera [WS ] Connecting to wss://remote-mgmt.edgeimpulse.com [WS ] Connected to wss://remote-mgmt.edgeimpulse.com ? What name do you want to give this device? Jetson [WS ] Device "Jetson" is now connected to project "shakhizat-project-1" [WS ] Go to https://studio.edgeimpulse.com/studio/45666/acquisition/training to build your machine learning model!
现在,您已在 Nvidia Jetson 板上成功安装 Edge Impulse。
如果一切正常,您应该在 Edge Impulse 的设备部分看到以下内容:
数据收集
对于这个口罩检测项目,我们应该收集模仿真实情况的图像数据集。我们应该为每个班级收集足够的图像。您可以使用手机、Nvidia Jetson 板来收集样本,也可以将图像上传到边缘脉冲帐户。
要加载样本,请单击Edge Impulse 的数据采集部分。
然后,单击让我们收集一些数据按钮。
由于我们要训练和测试图像数据集,我们应该将其拆分为 80-20。
对于面罩检测,我们需要我们的边界框来分类我们的类。因此,我们需要使用 Edge Impulse 标注工具对图像进行标注。
1 / 2
如果您有很多图像和类,则此过程需要时间。
理想情况下,建议从Kaggle获取面罩数据集。这个用于机器学习的数据集以及它们的 PASCAL VOC 格式的边界框已经过注释。Pascal VOC 是一个 XML 文件,不像 COCO 有一个 JSON 文件,后者已成为对象检测标签的常见交换格式。但是,Edge Impulse使用 JSON 格式的另一种格式。您可以使用此python 脚本将注释从 Pascal VOC 转换为Edge Impulse格式。
完整的项目可以从这里找到,由Peter Ing实施。一探究竟。
训练模型
现在我们已经收集了口罩样本,我们可以将它们传递给神经网络并开始训练过程以自动检测一个人是否戴口罩。所以打开 Edge Impulse 的Impulse设计部分。
当我们的数据集准备好后,现在我们将为我们的数据创建一个脉冲。为此,请转到创建冲动部分。
单击添加处理块。
选择图像选项。
然后,单击一个学习块并添加对象检测选项。
将其重命名为面罩检测,然后单击保存脉冲按钮。
接下来,转到Impulse design菜单项下的Images部分,然后单击Generate Features选项卡,然后单击Generate features按钮。
之后,点击Impulse design 菜单项下的Face mask detection部分,然后点击页面底部的Start training按钮。在这里,我们使用了默认的MobileNetV2 。如果需要,您可以使用不同的训练模型。
训练输出:
Creating job... OK (ID: 2325943) Scheduling job in cluster... Job started Splitting data into training and validation sets... Splitting data into training and validation sets OK Training model... Training on 129 inputs, validating on 33 inputs Building model and restoring weights for fine-tuning... Finished restoring weights Fine tuning... Attached to job 2325943... Epoch 1 of 50, loss=1.0996249, val_loss=1.2549742 Epoch 2 of 50, loss=0.5730881, val_loss=1.0309869 Epoch 3 of 50, loss=0.37260413, val_loss=0.88406265 Epoch 4 of 50, loss=0.2732575, val_loss=0.8300728 Epoch 5 of 50, loss=0.21881193, val_loss=0.7985368 Epoch 6 of 50, loss=0.1842412, val_loss=0.77767074 Epoch 7 of 50, loss=0.15971155, val_loss=0.75798315 Epoch 8 of 50, loss=0.141622, val_loss=0.74178046 Epoch 9 of 50, loss=0.12764679, val_loss=0.7201556 Epoch 10 of 50, loss=0.124089435, val_loss=0.7229701 Epoch 11 of 50, loss=0.13733643, val_loss=0.6930027 Epoch 12 of 50, loss=0.10552671, val_loss=0.68260795 Epoch 13 of 50, loss=0.09776387, val_loss=0.6571001 Epoch 14 of 50, loss=0.09269215, val_loss=0.65096503 Epoch 15 of 50, loss=0.08853194, val_loss=0.6398335 Epoch 16 of 50, loss=0.08513473, val_loss=0.6339971 Epoch 17 of 50, loss=0.08155578, val_loss=0.6237093 Epoch 18 of 50, loss=0.07958686, val_loss=0.62563324 Epoch 19 of 50, loss=0.08469187, val_loss=0.60824037 Epoch 20 of 50, loss=0.106107965, val_loss=0.65657234 Epoch 21 of 50, loss=0.08075548, val_loss=0.60204226 Epoch 22 of 50, loss=0.06780515, val_loss=0.61008215 Epoch 23 of 50, loss=0.07962225, val_loss=0.6042041 Epoch 24 of 50, loss=0.07898002, val_loss=0.62557745 Epoch 25 of 50, loss=0.07712146, val_loss=0.6038083 Epoch 26 of 50, loss=0.059002914, val_loss=0.604347 Epoch 27 of 50, loss=0.060714073, val_loss=0.598505 Epoch 28 of 50, loss=0.056586243, val_loss=0.6049032 Epoch 29 of 50, loss=0.06364094, val_loss=0.5943693 Epoch 30 of 50, loss=0.0693655, val_loss=0.6258873 Epoch 31 of 50, loss=0.06930919, val_loss=0.5844879 Epoch 32 of 50, loss=0.055322483, val_loss=0.60721684 Epoch 33 of 50, loss=0.053181175, val_loss=0.5940475 Epoch 34 of 50, loss=0.071890086, val_loss=0.6106543 Epoch 35 of 50, loss=0.09753211, val_loss=0.63664484 Epoch 36 of 50, loss=0.063474864, val_loss=0.5776911 Epoch 37 of 50, loss=0.056974597, val_loss=0.5894003 Epoch 38 of 50, loss=0.05551439, val_loss=0.5942682 Epoch 39 of 50, loss=0.07409478, val_loss=0.5911636 Epoch 40 of 50, loss=0.0580862, val_loss=0.61330724 Epoch 41 of 50, loss=0.057891976, val_loss=0.58406746 Epoch 42 of 50, loss=0.052040614, val_loss=0.61015534 Epoch 43 of 50, loss=0.051715873, val_loss=0.5831931 Epoch 44 of 50, loss=0.052400388, val_loss=0.6184015 Epoch 45 of 50, loss=0.057132762, val_loss=0.5842898 Epoch 46 of 50, loss=0.061072033, val_loss=0.6269493 Epoch 47 of 50, loss=0.0581602, val_loss=0.6031094 Epoch 48 of 50, loss=0.051550377, val_loss=0.6048402 Epoch 49 of 50, loss=0.05313967, val_loss=0.6296155 Epoch 50 of 50, loss=0.050658334, val_loss=0.6037806 Finished fine tuning Checkpoint saved Finished training Creating SavedModel for conversion... Attached to job 2325943... Converting TensorFlow Lite float32 model... Converting TensorFlow Lite int8 quantized model with int8 input and float32 output... Calculating performance metrics... Calculating inferencing time... Attached to job 2325943... Job completed
训练过程完成后,我们可以将训练好的Edge 脉冲图像分类模型部署到 NVIDIA Jetson 板上。
下面的结果可视化:
在本教程中,您学习了如何使用Edge Impulse构建图像数据集,如何构建用于检测这些图像中的面罩的机器学习模型,以及如何将该模型部署到 NVIDIA Jetson 板等边缘设备并在其中进行测试一个真实的时间。简而言之,Edge Impulse是非编码人员开发机器学习模型的绝佳平台。强烈推荐。
参考
边缘脉冲对象检测初学者指南
在 Raspberry Pi 上使用 Edge Impulse TinyML 进行对象分类
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !