:使用 TensorFlow Lite 进行样本图像分类推断 - Amazon IoT Greengrass
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

:使用 TensorFlow Lite 进行样本图像分类推断

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

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

  • TensorFlow 精简版运行时组件

当您部署此组件时,它会下载预先训练的 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 入门。,:

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

    • 在 Raspberry Pi 等 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。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. 选择 Subscribe

第 2 步:部署 L TensorFlow ite 图像分类组件

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

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

  2. 在 “组” 页面上的 “公共组件” 选项卡上,选择aws.greengrass.TensorFlowLiteImageClassification

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

  4. D eplo yment (),:

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

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

  5. Selec t target (),:

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

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

  6. “选择组件” 页面的 “公共组件” 下,验证该aws.greengrass.TensorFlowLiteImageClassification组件是否已选中,然后选择 “下一步”。

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

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

  9. 在 “查看” 页面上,选择 “部署

  1. 创建一个deployment.json文件来定义 L TensorFlow ite 图像分类组件的部署配置。:

    { "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 IoTMQTT 客户端 —要查看推理组件在默认通知主题上发布的结果,请完成以下步骤:

    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

有关更多信息,请参阅 Troubleshooting machine learning inference

后续步骤

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

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

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

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

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