教程:使用以下方法执行示例图像分类 TensorFlow 精简版 - Amazon IoT Greengrass
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

教程:使用以下方法执行示例图像分类 TensorFlow 精简版

本教程介绍如何使用TensorFlow Lite 图像分类推理组件,用于在 Greengrass 核心设备上执行示例图像分类推理。此组件包括以下组件依赖关系:

  • TensorFlow Lite 图像分类模型存储组件

  • TensorFlow Lite 运行时组件

当你部署此组件时,它会下载预训练过的 MobileNet v1 模型并安装TensorFlow 精简版运行时及其依赖关系。此组件将推理结果发布在ml/tflite/image-classification主题。要查看这些推理结果,请使用Amazon IoT在 MQTT 客户端Amazon IoT控制台来订阅此主题。

在本教程中,您可以部署示例推理组件,以便对由提供的示例图像执行图像分类。Amazon IoT Greengrass. 完成本教程后,您可以完成使用以下方法对照相机的图像执行样本图像分类推断 TensorFlow 精简版,其中向您展示了如何修改示例推理组件,以便在 Greengrass 核心设备上本地对照相机的图像执行图像分类。

先决条件

要完成本教程,您需要:

  • Linux Greengrass 核心设备。如果没有,请参阅教程:Amazon IoT Greengrass V2 入门

  • 如果您使用的是 Armv7L 设备,例如树莓派,则设备上安装的 OpenCV Python 的依赖关系。运行以下命令以安装依赖项:

    sudo apt-get install libopenjp2-7 libilmbase23 libopenexr-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libgtk-3-0 libwebp-dev
  • 如果您使用的是运行 Raspberry Pi OS Bullseye 的 Raspberry Pi, NumPy 在设备上安装了 1.22.4 或更高版本。树莓派 OS Bullseye 包括一个早期版本的 NumPy,因此你可以运行以下命令来升级 NumPy 在设备上。

    pip3 install --upgrade numpy

第 1 步:订阅默认通知主题

在此步骤中,您将配置Amazon IoT在 MQTT 客户端Amazon IoT控制台,查看 MQTT 消息 TensorFlow 精简图像分类组件。默认情况下,组件将推理结果发布在ml/tflite/image-classification主题。在将组件部署到 Greengrass 核心设备之前,请先订阅此主题,以便在组件首次运行时查看推理结果。

要订阅默认通知主题

  1. Amazon IoT控制台导航菜单,选择测试、MQTT 测试客户端.

  2. UNDER订阅主题,在主题名称框中,输入ml/tflite/image-classification.

  3. 选择 Subscribe

第 2 步:部署 TensorFlow 精简图像分类组件

在此步骤中,您将部署 TensorFlow 将图像分类组件精简到您的核心设备上:

  1. Amazon IoT Greengrass控制台导航菜单,选择组件.

  2. 在存储库的组件在页面上,公共组件选项卡上,选择aws.greengrass.TensorFlowLiteImageClassification.

  3. 在存储库的aws.greengrass.TensorFlowLiteImageClassification页面上,选择部署.

  4. 添加到部署,选择以下选项之一:

    1. 要将此组件合并到目标设备上的现有部署,请选择添加到现有部署,然后选择要修改的部署。

    2. 要在目标设备上创建新部署,请选择创建新部署. 如果您的设备上有现有部署,则选择此步骤将替换现有部署。

  5. 在存储库的指定目标页面上,执行以下操作:

    1. UNDER部署信息,输入或修改部署的友好名称。

    2. UNDER部署目标中,为您的部署选择目标,然后选择下一步. 如果要修改现有部署,则无法更改部署目标。

  6. 在存储库的选择组件页面,下公共组件,验证aws.greengrass.TensorFlowLiteImageClassification已选择组件,然后选择下一步.

  7. 在存储库的配置组件页面上,保留默认配置设置,然后选择下一步.

  8. 在存储库的配置高级设置页面上,保留默认配置设置,然后选择下一步.

  9. 在存储库的审核页面上,选择部署

  1. 创建deployment.json文件来定义的部署配置 TensorFlow 精简图像分类组件。此文件应类似以下内容:

    { "targetArn":"targetArn", "components": { "aws.greengrass.TensorFlowLiteImageClassification": { "componentVersion": 2.1.0, "configurationUpdate": { } } } }
    • targetArn字段中,替换targetArn以下格式为部署的事物组或事物组的 Amazon 资源名称 (ARN):

      • Thing:arn:aws:iot:region:account-id:thing/thingName

      • 事物组:arn:aws:iot:region:account-id:thinggroup/thingGroupName

    • 本教程使用组件版本 2.1.0。在aws.greengrass.TensorFlowLiteObjectDetection组件对象,替换2.1.0要使用其他版本的 TensorFlow 精简版物体检测组件。

  2. 运行以下命令以部署 TensorFlow 设备上的精简图像分类组件:

    aws greengrassv2 create-deployment \ --cli-input-json file://path/to/deployment.json

