教程:使用 TensorFlow Lite 执行样本图像分类推断 - AWS IoT Greengrass

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

教程:使用 TensorFlow Lite 执行样本图像分类推断

本教程向您展示如何使用 TensorFlow Lite 图像分类推理组件在 Greengrass 核心设备上执行样本图像分类推理。该组件包括以下组件依赖关系:

  • TensorFlow 精简版图像分类模型存储组件

  • TensorFlow 精简版运行时组件

部署此组件时,它会下载预先训练的 MobileNet v1 模型并安装 TensorFlow Lite 运行时及其依赖项。该组件发布有关该ml/tflite/image-classification主题的推理结果。要查看这些推理结果,请使用AWS IoT控制台中的 AWS IoT MQTT 客户端订阅此主题。

在本教程中,您将部署示例推理组件,以便对提供的AWS IoT Greengrass示例图像执行图像分类。完成本教程后,您可以完成本教程教程:使用 TensorFlow Lite 对来自相机的图像执行样本图像分类推断,该教程向您展示了如何修改示例推理组件,以便在 Greengrass 核心设备上对来自本地摄像机的图像进行图像分类。

有关在 Greengrass 设备上进行机器学习的更多信息,请参阅。执行机器学习推理

先决条件

要完成本教程,您需要:

  • 一款 Linux Greengrass 核心设备。如果没有,请参阅教程:AWS IoT Greengrass V2 入门。核心设备必须满足以下要求:

    • 在运行亚马逊 Linux 2 或 Ubuntu 18.04 的 Greengrass 核心设备上,设备上安装了 GNU C 库 (glibc) 2.27 或更高版本。

    • 在 armv7L 设备上,例如 Raspberry Pi,设备上安装了 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 或更高版本。Raspberry Pi OS Bullseye 包含的早期版本 NumPy,因此你可以运行以下命令在设备 NumPy 上升级。

        pip3 install --upgrade numpy
      • 设备上已启用旧版相机堆栈。Raspberry Pi OS Bullseye 包含一个新的相机堆栈,该堆栈默认处于启用状态且不兼容,因此您必须启用旧版相机堆栈。

        启用旧版相机堆栈
        1. 运行以下命令打开 Raspberry Pi 配置工具。

          sudo raspi-config
        2. 选择接口选项

        3. 选择旧版相机以启用旧版相机堆栈。

        4. 重启 Raspberry Pi。

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

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

订阅默认通知主题
  1. AWS IoT控制台导航菜单中,选择测试,MQTT 测试客户端

  2. 在 “订阅主题” 下的 “主题名称” 框中输入ml/tflite/image-classification

  3. 选择订阅

步骤 2:部署 TensorFlow Lite 图像分类组件

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

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

  2. 组件页面的公有组件选项卡上,选择 aws.greengrass.TensorFlowLiteImageClassification

  3. aws.greengrass.TensorFlowLiteImageClassification 页面上,选择部署

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

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

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

  5. 指定目标页面中,执行以下操作:

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

    2. 部署目标下,选择部署目标,然后选择下一步。如果您正在修改现有部署,则无法更改部署目标。

  6. “选择组件” 页面的 “公共组件” 下,确认已选择该aws.greengrass.TensorFlowLiteImageClassification组件,然后选择 “下一步”。

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

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

  9. 在 “审阅” 页面上,选择 “部署

  1. 创建一个deployment.json文件来定义 TensorFlow Lite 图像分类组件的部署配置。此文件应如下所示:

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

      • 事物: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 Lite 对象检测组件。

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

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

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

步骤 3:查看推理结果

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

  • AWS IoTMQTT 客户端-要查看推理组件在默认通知主题上发布的结果,请完成以下步骤:

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

    2. 在 “订阅” 下,选择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 客户端中看不到推理结果,则表示部署失败或未到达核心设备。如果您的核心设备未连接到互联网或没有运行该组件的正确权限,则可能会发生这种情况。在核心设备上运行以下命令以查看AWS IoT Greengrass核心软件日志文件。此文件包含来自 Greengrass 核心设备部署服务的日志。

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

有关更多信息,请参阅对机器学习推理进行故障排除

后续步骤

如果您的 Greengrass 核心设备支持相机接口,则可以教程:使用 TensorFlow Lite 对来自相机的图像执行样本图像分类推断完成,其中向您展示了如何修改示例推理组件以对来自相机的图像进行图像分类。

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

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

  • 修改推理组件ImageDirectory配置中的ImageName和配置参数,以指定用于推理的自定义图像。

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