写点什么

边缘机器学习:借助 AWS IoT Greengrass 使用和重新训练图像分类模型

  • 2019-09-25
  • 本文字数:3688 字

    阅读完需:约 12 分钟

边缘机器学习:借助 AWS IoT Greengrass 使用和重新训练图像分类模型

随着 AWS IoT Greengrass 图像分类连接器在今年的 re:Invent 大会上推出,在边缘站点通过 AWS IoT Greengrass 使用图像分类变得比以往更加轻松。AWS IoT Greengrass 是驻留在本地设备上的软件,因此它可以分析更接近数据源(传感器等)的数据。通过使用 AWS IoT Greengrass 图像分类连接器,无需编写代码,即可将 AWS IoT Greengrass Core 设备连接到第三方应用程序、本地软件和 AWS 服务。AWS IoT Greengrass 图像分类连接器可以使 AWS IoT Greengrass Core 设备将图像分类为多个类别之一(例如,将工厂中的微芯片分类为有缺陷/无缺陷、对库存类型进行分类,或确定您在 Instagram 上关注的狗狗的种类)。这种预测被称为 推理。总之,图像分类和 AWS IoT Greengrass 使您即使在设备与云断开连接时也能够执行推理!


AWS IoT Greengrass 图像分类连接器在后台使用机器学习模型,该模型已经使用 Amazon SageMaker 中的图像分类算法进行训练。通过部署连接器,可以自动在 AWS IoT Greengrass Core 设备上拉取和配置进行预测所需的所有 Lambda 函数和机器学习库 (MXNet)。


在这两篇博文中,我们将介绍一个使用图像分类创建应用程序的端到端示例。在第 1 部分中,我们将在 Amazon SageMaker 中创建一个新的图像分类模型,并使用 AWS IoT Greengrass 图像分类连接器启动和运行该模型。在第 2 部分中,我们将收集现场数据,重新训练我们的模型,并观察推理结果的变化情况。

构建的对象

我们将解决一个可通过使用图像分类来解决的实际问题:在回收利用设施中对饮料包装容器进行分类。我们将训练我们的模型,确定图像中是否包含啤酒杯、酒瓶、咖啡杯或易拉罐。如果图像不属于其中的任何一类,我们还将包含杂类。


首先,我们将使用 Caltech 256 数据集构建图像分类模型。然后,我们将创建一个 AWS IoT Greengrass 图像分类连接器,并通过专门用于对饮料包装容器进行分类的 Lambda 函数与之交互。在第 1 部分末尾,我们将得到以下架构:


先决条件

要遵循本文中的说明,您需要:


  • Raspberry Pi 3 Model B

  • Raspberry Pi Camera Module V2 – 800 万像素,1080p

  • 请确保在运行 AWS IoT Greengrass Core v1.7.0 的 Raspberry Pi 中部署一个 Greengrass 组。请确保您的 Greengrass 组具有 IAM 组角色,该角色至少附加 AWSGreengrassResourceAccessRolePolicy 和 AWSGreengrassFullAccess 策略。您可以通过打开 AWS IoT 控制台并选择设置来执行此操作。有关使用 AWS IoT Greengrass 设置设备的信息,请访问 AWS IoT Greengrass 开发人员指南中的 AWS IoT Greengrass 入门。


要使用 IoT Greengrass 图像分类连接器,我们需要安装用于图像分类的机器学习库 MXNet 所需的依赖项。按照 图像分类连接器连接器文档中有关 ARMv7 概述的安装脚本进行操作。


注意:要在 Raspberry Pi 上安装依赖项,必须增加交换文件的大小。我们建议将大小设置为 1000。此安装最多可能需要 1 小时。


最后,按照 图像分类连接器文档中的故障排除部分,运行以下命令,以防止在部署期间出现特定 Raspberry Pi/opencv 的问题:


$ sudo ln /dev/null /dev/raw1394
复制代码


如果您在执行这些步骤时遇到了问题,请参阅 AWS IoT Greengrass 文档中的故障排除部分。

构建和测试应用程序

首先,我们将创建一个 Lambda 函数,该函数可以使用 Pi 摄像头拍照,并使用图像分类模型进行预测。

创建 Lambda 函数

创建 Lambda 函数。从 GitHub 将 beverageclassifier.py 下载到一个新目录中,然后将 AWS IoT Greengrass Machine Learning SDK 下载并解压到同一个位置。将该目录压缩到一个 .zip 文件中,并使用该文件在 AWS Lambda 控制台中创建一个 Lambda 函数。我们将 Lambda 函数命名为 beverage_classifier。在 AWS IoT 控制台中,将此 Lambda 函数添加到您的组,并将其配置为长期使用的 Lambda 函数,内存限制为 128MB,超时为 10 秒,如以下屏幕截图所示。有关创建和打包 Lambda 函数的更多信息,请参阅 AWS IoT Greengrass 开发人员指南中的创建和打包 Lambda 函数。


