跳至主要内容

在邊緣設備上運行水果檢測器

本課程概述的手繪圖

手繪圖由 Nitya Narasimhan 提供。點擊圖片查看大圖。

這段視頻概述了在物聯網設備上運行圖像分類器的內容,這也是本課程的主題。

Azure IoT Edge 上的自定義視覺 AI

課前測驗

課前測驗

介紹

在上一課中,你使用圖像分類器來分類成熟和未成熟的水果,將物聯網設備上的相機捕獲的圖像通過互聯網發送到雲服務。這些調用需要時間,花費金錢,並且根據你使用的圖像數據類型,可能會有隱私問題。

在本課中,你將學習如何在邊緣設備上運行機器學習(ML)模型——在運行於你自己網絡上的物聯網設備上,而不是在雲端。你將了解邊緣計算與雲計算的優缺點,如何將你的 AI 模型部署到邊緣設備,以及如何從你的物聯網設備訪問它。

在本課中我們將涵蓋:

邊緣計算

邊緣計算涉及將處理物聯網數據的計算機儘可能靠近數據生成的位置。與其在雲端進行處理,不如將其移動到雲的邊緣——你的內部網絡。

顯示雲端互聯網服務和本地網絡上的物聯網設備的架構圖

到目前為止的課程中,你的設備一直在收集數據並將數據發送到雲端進行分析,運行無服務器功能或 AI 模型。

顯示本地網絡上的物聯網設備連接到邊緣設備,這些邊緣設備再連接到雲端的架構圖

邊緣計算涉及將一些雲服務從雲端移動到與物聯網設備在同一網絡上運行的計算機上,僅在需要時與雲端通信。例如,你可以在邊緣設備上運行 AI 模型來分析水果的成熟度,並僅將分析結果(如成熟水果與未成熟水果的數量)發送回雲端。

✅ 思考一下你迄今為止構建的物聯網應用程序。哪些部分可以移動到邊緣?

優點

邊緣計算的優點包括:

  1. 速度 - 邊緣計算非常適合時間敏感的數據,因為操作在與設備相同的網絡上完成,而不是通過互聯網進行調用。這使得速度更快,因為內部網絡的運行速度可以比互聯網連接快得多,數據傳輸的距離也更短。

    💁 儘管光纖電纜被用於互聯網連接,使數據可以以光速傳輸,但數據在全球範圍內傳輸到雲提供商仍需要時間。例如,如果你從歐洲向美國的雲服務發送數據,數據穿越大西洋的光纖電纜至少需要 28 毫秒,這還不包括將數據傳輸到跨大西洋電纜、將電信號轉換為光信號並在另一端再轉換回來,然後從光纖電纜傳輸到雲提供商所需的時間。

    邊緣計算還需要更少的網絡流量,減少了由於互聯網連接的有限帶寬而導致數據減速的風險。

  2. 遠程可訪問性 - 當你有有限或沒有連接,或者連接成本太高而無法持續使用時,邊緣計算仍然有效。例如,在基礎設施有限的人道主義災區工作,或在發展中國家。

  3. 降低成本 - 在邊緣設備上進行數據收集、存儲、分析和觸發操作可以減少雲服務的使用,從而降低物聯網應用程序的總成本。最近出現了許多專為邊緣計算設計的設備,例如 NVIDIA 的 Jetson Nano AI 加速板,可以在成本低於 100 美元的設備上使用 GPU 硬件運行 AI 工作負載。

  4. 隱私和安全 - 使用邊緣計算,數據保留在你的網絡上,不會上傳到雲端。這對於敏感和個人可識別信息尤其重要,因為數據在分析後不需要存儲,這大大降低了數據洩露的風險。例如醫療數據和安全攝像機錄像。

  5. 處理不安全的設備 - 如果你有已知安全漏洞的設備,不希望它們直接連接到你的網絡或互聯網,你可以將它們連接到一個單獨的網絡,並通過一個網關 IoT Edge 設備進行管理。這個邊緣設備還可以連接到你的更廣泛的網絡或互聯網,並管理數據流的來回。

  6. 支持不兼容的設備 - 如果你有無法連接到 IoT Hub 的設備,例如只能使用 HTTP 連接的設備或只能通過藍牙連接的設備,你可以使用 IoT 邊緣設備作為網關設備,將消息轉發到 IoT Hub。

