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

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

教程:使用 TensorFlow 精简版进行样本图像分类推理

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

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

  • TensorFlow 精简组件

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

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

Prerequisites

要完成本教程,您需要:

  • 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

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

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

订阅默认通知主题

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

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

  3. 选择 Subscribe

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    { "targetArn":"targetArn", "components": { "aws.greengrass.TensorFlowLiteImageClassification": { "componentVersion": 2.1.0, "configurationUpdate": { } } } }
    • targetArn字段,替换targetArn(采用以下格式):

      • 事物: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 IoTMQTT 客户端Amazon IoT控制台。要订阅组件发布推理结果的主题,请参阅第 1 步:订阅默认通知主题.

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

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

    2. UDER订阅中,选择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 精简版图像分类推断组件,请尝试以下操作:

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

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

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