在 Raspberry Pi 上运行以下命令,以安装 AWS IoT Greengrass Core SDK:


$ pip install greengrasssdk
复制代码


要使用 Pi 摄像头,我们需要设置 Raspberry Pi 和一些本地资源。按照 AWS IoT Greengrass 开发人员指南中的配置 Rasberry Pi 和将资源添加到 Greengrass 组部分中的步骤进行操作。


请注意,与图像分类连接器的交互通过 AWS IoT Greengrass Machine Learning SDK 实现。


创建模型

我们将使用 Amazon SageMaker 来创建和训练我们的图像分类模型。在 Amazon SageMaker 控制台中,使用我们在 GitHub 上提供的示例创建笔记本。


遵循笔记本中针对第 1 部分的说明。完成后,您将拥有一个用于配置图像分类连接器的 Amazon SageMaker 训练作业。

配置图像分类连接器

现在我们有了训练作业,就可以设置连接器了。将连接器部署到我们的 Greengrass Core 设备后,我们的图像分类模型可以由我们在上一步中创建的 Lambda 函数在本地使用。


首先,在您的 Greengrass 组中创建机器学习资源。您可以在 AWS IoT 控制台的 Greengrass 组页面中找到您的组。在页面上的资源下,选择机器学习选项卡,然后选择添加机器学习资源。使用以下屏幕截图中的值填写字段。对于 SageMaker 模型,请务必选择我们在上一步中创建的 Amazon SageMaker 模型。



选择保存并创建部署。


现在我们准备创建连接器。导航到您的 Greengrass 组,选择连接器选项卡,然后选择添加连接器。我们会将此连接器部署到 Raspberry Pi,因此在选择连接器上,选择 Image Classification ARMv7 连接器。


在下一页,我们将为连接器配置一些参数。选择您在上一步中创建的机器学习资源。对于本地推理服务名称,请输入 beverage-classifier。当我们通过 AWS IoT Greengrass Machine Learning SDK 调用连接器时,此名称将用于我们的 Lambda 代码中。使用此屏幕截图中的值配置连接器的其余参数。



选择添加,然后创建新部署。我们的 Lambda 函数现在可以访问我们的图像分类模型了!


如果您在执行上述任一步骤时遇到了问题,请参阅 图像分类连接器文档中的故障排除部分

配置订阅

现在我们已经设置了连接器和 Lambda 函数,接下来我们创建一种与我们的应用程序交互的方法。在 AWS IoT 控制台中的测试页面中,我们将配置 AWS 云和 beverage_classifier Lambda 函数之间的订阅,以便我们可以触发设备捕获图像并在控制台中查看推理结果。实际上,任何 MQTT 消息都可以触发 beverage_classifier Lambda 函数。我们使用 AWS IoT 控制台来触发此示例的事件,因为该控制台提供了简单的调试反馈,此外,还可以使用其他方法触发这些事件。在生产环境中,您可以从其他设备或 Lambda 函数发送这些 MQTT 事件。(即使在 Greengrass Core 设备与云断开连接时,也可以在设备和 Greengrass Core 设备之间发送消息!) 根据您的使用案例,AWS IoT 作业提供了另一种与 Greengrass Core 设备交互的方式。


在 AWS IoT 控制台中,为您的组配置以下订阅:


  1. 关于 /request/classify/beverage_container(主题)的 AWS IoT Cloud(源)到 beverage_classifier Lambda(目标)。有关此主题的消息将触发 Lambda 代码。

  2. 关于 /response/prediction/beverage_container(主题)的 beverage_classifier Lambda(源)到 AWS IoT Cloud(源)。这些消息将出现在 AWS IoT 控制台并报告预测。

设置本地资源

为我们将存储所捕获图像的本地目录配置卷资源:



在部署之前,我们需要在设备上创建 /home/ggc_user/raw_field_data 目录。我们还需要为 ggc_user 提供读取和写入权限:


$ sudo mkdir -p /home/ggc_user/raw_field_data$ sudo chown -R ggc_user:ggc_group /home/ggc_user/raw_field_data/
复制代码


您也可以通过在饮料包装容器分类器 AWS IoT Greengrass Lambda 函数配置中设置运行为(Run as)字段来授予您自己的用户 ID/组 ID 权限。有关更多信息,请参阅 AWS IoT Greengrass 开发人员指南中的使用组特定配置控制 Greengrass Lambda 函数的执行


创建部署。

测试

