教學課程:使 TensorFlow 用 Lite 執行範例影像分類推論 - AWS IoT Greengrass

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

教學課程:使 TensorFlow 用 Lite 執行範例影像分類推論

本教學課程說明如何使用 TensorFlow Lite 影像分類推論元件,在 Greengrass 核心裝置上執行範例影像分類推論。此元件包括下列元件相依性:

  • TensorFlow 精簡版圖像分類模型存儲組件

  • TensorFlow 精簡版運行組件

部署此元件時,它會下載預先訓練的 MobileNet v1 模型,並安裝 TensorFlow Lite 執行階段及其相依性。此元件會發佈有關該ml/tflite/image-classification主題的推論結果。若要檢視這些推論結果,請使用主控台中的 AWS IoT MQTT 用戶端來訂閱此AWS IoT主題。

在本教學課程中,您將部署範例推論元件,以對提供的範例映像執行映像分類。AWS IoT Greengrass完成此教學課程之後,您可以完成教學課程:使 TensorFlow 用 Lite 對相機中的影像執行範例影像分類推論,其中會示範如何修改範例推論元件,以便在 Greengrass 核心裝置上本機相機的影像上執行影像分類。

如需 Greengrass 裝置上機器學習的詳細資訊,請參閱。執行機器學習推論

必要條件

為了完成本教學,您需要以下項目:

  • 一個 Linux Greengrass 核心設備。如果您沒有帳戶,請參閱 教學課程:AWS IoT Greengrass V2 入門。核心裝置必須符合下列要求:

    • 在運行 Amazon Linux 2 或 Ubuntu 18.04 的 Greengrass 核心設備上,GNU C 庫(glibc)2.27 版或更高版本安裝在設備上。

    • 在 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
    • 樹莓派運行樹莓派 OS 靶心設備必須滿足以下要求:

      • NumPy 1.22.4 或更新版本已安裝在裝置上。樹莓派 OS 靶心包括早期版本的 NumPy,因此您可以運行以下命令在設備 NumPy 上升級。

        pip3 install --upgrade numpy
      • 裝置上啟用的舊式攝影機堆疊。樹莓派 OS Bullseye 包括一個新的相機堆疊,預設情況下啟用且不相容,因此您必須啟用傳統的相機堆疊。

        啟用舊式相機堆疊的步驟
        1. 運行以下命令以打開樹莓派配置工具。

          sudo raspi-config
        2. 選取介面選項

        3. 選取「舊式相機」以啟用舊式相機堆疊。

        4. 重新啟動 Raspberry Pi。

步驟 1:訂閱預設通知主題

在此步驟中,您可以在AWS IoT主控台中設定 AWS IoT MQTT 用戶端,以觀看由 TensorFlow Lite 映像分類元件發佈的 MQTT 訊息。依預設,元件會針對ml/tflite/image-classification主題發佈推論結果。在將元件部署到 Greengrass 核心裝置之前,請先訂閱本主題,以便在元件第一次執行時查看推論結果。

訂閱預設通知主題
  1. AWS IoT主控台導覽功能表中,選擇 [測試]、[MQTT 測試用戶端]。

  2. 在 [訂閱主題] 下的 [主題名稱] 方塊中,輸入ml/tflite/image-classification

  3. 選擇 Subscribe (訂閱)

步驟 2:部署 TensorFlow 精簡版影像分類元件

在此步驟中,您將 TensorFlow Lite 映像分類元件部署到核心裝置:

  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 核心裝置的元件記錄檔和主控台的 AWS IoT MQTT 用戶端中檢視推論結果。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 Core 軟體記錄檔。此檔案包含來自 Greengrass 核心裝置部署服務的記錄檔。

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

如需詳細資訊,請參閱 機器學習推論疑難排解

後續步驟

如果您的 Greengrass 核心裝置具有支援的攝影機介面,您可以完成此操作教學課程:使 TensorFlow 用 Lite 對相機中的影像執行範例影像分類推論,其中顯示如何修改範例推論元件,以便對來自攝影機的影像執行影像分類。

若要進一步探索範例 TensorFlow Lite 影像分類推論元件的組態,請嘗試下列動作:

  • 修改組InferenceInterval態參數以變更推論程式碼執行的頻率。

  • 修改推論元件ImageDirectory組態中的ImageName和組態參數,以指定用於推論的自訂影像。

如需自訂公用元件組態或建立自訂機器學習元件的相關資訊,請參閱自訂您的機器學習元件