AWS IoT Greengrass Version 1 于 2023 年 6 月 30 日进入延长使用寿命阶段。有关更多信息,请参阅 AWS IoT Greengrass V1维护策略。在此日期之后,AWS IoT Greengrass V1 不再发布更新来提供新功能、功能增强、错误修复或安全补丁。在 AWS IoT Greengrass V1 上运行的设备不会受到干扰,并且将继续运行并连接到云。我们强烈建议您迁移到 AWS IoT Greengrass Version 2,从而添加重要的新功能并支持更多平台。
ML 对象检测连接器
警告
此连接器已进入生命周期延长阶段,AWS IoT Greengrass 不会发布更新来提供功能、现有功能增强、安全补丁或错误修复。有关更多信息,请参阅 AWS IoT Greengrass Version 1 维护策略。
ML 对象检测连接器提供在 AWS IoT Greengrass 核心上运行的机器学习 (ML) 推理服务。该本地推理服务使用由 SageMaker Neo 深度学习编译器编译的对象检测模型执行对象检测。支持两种类型的对象检测模型:Single Shot Multibox Detector(单步多框检测器,SSD)和 You Only Look Once(只用看一遍,YOLO)v3。有关更多信息,请参阅对象检测模型要求。
用户定义的 Lambda 函数使用 AWS IoT Greengrass 机器学习开发工具包将推理请求提交给本地推理服务。该服务对输入图像执行本地推理,并针对图像中检测到的每个对象返回预测列表。每个预测都包含一个对象类别、一个预测置信度得分和像素坐标,这些像素坐标指定围绕预测对象的边界框。
AWS IoT Greengrass 为多个平台提供 ML 对象检测连接器:
Connector |
描述和 ARN |
---|---|
ML 对象检测 Aarch64 JTX2 |
适用于 NVIDIA Jetson TX2 的对象检测推导服务。支持 GPU 加速。 ARN: |
ML 对象检测 x86664 |
适用于 x86_64 平台的对象检测推理服务。 ARN: |
ML 对象检测 ARMv7 |
适用于 ARMv7 平台的对象检测推理服务。 ARN: |
要求
这些连接器具有以下要求:
-
AWS IoT Greengrass Core 软件 v1.9.3 版或更高版本。
-
Python
版本 3.7 或 3.8 已安装在核心设备上,并已添加到 PATH 环境变量中。 注意
要使用 Python 3.8,请运行以下命令来创建从默认 Python 3.7 安装文件夹到已安装的 Python 3.8 二进制文件的符号链接。
sudo ln -s
path-to-python-3.8
/python3.8 /usr/bin/python3.7这会将设备配置为满足 AWS IoT Greengrass 的 Python 要求。
-
核心设备上已安装 SageMaker Neo 深度学习运行时的依赖项。有关更多信息,请参阅 在 AWS IoT Greengrass 核心上安装 Neo 深度学习运行时依赖项。
-
Greengrass 组中的 ML 资源。ML 资源必须引用包含对象检测模型的 Amazon S3 存储桶。有关更多信息,请参阅 Amazon S3 模型来源。
注意
该模型必须是 Single Shot Multibox Detector(单步多框检测器,SSD)或 You Only Look Once(只用看一遍,YOLO)v3 对象检测模型类型。它必须使用 SageMaker Neo 深度学习编译器进行编译。有关更多信息,请参阅对象检测模型要求。
-
添加到 Greengrass 组且已配置的 ML 反馈连接器。仅当您要使用此连接器上传模型输入数据并将预测发布到 MQTT 主题时,这才是必需的。
-
与此连接器进行交互时需要 AWS IoT Greengrass 机器学习开发工具包 v1.1.0。
对象检测模型要求
ML 对象检测连接器支持单步多框检测器(SSD)和只用看一遍(YOLO)v3 对象检测模型类型。您可以使用 GluonCV
您的对象检测模型必须使用 512 x 512 输入图像进行训练。来自 GluonCV Model Zoo 的预训练模型已经满足了这一要求。
必须使用 SageMaker Neo 深度学习编译器编译训练的对象检测模型。编译时,请确保目标硬件与您的 Greengrass 核心设备的硬件匹配。有关更多信息,请参阅 Amazon SageMaker 开发人员指南中的 SageMaker Neo。
必须将已编译的模型作为 ML 资源(Amazon S3 模型源)添加到与连接器相同的 Greengrass 组中。
连接器参数
这些连接器提供以下参数。
MLModelDestinationPath
-
包含 Neo 兼容 ML 模型的 Amazon S3 存储桶的绝对路径。这是为 ML 模型资源指定的目标路径。
AWS IoT 控制台中的显示名称:模型目标路径
必需:
true
类型:
string
有效模式:
.+
MLModelResourceId
-
引用源模型的 ML 资源的 ID。
AWS IoT 控制台中的显示名称:Greengrass 组 ML 资源
必需:
true
类型:
S3MachineLearningModelResource
有效模式:
^[a-zA-Z0-9:_-]+$
LocalInferenceServiceName
-
本地推理服务的名称。用户定义的 Lambda 函数将该服务的名称传递给 AWS IoT Greengrass 机器学习开发工具包的
invoke_inference_service
函数,从而调用该服务。有关示例,请参阅用法示例。AWS IoT 控制台中的显示名称:本地推理服务名称
必需:
true
类型:
string
有效模式:
^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}$
LocalInferenceServiceTimeoutSeconds
-
在推理请求终止之前经过的时间(以秒为单位)。最小值为 1。默认值是 10。
AWS IoT 控制台中的显示名称:超时(秒)
必需:
true
类型:
string
有效模式:
^[1-9][0-9]*$
LocalInferenceServiceMemoryLimitKB
-
该服务有权访问的内存量(以 KB 为单位)。最小值为 1。
AWS IoT 控制台中的显示名称:内存限制
必需:
true
类型:
string
有效模式:
^[1-9][0-9]*$
GPUAcceleration
-
CPU 或 GPU(加速)计算上下文。此属性仅适用于 ML 图像分类 Aarch64 JTX2 连接器。
AWS IoT 控制台中的显示名称:GPU 加速
必需:
true
类型:
string
有效值:
CPU
或GPU
MLFeedbackConnectorConfigId
-
用于上传模型输入数据的反馈配置的 ID。这必须与为 ML 反馈连接器定义的反馈配置的 ID 匹配。
仅当您要使用 ML 反馈连接器上传模型输入数据并将预测发布到 MQTT 主题时,才需要此参数。
AWS IoT 控制台中的显示名称:ML 反馈连接器配置 ID
必需:
false
类型:
string
有效模式:
^$|^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}$
创建连接器示例 (AWS CLI)
以下 CLI 命令创建一个 ConnectorDefinition
,其初始版本包含 ML 对象检测连接器。以下示例创建 ML 对象检测 ARMv7l 连接器的实例。
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{ "Connectors": [ { "Id": "MyObjectDetectionConnector", "ConnectorArn": "arn:aws:greengrass:
region
::/connectors/ObjectDetectionARMv7/versions/1", "Parameters": { "MLModelDestinationPath": "/path-to-model", "MLModelResourceId": "my-ml-resource", "LocalInferenceServiceName": "objectDetection", "LocalInferenceServiceTimeoutSeconds": "10", "LocalInferenceServiceMemoryLimitKB": "500000", "MLFeedbackConnectorConfigId" : "object-detector-random-sampling" } } ] }'
注意
这些连接器中的 Lambda 函数的生命周期很长。
在 AWS IoT Greengrass 控制台中,您可以从组的连接器页面添加连接器。有关更多信息,请参阅 Greengrass 连接器入门(控制台)。
输入数据
这些连接器接受一个图像文件作为输入。输入图像文件必须为 jpeg
或 png
格式。有关更多信息,请参阅 用法示例。
这些连接器不接受 MQTT 消息作为输入数据。
输出数据
这些连接器返回输入图像中识别的对象的预测结果的格式化列表:
{ "prediction": [ [ 14, 0.9384938478469849, 0.37763649225234985, 0.5110225081443787, 0.6697432398796082, 0.8544386029243469 ], [ 14, 0.8859519958496094, 0, 0.43536216020584106, 0.3314110040664673, 0.9538808465003967 ], [ 12, 0.04128098487854004, 0.5976729989051819, 0.5747185945510864, 0.704264223575592, 0.857937216758728 ], ... ] }
列表中的每个预测都包含在方括号中,并包含六个值:
-
第一个值表示已识别对象的预测对象类别。在 Neo 深度学习编译器中训练您的对象检测机器学习模型时,将确定对象类别及其对应的值。
-
第二个值是对象类别预测的置信度得分。这代表预测正确的可能性。
-
最后四个值对应于像素尺寸,该像素尺寸表示图像中预测对象周围的边界框。
这些连接器不发布 MQTT 消息来作为输出数据。
用法示例
以下示例 Lambda 函数使用 AWS IoT Greengrass 机器学习软件开发工具包与 ML 对象检测连接器进行交互。
注意
您可以从 AWS IoT Greengrass 机器学习开发工具包下载页面下载软件开发工具包。
该示例初始化一个开发工具包客户端,并同步调用该开发工具包的 invoke_inference_service
函数来调用本地推理服务。它会传入算法类型、服务名称、映像类型和映像内容。然后,该示例会解析服务响应以获取概率结果(预测)。
import logging from threading import Timer import numpy as np import greengrass_machine_learning_sdk as ml # We assume the inference input image is provided as a local file # to this inference client Lambda function. with open('/test_img/test.jpg', 'rb') as f: content = bytearray(f.read()) client = ml.client('inference') def infer(): logging.info('invoking Greengrass ML Inference service') try: resp = client.invoke_inference_service( AlgoType='object-detection', ServiceName='objectDetection', ContentType='image/jpeg', Body=content ) except ml.GreengrassInferenceException as e: logging.info('inference exception {}("{}")'.format(e.__class__.__name__, e)) return except ml.GreengrassDependencyException as e: logging.info('dependency exception {}("{}")'.format(e.__class__.__name__, e)) return logging.info('resp: {}'.format(resp)) predictions = resp['Body'].read().decode("utf-8") logging.info('predictions: {}'.format(predictions)) predictions = eval(predictions) # Perform business logic that relies on the predictions. # Schedule the infer() function to run again in ten second. Timer(10, infer).start() return infer() def function_handler(event, context): return
AWS IoT Greengrass 机器学习开发工具包中的 invoke_inference_service
函数接受以下参数:
参数 |
描述 |
---|---|
|
要用于推理的算法类型的名称。目前仅支持 必需: 类型: 有效值: |
|
本地推理服务的名称。在配置了连接器时,使用为 必需: 类型: |
|
输入映像的 mime 类型。 必需: 类型: 有效值: |
|
输入映像文件的内容。 必需: 类型: |
在 AWS IoT Greengrass 核心上安装 Neo 深度学习运行时依赖项
ML 对象检测连接器与 SageMaker Neo 深度学习运行时 (DLR) 捆绑在一起。连接器使用此运行时来处理 ML 模型。要使用这些连接器,必须在核心设备上安装 DLR 的依赖项。
在您安装 DLR 依赖项之前,请确保设备上存在所需的系统库(具有指定的最低版本)。
日志记录和故障排除
根据您的组设置,事件和错误日志会写入到 CloudWatch 日志和/或本地文件系统。此连接器中的日志使用前缀 LocalInferenceServiceName
。如果连接器出现异常行为,请检查连接器日志。其中经常包含有用的调试信息,例如缺失 ML 库依赖项或连接器启动故障的原因。
如果将 AWS IoT Greengrass 组配置为写入本地日志,则连接器会将日志文件写入到
。有关 Greengrass 日志记录的更多信息,请参阅 利用 AWS IoT Greengrass 日志进行监控。greengrass-root
/ggc/var/log/user/region
/aws/
可以使用以下信息帮助解决 ML 对象检测连接器问题。
所需系统库
以下选项卡列出了每个 ML 对象检测连接器所需的系统库。
问题
症状 | 解决方案 |
---|---|
在 Raspberry Pi 上,记录了以下错误消息,并且您没有使用摄像机: |
运行以下命令以显示驱动程序:
此操作是临时的。重新启动后,符号链接消失。请参阅您的操作系统分发手册以了解如何在重启时自动创建链接。 |
许可证
ML 对象检测连接器包含以下第三方软件/许可:
-
AWS SDK for Python (Boto3)
/Apache 许可证 2.0 -
botocore
/Apache 许可证 2.0 -
dateutil
/PSF 许可证 -
docutils
/BSD 许可证,GNU 通用公共许可证 (GPL),Python 软件基金会许可证,公共领域 -
jmespath
/MIT 许可证 -
s3transfer
/Apache 许可证 2.0 -
urllib3
/MIT 许可证
该连接器在 Greengrass Core 软件许可协议
另请参阅
-
《Amazon SageMaker 开发人员指南》中的对象检测算法