✅ 做一些研究:邊緣計算還有哪些其他優點?

缺點

邊緣計算也有缺點,雲端可能是更好的選擇:

  1. 規模和靈活性 - 雲計算可以通過增加或減少服務器和其他資源來實時調整網絡和數據需求。增加更多的邊緣計算機需要手動添加更多設備。

  2. 可靠性和彈性 - 雲計算提供多個服務器,通常位於多個位置,以實現冗餘和災難恢復。要在邊緣實現相同級別的冗餘需要大量投資和配置工作。

  3. 維護 - 雲服務提供商提供系統維護和更新。

✅ 做一些研究:邊緣計算還有哪些其他缺點?

這些缺點實際上是使用雲端的優點的反面——你需要自己構建和管理這些設備,而不是依賴雲提供商的專業知識和規模。

一些風險由邊緣計算的本質所減輕。例如,如果你有一個在工廠中運行的邊緣設備,從機器收集數據,你不需要考慮一些災難恢復場景。如果工廠停電,你不需要備份邊緣設備,因為生成數據的機器也會停電。

對於物聯網系統,你通常會希望混合使用雲端和邊緣計算,根據系統、客戶和維護者的需求來利用每個服務。

Azure IoT Edge

Azure IoT Edge 標誌

Azure IoT Edge 是一項服務,可以幫助你將工作負載從雲端移動到邊緣。你可以將一個設備設置為邊緣設備,並從雲端將代碼部署到該邊緣設備。這使你可以混合使用雲端和邊緣的功能。

🎓 工作負載 是指執行某種工作的任何服務,例如 AI 模型、應用程序或無服務器功能。

例如,你可以在雲端訓練一個圖像分類器,然後從雲端將其部署到邊緣設備。你的物聯網設備然後將圖像發送到邊緣設備進行分類,而不是通過互聯網發送圖像。如果你需要部署模型的新版本,你可以在雲端訓練它,並使用 IoT Edge 將新版本的模型更新到邊緣設備。

🎓 部署到 IoT Edge 的軟件稱為 模塊。默認情況下,IoT Edge 運行與 IoT Hub 通信的模塊,例如 edgeAgentedgeHub 模塊。當你部署圖像分類器時,這將作為一個附加模塊進行部署。

IoT Edge 集成在 IoT Hub 中,因此你可以使用相同的服務來管理邊緣設備,並具有相同的安全級別。

IoT Edge 從 容器 中運行代碼——這些是與計算機上的其他應用程序隔離運行的自包含應用程序。當你運行一個容器時,它就像在你的計算機內運行的一台獨立計算機,運行自己的軟件、服務和應用程序。大多數情況下,容器無法訪問你的計算機上的任何內容,除非你選擇與容器共享某些內容,例如文件夾。然後,容器通過一個開放端口暴露服務,你可以連接到該端口或將其暴露到你的網絡。

一個網頁請求被重定向到一個容器

例如,你可以有一個在端口 80 上運行的網站容器,這是默認的 HTTP 端口,你可以將其從你的計算機上暴露在同樣的端口 80 上。

✅ 做一些研究:閱讀有關容器和 Docker 或 Moby 等服務的資料。

你可以使用 Custom Vision 下載圖像分類器並將其部署為容器,無論是直接運行在設備上還是通過 IoT Edge 部署。一旦它們在容器中運行,你可以使用與雲版本相同的 REST API 訪問它們,但端點指向運行容器的邊緣設備。

註冊一個 IoT Edge 設備

要使用 IoT Edge 設備,首先需要在 IoT Hub 中註冊它。

