AWS IoT Greengrass Version 1 於 2023 年 6 月 30 日進入延長使用壽命階段。如需詳細資訊,請參閱AWS IoT Greengrass V1 維護政策。在此日期之後, AWS IoT Greengrass V1 將不會發行提供功能、增強功能、錯誤修正或安全性修補程式的更新。在上運行的設備 AWS IoT Greengrass V1 不會中斷,並將繼續運行並連接到雲。我們強烈建議您移轉至 AWS IoT Greengrass Version 2,這會增加重要的新功能,並支援其他平台。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
ML 物件偵測連接器
警告
此連接器已移動到延長壽命階段,以及AWS IoT Greengrass不會發佈提供功能、增強現有功能、安全修補程序或錯誤修復的更新。如需詳細資訊,請參閱 AWS IoT Greengrass Version 1維護政策。
ML 物件偵測連接器提供在AWS IoT Greengrass核心。此本機推論服務會使用 SageMaker Neo 深度學習編譯器。支持兩種類型的對象檢測模型:Single Shot Multibox Detector (SSD) 和 YOLO Only Look Once (YOLO) v3。如需詳細資訊,請參閱物件偵測模型需求。
用户定義的 Lambda 函數使用AWS IoT GreengrassMachine Learning SDK,將推論請求提交至本機推論服務。此服務會在輸入影像上執行本機推論,並針對影像中偵測到的每個物件傳回預測清單。每個預測都包含一個物件類別、預測可信度分數,以及指定預測物件之週框方塊的像素座標。
AWS IoT Greengrass提供適用於多個平台的 ML 物件偵測連接器:
連接器 |
描述和 ARN |
---|---|
ML 物件偵測 Aarch64 JTX2 |
適用於 NVIDIA Jetson TX2 的物件偵測推論服務。支援 GPU 加速。 ARN: |
ML 物件偵測 |
適用於 x86_64 平台的物件偵測推論服務。 ARN: |
ML 物體檢測臂 7 |
適用於 ARMv7 平台的物件偵測推論服務。 ARN: |
要求
這些連接器有下列要求:
-
AWS IoT Greengrass核心軟體 1.9.3 版或更新版本。
-
蟒蛇
版本 3.7 或 3.8 安裝在核心裝置上並已新增至 PATH 環境變量。 注意
要使用 Python 3.8,請運行以下命令以創建從默認 Python 3.7 安裝文件夾到已安裝的 Python 3.8 二進制文件的符號鏈接。
sudo ln -s
path-to-python-3.8
/python3.8 /usr/bin/python3.7這會設定您的裝置以符合 AWS IoT Greengrass 的 Python 需求。
-
的相依性 SageMaker 安裝在核心裝置上的 Neo 深度學習執行時間。如需詳細資訊,請參閱 在 AWS IoT Greengrass 核心上安裝 Neo 深度學習執行時間相依性。
-
Greengrass 群組中的 ML 資源。ML 資源必須引用包含物件偵測模型的 Amazon S3 存儲段。如需詳細資訊,請參閱「」Amazon S3 模式來源。
注意
模型必須是 Single Shot Multibox Detector 或 You Only Look Once v3 物件偵測模型類型。它必須使用 SageMaker Neo 深度學習編譯器。如需詳細資訊,請參閱物件偵測模型需求。
-
所以此ML 意見回饋連接器已新增至 Greengrass 組並進行了配置。只有在您想要使用連接器上傳模型輸入資料,並將預測發佈至 MQTT 主題時,才需要此項目。
-
AWS IoT GreengrassMachine Learning SDK需有 1.1.0 版,才能與此連接器互動。
物件偵測模型需求
ML 物件偵測連接器支援 Single Shot Multibox Detector (SSD) 和 YOLO Only Look Once (YOLO) v3 物件偵測模型類型。您可以使用 GluonCV
您的物件偵測模型必須使用 512 x 512 輸入影像進行訓練。來自 GluonCV Model Zoo 的預先訓練模型已符合此需求。
經過訓練的物件偵測模型必須使用 SageMaker Neo 深度學習編譯器。編譯時,請確定目標硬體符合 Greengrass 核心裝置的硬體。如需詳細資訊,請參閱「」 SageMaker Neo中的亞馬遜 SageMaker 開發人員指南。
編譯後的模型必須添加為 ML 資源(Amazon S3 模式來源)設定為與連接器相同的 Greengrass 組。
連接器參數
這些連接器提供下列參數。
MLModelDestinationPath
-
Amazon S3 儲存貯體的絕對路徑,此儲存貯體包含 Neo 相容的 ML 模型。這是指定給 ML 模型資源的目的地路徑。
主頁面的顯示名稱AWS IoT主控台:模型目的地路徑
:必要
true
類型:
string
有效模式:
.+
MLModelResourceId
-
參考來源模型的機器學習資源 ID。
主頁面的顯示名稱AWS IoT主控台:Greengrass Learning 資源
:必要
true
類型:
S3MachineLearningModelResource
有效模式:
^[a-zA-Z0-9:_-]+$
LocalInferenceServiceName
-
本機推論服務的名稱。使用者定義的 Lambda 函數會藉由將名稱傳給
invoke_inference_service
函數AWS IoT GreengrassMachine Learning 軟體開發套件 如需範例,請參閱 使用範例。主頁面的顯示名稱AWS IoT主控台:本機推論服務名稱
:必要
true
類型:
string
有效模式:
^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}$
LocalInferenceServiceTimeoutSeconds
-
推論請求終止之前的時間 (以秒為單位)。最小值為 1。預設值為 10。
主頁面的顯示名稱AWS IoT主控台:超時 (秒)
:必要
true
類型:
string
有效模式:
^[1-9][0-9]*$
LocalInferenceServiceMemoryLimitKB
-
服務可存取的記憶體數量 (KB)。最小值為 1。
主頁面的顯示名稱AWS IoT主控台:Memory limit (記憶體限制)
:必要
true
類型:
string
有效模式:
^[1-9][0-9]*$
GPUAcceleration
-
CPU 或 GPU (加速) 運算環境。此屬性僅適用於 ML 影像分類 Aarch64 JTX2 連接器。
主頁面的顯示名稱AWS IoT主控台:GPU 加速
:必要
true
類型:
string
有效值:
CPU
或GPU
MLFeedbackConnectorConfigId
-
用來上傳模型輸入資料的意見回饋組態 ID。這必須符合針對 ML 意見回饋連接器定義的意見回饋組態 ID。
這一個參數僅在您想要使用 ML 意見回饋連接器上傳模型輸入資料,並將預測發佈至 MQTT 主題時,才需要此項目。
主頁面的顯示名稱AWS IoT主控台:ML 意見回饋連接器配置 ID
:必要
false
類型:
string
有效模式:
^$|^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}$
建立範例連接器 (AWS CLI)
下列 CLI 命令會建立ConnectorDefinition
的最初版本,其中包含 ML 物件偵測連接器。此範例會建立 ML 物件偵測 ARMv7l 連接器的執行個體。
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{ "Connectors": [ { "Id": "MyObjectDetectionConnector", "ConnectorArn": "arn:aws:greengrass:
region
::/connectors/ObjectDetectionARMv7/versions/1", "Parameters": { "MLModelDestinationPath": "/path-to-model", "MLModelResourceId": "my-ml-resource", "LocalInferenceServiceName": "objectDetection", "LocalInferenceServiceTimeoutSeconds": "10", "LocalInferenceServiceMemoryLimitKB": "500000", "MLFeedbackConnectorConfigId" : "object-detector-random-sampling" } } ] }'
注意
這些連接器中的 Lambda 函數具有長期生命週期。
在 中AWS IoT Greengrass控制台中,您可以從組的連接器(憑證已建立!) 頁面上的名稱有些許差異。如需詳細資訊,請參閱 Greengrass 連接器入門 (主控台)。
輸入資料
這些連接器接受影像檔做為輸入。輸入影像檔必須採用 jpeg
或 png
格式。如需詳細資訊,請參閱 使用範例。
這些連接器不接受 MQTT 消息作為輸入數據。
輸出資料
這些連接器會傳回格式化的清單,列出輸入影像中所識別物件的預測結果:
{ "prediction": [ [ 14, 0.9384938478469849, 0.37763649225234985, 0.5110225081443787, 0.6697432398796082, 0.8544386029243469 ], [ 14, 0.8859519958496094, 0, 0.43536216020584106, 0.3314110040664673, 0.9538808465003967 ], [ 12, 0.04128098487854004, 0.5976729989051819, 0.5747185945510864, 0.704264223575592, 0.857937216758728 ], ... ] }
清單中的每個預測都包含在方括號中,並包含六個值:
-
第一個值代表所識別物件的預測物件類別。在 Neo 深度學習編譯器中訓練您的物件偵測機器學習模型時,即會決定物件類別及其對應值。
-
第二個值是物件類別預測的可信度分數。這代表預測正確的機率。
-
最後四個值對應至像素維度,代表影像中所預測物件的週框方塊。
這些連接器不會將 MQTT 消息發佈為輸出數據。
使用範例
下列範例 Lambda 函數使用AWS IoT GreengrassMachine Learning SDK與 ML 對象檢測連接器進行交互。
注意
範例初始化軟體開發套件用戶端,並同步呼叫軟體開發套件的 invoke_inference_service
函數,以叫用本機推論服務。它會傳入演算法類型、服務名稱、映像類型和映像內容。然後,範例會剖析服務回應以獲得機率結果 (預測)。
import logging from threading import Timer import numpy as np import greengrass_machine_learning_sdk as ml # We assume the inference input image is provided as a local file # to this inference client Lambda function. with open('/test_img/test.jpg', 'rb') as f: content = bytearray(f.read()) client = ml.client('inference') def infer(): logging.info('invoking Greengrass ML Inference service') try: resp = client.invoke_inference_service( AlgoType='object-detection', ServiceName='objectDetection', ContentType='image/jpeg', Body=content ) except ml.GreengrassInferenceException as e: logging.info('inference exception {}("{}")'.format(e.__class__.__name__, e)) return except ml.GreengrassDependencyException as e: logging.info('dependency exception {}("{}")'.format(e.__class__.__name__, e)) return logging.info('resp: {}'.format(resp)) predictions = resp['Body'].read().decode("utf-8") logging.info('predictions: {}'.format(predictions)) predictions = eval(predictions) # Perform business logic that relies on the predictions. # Schedule the infer() function to run again in ten second. Timer(10, infer).start() return infer() def function_handler(event, context): return
所以此invoke_inference_service
函數AWS IoT GreengrassMachine Learning SDK 接受下列引數。
引數 |
描述 |
---|---|
|
用於推論之演算法類型的名稱。目前僅支援 :必要 類型: 有效值: |
|
本機推論服務的名稱。使用您設定連接器時為 :必要 類型: |
|
輸入映像的 mime 類型。 :必要 類型: 有效值: |
|
輸入映像檔的內容。 :必要 類型: |
在 AWS IoT Greengrass 核心上安裝 Neo 深度學習執行時間相依性
ML 物件偵測連接器會與 SageMaker Neo 深度學習執行時間 (DLR)。連接器使用執行時間來提供 ML 模型。若要使用這些連接器,您必須在核心裝置上安裝 DLR 的相依性。
在安裝 DLR 相依性之前,請確保所需的系統程式庫 (使用指定的最低版本) 存在於裝置上。
記錄和疑難排解
根據您的組設定,事件和錯誤日誌會寫入 CloudWatch 日誌、本機檔案系統或兩者。來自這個連接器的日誌使用字首 LocalInferenceServiceName
。如果連接器發生非預期的行為,請檢查連接器的日誌。日誌通常會包含有用的偵錯資訊,例如遺失機器學習程式庫相依性或連接器啟動失敗的原因。
如果AWS IoT Greengrass組設定為寫入本機日誌,則連接器會將日誌檔案寫入
。如需 Greengrass 日誌記錄的詳細資訊,請參使用 AWS IoT Greengrass 日誌進行監控。greengrass-root
/ggc/var/log/user/region
/aws/
使用下列資訊來協助您診斷 ML 物件偵測連接器的故障問題。
必要系統程式庫
下列標籤列出每個 ML 物件偵測連接器所需的系統程式庫。
問題
徵狀 | 解決方案 |
---|---|
在 Raspberry Pi 上,下列錯誤訊息已記錄,並且您不是使用相機: |
執行下列命令以停用驅動程式:
此為是暫時性的操作。符號連結會在您重新啟動後消失。請參閱您作業系統版本的手冊,了解如何在重新啟動時自動建立連結。 |
授權
ML 物件偵測連接器包含下列第三方軟體/授權:
-
AWS SDK for Python (Boto3)
/Apache License 2.0 -
botocore
/Apache License 2.0 -
dateutil
/PSF License -
docutils
/BSD 授權、GNU 一般公有授權 (GPL)、Python 軟體基金會授權、公有網域 -
jmespath
/MIT License -
s3transfer
/Apache License 2.0 -
urllib3
/MIT License
此連接器在Greengrass Core 軟體授權合約
另請參閱
-
物件偵測演算法中的亞馬遜 SageMaker 開發人員指南