此部署可能需要几分钟的时间才能完成。在下一步中,检查组件日志以验证部署是否成功完成并查看推理结果。

第 3 步:查看推理结果

部署组件后,您可以在 Greengrass 核心设备上的组件日志中查看推理结果,也可以在Amazon IoT在 MQTT 客户端Amazon IoT控制台。要订阅组件发布推理结果的主题,请参阅第 1 步:订阅默认通知主题.

  • Amazon IoTMQTT 客户端— 查看推理组件在默认通知主题,请完成以下步骤:

    1. Amazon IoT控制台导航菜单,选择测试、MQTT 测试客户端.

    2. UNDER订阅,选择ml/tflite/image-classification.

      您应看到类似于以下示例的消息。

      { "timestamp": "2021-01-01 00:00:00.000000", "inference-type": "image-classification", "inference-description": "Top 5 predictions with score 0.3 or above ", "inference-results": [ { "Label": "cougar, puma, catamount, mountain lion, painter, panther, Felis concolor", "Score": "0.5882352941176471" }, { "Label": "Persian cat", "Score": "0.5882352941176471" }, { "Label": "tiger cat", "Score": "0.5882352941176471" }, { "Label": "dalmatian, coach dog, carriage dog", "Score": "0.5607843137254902" }, { "Label": "malamute, malemute, Alaskan malamute", "Score": "0.5450980392156862" } ] }
  • 组件日志— 要在组件日志中查看推理结果,请在 Greengrass 核心设备上运行以下命令。

    sudo tail -f /greengrass/v2/logs/aws.greengrass.TensorFlowLiteImageClassification.log

    您应看到类似于以下示例的结果。

    2021-01-01 00:00:00.000000 [INFO] (Copier) aws.greengrass.TensorFlowLiteImageClassification: stdout. Publishing results to the IoT core.... {scriptName=services.aws.greengrass.TensorFlowLiteImageClassification.lifecycle.Run.script, serviceName=aws.greengrass.TensorFlowLiteImageClassification, currentState=RUNNING} 2021-01-01 00:00:00.000000 [INFO] (Copier) aws.greengrass.TensorFlowLiteImageClassification: stdout. {"timestamp": "2021-01-01 00:00:00.000000", "inference-type": "image-classification", "inference-description": "Top 5 predictions with score 0.3 or above ", "inference-results": [{"Label": "cougar, puma, catamount, mountain lion, painter, panther, Felis concolor", "Score": "0.5882352941176471"}, {"Label": "Persian cat", "Score": "0.5882352941176471"}, {"Label": "tiger cat", "Score": "0.5882352941176471"}, {"Label": "dalmatian, coach dog, carriage dog", "Score": "0.5607843137254902"}, {"Label": "malamute, malemute, Alaskan malamute", "Score": "0.5450980392156862"}]}. {scriptName=services.aws.greengrass.TensorFlowLiteImageClassification.lifecycle.Run.script, serviceName=aws.greengrass.TensorFlowLiteImageClassification, currentState=RUNNING}

如果在组件日志或 MQTT 客户端中看不到推理结果,则部署失败或未到达核心设备。如果您的核心设备未连接到互联网或者没有运行组件的正确权限,则可能会发生这种情况。在核心设备上运行以下命令,查看Amazon IoT Greengrass核心软件日志文件。此文件包括来自 Greengrass 核心设备的部署服务的日志。

sudo tail -f /greengrass/v2/logs/greengrass.log

有关更多信息,请参阅 解决机器学习推理

后续步骤

如果你有一台带有受支持的摄像头接口的 Greengrass 核心设备,你可以完成使用以下方法对照相机的图像执行样本图像分类推断 TensorFlow 精简版,其中向您展示了如何修改示例推理组件以对照相机中的图像执行图像分类。

进一步探索示例的配置TensorFlow Lite 图像分类推理组件,请尝试以下操作:

  • 修改InferenceInterval配置参数来更改推理代码的运行频率。

  • 修改ImageNameImageDirectory推理组件配置中的配置参数,用于指定用于推理的自定义映像。

有关自定义公共组件的配置或创建自定义机器学习组件的信息,请参阅自定义机器学习组件.