任務 - 註冊一個 IoT Edge 設備

  1. fruit-quality-detector 資源組中創建一個 IoT Hub。給它一個基於 fruit-quality-detector 的唯一名稱。

  2. 在你的 IoT Hub 中註冊一個名為 fruit-quality-detector-edge 的 IoT Edge 設備。命令與註冊非邊緣設備的命令類似,只是需要傳遞 --edge-enabled 標誌。

    az iot hub device-identity create --edge-enabled \
    --device-id fruit-quality-detector-edge \
    --hub-name <hub_name>

    <hub_name> 替換為你的 IoT Hub 的名稱。

  3. 使用以下命令獲取設備的連接字符串:

    az iot hub device-identity connection-string show --device-id fruit-quality-detector-edge \
    --output table \
    --hub-name <hub_name>

    <hub_name> 替換為你的 IoT Hub 的名稱。

    複製輸出中顯示的連接字符串。

設置一個 IoT Edge 設備

一旦你在 IoT Hub 中創建了邊緣設備註冊,你就可以設置邊緣設備。

任務 - 安裝並啟動 IoT Edge 運行時

IoT Edge 運行時僅運行 Linux 容器。 它可以在 Linux 上運行,也可以在 Windows 上使用 Linux 虛擬機運行。

導出你的模型

要在邊緣運行分類器,需要從 Custom Vision 導出它。Custom Vision 可以生成兩種類型的模型——標準模型和緊湊模型。緊湊模型使用各種技術來減小模型的大小,使其足夠小以便下載並部署在物聯網設備上。

當你創建圖像分類器時,你使用的是 Food 域,這是一個針對食物圖像訓練優化的模型版本。在 Custom Vision 中,你可以更改項目的域,使用你的訓練數據來訓練一個使用新域的新模型。Custom Vision 支持的所有域都可以作為標準和緊湊模型使用。

任務 - 使用 Food(緊湊)域訓練你的模型

  1. 打開 CustomVision.ai 並登錄,如果你還沒有打開它。然後打開你的 fruit-quality-detector 項目。

  2. 選擇 設置 按鈕(⚙ 圖標)

  3. 列表中,選擇 Food(緊湊)

  4. 導出功能 下,確保選擇 基本平台(Tensorflow、CoreML、ONNX 等)

  5. 在設置頁面的底部,選擇 保存更改

  6. 使用 訓練 按鈕重新訓練模型,選擇 快速訓練

任務 - 導出你的模型

一旦模型訓練完成,需要將其導出為容器。

  1. 選擇 性能 標籤,找到使用緊湊域訓練的最新迭代。

  2. 選擇頂部的 導出 按鈕。

  3. 選擇 DockerFile,然後選擇與你的邊緣設備匹配的版本:

    • 如果你在 Linux 計算機、Windows 計算機或虛擬機上運行 IoT Edge,選擇 Linux 版本。

    • 如果你在 Raspberry Pi 上運行 IoT Edge,選擇 ARM(Raspberry Pi 3) 版本。

    🎓 Docker 是管理容器的最流行工具之一,而 DockerFile 是一組設置容器的指令。

  4. 選擇 導出 讓 Custom Vision 創建相關文件,然後選擇 下載 以下載它們的壓縮文件。

  5. 將文件保存到你的計算機,然後解壓縮文件夾。

準備你的容器以進行部署

容器被構建然後推送到容器註冊表,然後從容器註冊表部署到邊緣設備

一旦你下載了模型,需要將其構建為容器,然後推送到容器註冊表——一個在線存儲容器的位置。IoT Edge 然後可以從註冊表下載容器並將其推送到你的設備。

Azure 容器註冊表標誌

本課程中你將使用的容器註冊表是 Azure 容器註冊表。這不是一項免費服務,因此為了節省費用,請確保在完成後 清理你的項目

💁 你可以在 Azure 容器註冊表定價頁面 查看使用 Azure 容器註冊表的費用。

任務 - 安裝 Docker

要構建和部署分類器,你可能需要安裝 Docker

