教程:使用 TensorFlow Lite 执行示例图像分类推理 - Amazon IoT Greengrass
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

教程:使用 TensorFlow Lite 执行示例图像分类推理

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

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

  • TensorFlow Lite 运行时组件

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

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

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

先决条件

要完成本教程,您需要:

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

    • 在运行 Amazon 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:订阅默认通知主题

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

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

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

  3. 选择订阅

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

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

  1. Amazon 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 核心设备的组件日志中和 Amazon IoT 控制台的 Amazon IoT MQTT 客户端中查看推理结果。要订阅组件所发布的推理结果的主题,请参阅步骤 1:订阅默认通知主题

  • Amazon IoT MQTT 客户端 – 要查看推理组件针对默认通知主题发布的结果,请完成以下步骤:

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

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

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

后续步骤

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

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

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

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

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