所有内容都设置完后,我们就可以测试饮料包装容器分类器了。在 AWS IoT 控制台中,选择测试,并订阅主题 /response/prediction/beverage_container。发布到主题 /request/classify/beverage_container 后将捕获并对图像进行分类! 将咖啡杯、啤酒杯、酒瓶或易拉罐放在 Pi 摄像头前面,然后选择发布到主题。您的 Greengrass Core 设备将捕获图像、进行预测,并将结果发送回 AWS IoT 控制台:


小结

测试将证明 Caltech 256 数据集的局限性。您会注意到许多预测不正确或置信度很低。在测试中,除啤酒杯之外,我们发现其他对象的置信度较低或预测不正确:



预测:啤酒杯,置信度:40.38%



预测:啤酒杯,置信度:79.16%



预测:易拉罐,置信度:44.43%



预测:杂类,置信度:95.02%


如果我们的模型准确度能得以提升,这将会很棒。在第 2 部分中,我们将向您展示如何扩展此应用程序来收集您自己的图像并重新训练模型,尝试提高模型性能!


本文转载自博客 AWS。


原文链接:


https://amazonaws-china.com/cn/blogs/china/machine-learning-at-the-edge-using-and-retraining-image-classification-models-with-aws-iot-greengrass-part-1/


2019-09-25 15:49917
用户头像

发布了 1900 篇内容, 共 144.1 次阅读, 收获喜欢 81 次。

关注

评论

发布
暂无评论
发现更多内容

一次客户需求引发的K8s网络探究

京东科技开发者

云计算

Mongodb特定场景性能数十倍提升优化实践(记一次十亿级mongodb核心集群雪崩故障)

杨亚洲(专注MongoDB及高性能中间件)

MySQL 数据库 mongodb 架构 分布式数据库mongodb

Hudi on Flink 快速上手指南

Apache Flink

flink

区块链溯源,茶叶溯源平台的搭建

13828808769

#区块链#

Java 并发系列(二):DCL — Double Check Lock

TroyLiu

Java volatile 多线程 synchronized DCL

科技赋能城市建设,英特尔正式发布智慧社区解决方案参考架构

E科讯

JVM-技术专题-Class文件加载虚拟机

码界西柚

JVM Class字节码

一位入职蚂蚁金服,年薪180万的大佬扔给我的笔记,看完发现差距不止一点点!

Java架构追梦

Java 阿里巴巴 架构 面试

Java学习之路 -- Java怎么学?

秦怀杂货店

Java 编程 基础 书籍

微服务时代组件化和服务化的抉择

vivo互联网技术

微服务 组件化 服务化 服务调用

Elasticsearch详细剖析

大数据技术指南

ES 3月日更

【签约计划】技术编辑能力考核成绩公布

InfoQ写作社区官方

签约计划 热门活动

百度飞桨中国行南京站开启!共研AI赋能产业新模式

百度大脑

百度 AI 飞桨

常用的视频剪辑软件介绍,自媒体必备工具!

奈奈的杂社

首站重庆聚焦智慧物流、呈现最新AI能力

百度大脑

AI 百度大脑

你真了解开源许可证吗?

郭旭东

开源

“广度”和“深度”,是我最终选择蚂蚁的理由

DT极客

Python基础之:Python中的异常和错误

程序那些事

Python Python3 程序那些事

实战案例丨分布式系统中如何用python实现Paxos

华为云开发者联盟

Python 算法 分布式系统 PAXOS 集群库

LDO和DC-DC有什么不同?如何选型?

不脱发的程序猿

28天写作 3月日更 LDO DC-DC 电源转换

中国唯一入选 Forrester 领导者象限,阿里云 Serverless 全球领先

Serverless Devs

阿里云 Serverless 云原生

EGG NETWORK阿凡提超级公链  EFT流量通证信息完全公开源

币圈那点事

智慧公安警务系统搭建,警务大数据可视化分析平台解决方案

13828808769

智慧城市

Python+OpenCV检测灯光亮点

不脱发的程序猿

Python OpenCV 28天写作 3月日更 检测灯光亮点

Rust从0到1-基础概念-注释

rust 代码注释

面试官:说说JavaScript中的事件模型

我家有萌🐱

JavaScript 面试 大前端 js

【技术面对面】基于场景图的多物体图像生成技术

京东科技开发者

云计算

python中find_element()和find_elements()的区别

Geek_6370d5

Python

银四30天,苦心啃透java高级工程师面试1000题,涨薪10K很难吗?

Java 编程 程序员 架构 面试

2021突击银四必备:BAT900道Java面试清单!免费开放

比伯

Java 编程 架构 面试 计算机

在开源的公链上实现隐私保护?静看NA公链 NAC公链创新之路应如何蜕变

区块链第一资讯

边缘机器学习:借助 AWS IoT Greengrass 使用和重新训练图像分类模型_文化 & 方法_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章