只有當你計劃在與安裝 IoT Edge 的設備不同的設備上構建容器時,才需要這樣做——作為安裝 IoT Edge 的一部分,Docker 已經為你安裝好了。

  1. 如果你在與 IoT Edge 設備不同的設備上構建 Docker 容器,請按照 Docker 安裝頁面 上的 Docker 安裝說明安裝 Docker Desktop 或 Docker 引擎。安裝後確保其運行。

任務 - 創建容器註冊表資源

  1. 從你的終端或命令提示符運行以下命令以創建 Azure 容器註冊表資源:

    az acr create --resource-group fruit-quality-detector \
    --sku Basic \
    --name <Container registry name>

    <Container registry name> 替換為一個唯一的容器註冊表名稱,只使用字母和數字。基於 fruitqualitydetector 命名。這個名稱將成為訪問容器註冊表的 URL 的一部分,因此需要全局唯一。

  2. 使用以下命令登錄 Azure 容器註冊表:

    az acr login --name <Container registry name>

    <Container registry name> 替換為你使用的容器註冊表名稱。

  3. 使用以下命令將容器註冊表設置為管理模式,以便你可以生成密碼:

    az acr update --admin-enabled true \
    --name <Container registry name>

    <Container registry name> 替換為你使用的容器註冊表名稱。

  4. 使用以下命令生成容器註冊表的密碼:

     az acr credential renew --password-name password \
    --output table \
    --name <Container registry name>

    <Container registry name> 替換為你使用的容器註冊表名稱。

    複製 PASSWORD 的值,稍後你將需要它。

任務 - 構建你的容器

你從 Custom Vision 下載的是一個 DockerFile,包含有關如何構建容器的指令,以及在容器內運行的應用程序代碼,用於託管你的自定義視覺模型,並提供一個 REST API 來調用它。你可以使用 Docker 從 DockerFile 構建一個標記的容器,然後將其推送到你的容器註冊表。

🎓 容器被賦予一個標籤,定義其名稱和版本。當你需要更新容器時,可以使用相同的標籤但更新的版本來構建它。

  1. 打開你的終端或命令提示符,導航到你從 Custom Vision 下載的解壓縮模型。

  2. 運行以下命令來構建和標記映像:

    docker build --platform <platform> -t <Container registry name>.azurecr.io/classifier:v1 .

    <platform> 替換為此容器將運行的平台。如果你在 Raspberry Pi 上運行 IoT Edge,將其設置為 linux/armhf,否則設置為 linux/amd64

    💁 如果你從運行 IoT Edge 的設備運行此命令,例如從你的 Raspberry Pi 運行此命令,可以省略 --platform <platform> 部分,因為它默認為當前平台。

    <Container registry name> 替換為你使用的容器註冊表名稱。

    💁 如果你在 Linux 或 Raspberry Pi OS 上運行,可能需要使用 sudo 來運行此命令。

    Docker 將構建映像,配置所有需要的軟件。然後,映像將標記為 classifier:v1

    ➜  d4ccc45da0bb478bad287128e1274c3c.DockerFile.Linux docker build --platform linux/amd64 -t  fruitqualitydetectorjimb.azurecr.io/classifier:v1 .
    [+] Building 102.4s (11/11) FINISHED
    => [internal] load build definition from Dockerfile
    => => transferring dockerfile: 131B
    => [internal] load .dockerignore
    => => transferring context: 2B
    => [internal] load metadata for docker.io/library/python:3.7-slim
    => [internal] load build context
    => => transferring context: 905B
    => [1/6] FROM docker.io/library/python:3.7-slim@sha256:b21b91c9618e951a8cbca5b696424fa5e820800a88b7e7afd66bba0441a764d6
    => => resolve docker.io/library/python:3.7-slim@sha256:b21b91c9618e951a8cbca5b696424fa5e820800a88b7e7afd66bba0441a764d6
    => => sha256:b4d181a07f8025e00e0cb28f1cc14613da2ce26450b80c54aea537fa93cf3bda 27.15MB / 27.15MB
    => => sha256:de8ecf497b753094723ccf9cea8a46076e7cb845f333df99a6f4f397c93c6ea9 2.77MB / 2.77MB
    => => sha256:707b80804672b7c5d8f21e37c8396f319151e1298d976186b4f3b76ead9f10c8 10.06MB / 10.06MB
    => => sha256:b21b91c9618e951a8cbca5b696424fa5e820800a88b7e7afd66bba0441a764d6 1.86kB / 1.86kB
    => => sha256:44073386687709c437586676b572ff45128ff1f1570153c2f727140d4a9accad 1.37kB / 1.37kB
    => => sha256:3d94f0f2ca798607808b771a7766f47ae62a26f820e871dd488baeccc69838d1 8.31kB / 8.31kB
    => => sha256:283715715396fd56d0e90355125fd4ec57b4f0773f306fcd5fa353b998beeb41 233B / 233B
    => => sha256:8353afd48f6b84c3603ea49d204bdcf2a1daada15f5d6cad9cc916e186610a9f 2.64MB / 2.64MB
    => => extracting sha256:b4d181a07f8025e00e0cb28f1cc14613da2ce26450b80c54aea537fa93cf3bda
    => => extracting sha256:de8ecf497b753094723ccf9cea8a46076e7cb845f333df99a6f4f397c93c6ea9
    => => extracting sha256:707b80804672b7c5d8f21e37c8396f319151e1298d976186b4f3b76ead9f10c8
    => => extracting sha256:283715715396fd56d0e90355125fd4ec57b4f0773f306fcd5fa353b998beeb41
    => => extracting sha256:8353afd48f6b84c3603ea49d204bdcf2a1daada15f5d6cad9cc916e186610a9f
    => [2/6] RUN pip install -U pip
    => [3/6] RUN pip install --no-cache-dir numpy~=1.17.5 tensorflow~=2.0.2 flask~=1.1.2 pillow~=7.2.0
    => [4/6] RUN pip install --no-cache-dir mscviplib==2.200731.16
    => [5/6] COPY app /app
    => [6/6] WORKDIR /app
    => exporting to image
    => => exporting layers
    => => writing image sha256:1846b6f134431f78507ba7c079358ed66d944c0e185ab53428276bd822400386
    => => naming to fruitqualitydetectorjimb.azurecr.io/classifier:v1

任務 - 將你的容器推送到容器註冊表

  1. 使用以下命令將你的容器推送到容器註冊表:

    docker push <Container registry name>.azurecr.io/classifier:v1

    <Container registry name> 替換為你使用的容器註冊表名稱。

    💁 如果你在 Linux 上運行,可能需要使用 sudo 來運行此命令。

    容器將被推送到容器註冊表。

    ➜  d4ccc45da0bb478bad287128e1274c3c.DockerFile.Linux docker push fruitqualitydetectorjimb.azurecr.io/classifier:v1
    The push refers to repository [fruitqualitydetectorjimb.azurecr.io/classifier]
    5f70bf18a086: Pushed
    8a1ba9294a22: Pushed
    56cf27184a76: Pushed
    b32154f3f5dd: Pushed
    36103e9a3104: Pushed
    e2abb3cacca0: Pushed
    4213fd357bbe: Pushed
    7ea163ba4dce: Pushed
    537313a13d90: Pushed
    764055ebc9a7: Pushed
    v1: digest: sha256:ea7894652e610de83a5a9e429618e763b8904284253f4fa0c9f65f0df3a5ded8 size: 2423
  2. 要驗證推送,可以使用以下命令列出註冊表中的容器:

    az acr repository list --output table \
    --name <Container registry name>

    <Container registry name> 替換為你使用的容器註冊表名稱。

    ➜  d4ccc45da0bb478bad287128e1274c3c.DockerFile.Linux az acr repository list --name fruitqualitydetectorjimb --output table
    Result
    ----------
    classifier

    你將在輸出中看到你的分類器。

部署你的容器

現在可以將你的容器部署到 IoT Edge 設備。要部署,你需要定義一個部署清單——一個列出將部署到邊緣設備的模塊的 JSON 文檔。

任務 - 創建部署清單

  1. 在你的計算機上創建一個名為 deployment.json 的新文件。

  2. 將以下內容添加到此文件中:

    {
    "content": {
    "modulesContent": {
    "$edgeAgent": {
    "properties.desired": {
    "schemaVersion": "1.1",
    "runtime": {
    "type": "docker",
    "settings": {
    "minDockerVersion": "v1.25",
    "loggingOptions": "",
    "registryCredentials": {
    "ClassifierRegistry": {
    "username": "<Container registry name>",
    "password": "<Container registry password>",
    "address": "<Container registry name>.azurecr.io"
    }
    }
    }
    },
    "systemModules": {
    "edgeAgent": {
    "type": "docker",
    "settings": {
    "image": "mcr.microsoft.com/azureiotedge-agent:1.1",
    "createOptions": "{}"
    }
    },
    "edgeHub": {
    "type": "docker",
    "status": "running",
    "restartPolicy": "always",
    "settings": {
    "image": "mcr.microsoft.com/azureiotedge-hub:1.1",
    "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
    }
    }
    },
    "modules": {
    "ImageClassifier": {
    "version": "1.0",
    "type": "docker",
    "status": "running",
    "restartPolicy": "always",
    "settings": {
    "image": "<Container registry name>.azurecr.io/classifier:v1",
    "createOptions": "{\"ExposedPorts\": {\"80/tcp\": {}},\"HostConfig\": {\"PortBindings\": {\"80/tcp\": [{\"HostPort\": \"80\"}]}}}"
    }
    }
    }
    }
    },
    "$edgeHub": {
    "properties.desired": {
    "schemaVersion": "1.1",
    "routes": {
    "upstream": "FROM /messages/* INTO $upstream"
    },
    "storeAndForwardConfiguration": {
    "timeToLiveSecs": 7200
    }
    }
    }
    }
    }
    }

    💁 你可以在 code-deployment/deployment 文件夾中找到此文件。

    將三個 <Container registry name> 替換為你使用的容器註冊表名稱。一個在 ImageClassifier 模塊部分,另外兩個在 registryCredentials 部分。

    registryCredentials 部分中的 <Container registry password> 替換為你的容器註冊表密碼。

  3. 從包含你的部署清單的文件夾運行以下命令:

    az iot edge set-modules --device-id fruit-quality-detector-edge \
    --content deployment.json \
    --hub-name <hub_name>

    <hub_name> 替換為你的 IoT Hub 的名稱。

    圖像分類器模塊將部署到你的邊緣設備。

任務 - 驗證分類器是否正在運行

  1. 連接到 IoT 邊緣設備:

    • 如果你使用 Raspberry Pi 運行 IoT Edge,請從你的終端使用 ssh 連接,或通過 VS Code 的遠程 SSH 會話連接

    • 如果你在 Windows 上的 Linux 容器中運行 IoT Edge,請按照 成功配置驗證指南 中的步驟連接到 IoT Edge 設備。

    • 如果你在虛擬機上運行 IoT Edge,你可以使用創建 VM 時設置的 adminUsernamepassword 以及 IP 地址或 DNS 名稱通過 SSH 進入機器:

      ssh <adminUsername>@<IP address>

      或:

      ssh <adminUsername>@<DNS Name>

      當提示時輸入你的密碼

  2. 連接後,運行以下命令以獲取 IoT Edge 模塊列表:

    iotedge list

    💁 你可能需要使用 sudo 運行此命令。

    你將看到運行中的模塊:

    jim@fruit-quality-detector-jimb:~$ iotedge list
    NAME STATUS DESCRIPTION CONFIG
    ImageClassifier running Up 42 minutes fruitqualitydetectorjimb.azurecr.io/classifier:v1
    edgeAgent running Up 42 minutes mcr.microsoft.com/azureiotedge-agent:1.1
    edgeHub running Up 42 minutes mcr.microsoft.com/azureiotedge-hub:1.1
  3. 使用以下命令檢查圖像分類器模塊的日誌:

    iotedge logs ImageClassifier

    💁 你可能需要使用 sudo 運行此命令。

    jim@fruit-quality-detector-jimb:~$ iotedge logs ImageClassifier
    2021-07-05 20:30:15.387144: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
    2021-07-05 20:30:15.392185: I tensorflow/core/platform/profile_utils/cpu_utils.cc:94] CPU Frequency: 2394450000 Hz
    2021-07-05 20:30:15.392712: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x55ed9ac83470 executing computations on platform Host. Devices:
    2021-07-05 20:30:15.392806: I tensorflow/compiler/xla/service/service.cc:175] StreamExecutor device (0): Host, Default Version
    Loading model...Success!
    Loading labels...2 found. Success!
    * Serving Flask app "app" (lazy loading)
    * Environment: production
    WARNING: This is a development server. Do not use it in a production deployment.
    Use a production WSGI server instead.
    * Debug mode: off
    * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)

任務 - 測試圖像分類器

  1. 你可以使用 CURL 測試圖像分類器,使用運行 IoT Edge 代理的計算機的 IP 地址或主機名。找到 IP 地址:

  2. 你可以使用本地文件運行以下 curl 命令來測試容器:

    curl --location \
    --request POST 'http://<IP address or name>/image' \
    --header 'Content-Type: image/png' \
    --data-binary '@<file_Name>'

    <IP address or name> 替換為運行 IoT Edge 的計算機的 IP 地址或主機名。將 <file_Name> 替換為要測試的文件名。

    你將在輸出中看到預測結果:

    {
    "created": "2021-07-05T21:44:39.573181",
    "id": "",
    "iteration": "",
    "predictions": [
    {
    "boundingBox": null,
    "probability": 0.9995615482330322,
    "tagId": "",
    "tagName": "ripe"
    },
    {
    "boundingBox": null,
    "probability": 0.0004384400090202689,
    "tagId": "",
    "tagName": "unripe"
    }
    ],
    "project": ""
    }

    💁 這裡不需要提供預測密鑰,因為這不是使用 Azure 資源。相反,將根據內部安全需求在內部網絡上配置安全性,而不是依賴公共端點和 API 密鑰。

使用你的 IoT Edge 設備

現在你的圖像分類器已部署到 IoT Edge 設備,你可以從你的物聯網設備使用它。

任務 - 使用你的 IoT Edge 設備

通過相關指南使用 IoT Edge 分類器進行圖像分類:

模型再訓練

在 IoT Edge 上運行圖像分類器的一個缺點是它們不會連接到你的 Custom Vision 項目。如果你查看 Custom Vision 中的 預測 標籤,你不會看到使用基於邊緣的分類器分類的圖像。

這是預期的行為——圖像不會被發送到雲端進行分類,因此它們不會在雲端可用。使用 IoT Edge 的一個優點是隱私,確保圖像不會離開你的網絡,另一個優點是能夠離線工作,因此不依賴於在設備沒有互聯網連接時上傳圖像。缺點是改進你的模型——你需要實施另一種存儲圖像的方法,這些圖像可以手動重新分類以改進和重新訓練圖像分類器。

✅ 思考一下上傳圖像以重新訓練分類器的方法。


🚀 挑戰

在邊緣設備上運行 AI 模型可能比在雲端更快——網絡跳轉更短。它們也可能更慢,因為運行模型的硬件可能不如雲端強大。

進行一些計時,並比較調用邊緣設備是否比調用雲端更快或更慢?思考解釋差異或缺乏差異的原因。研究使用專用硬件在邊緣上更快運行 AI 模型的方法。

課後測驗

課後測驗

回顧與自學

作業

在邊緣運行其他服務