基于機器學(xué)習的高效嵌入式計算機視覺(jué)
作者:Arm 物聯(lián)網(wǎng)事業(yè)部主任軟件工程師兼技術(shù)推廣工程師
本文引用地址:http://dyxdggzs.com/article/202409/462644.htmSandeep Mistry
TinyML 是機器學(xué)習 (ML) 的一個(gè)分支,專(zhuān)注于將 ML 模型部署到低功耗、資源受限的物聯(lián)網(wǎng) (IoT) 設備上。在物聯(lián)網(wǎng)設備上部署 ML 模型有諸多好處,包括減少延遲和保護隱私性,因為所有數據都是在端側處理。TinyML 在 2019 年引起了人們的關(guān)注,當時(shí),Google 的 TensorFlow 團隊發(fā)布了適用于微控制器的 TensorFlow Lite (TFLM) 庫 [1] 。
最初的用例和 TFLM 示例側重于在基于 Arm Cortex-M4 [2] 的開(kāi)發(fā)板(例如 Arduino Nano 33 BLE Sense [3] 和 SparkFun Edge [4] )上運行量化的 8 位關(guān)鍵詞檢測 [5] 和人員檢測 [6] 模型。這些示例利用 Cortex-M4 CPU 的 SMLAD [7] 指令對模型所需的乘加 (MAC) 運算執行端側 ML 推理。
上表總結了 Arduino Nano 33 BLE Sense 上兩種模型的 MAC 數量、RAM 和閃存要求以及推理延遲。
配備 Arm Ethos-U55 NPU 的現代微控制器能夠運行最初為移動(dòng)端應用開(kāi)發(fā)的復雜模型。Ethos-U55 NPU 支持 44 個(gè) TensorFlow Lite 算子 [8] 的位精確輸出,并且可配置為每個(gè)周期執行 32、64、128 或 256 次 MAC 運算。本文將通過(guò)在配備 Ethos-U55 NPU 的現代微控制器上運行兩個(gè) TinyML 應用來(lái)展示 NPU 的性能優(yōu)勢。我們將分別在采用和不采用 Ethos-U55 NPU 的微控制器上運行應用中所使用的 ML 模型,以此對推理延遲進(jìn)行基準測試。
現代物聯(lián)網(wǎng)開(kāi)發(fā)板
TinyML 應用被部署到 Seeed Studio 的 Grove Vision AI Module V2 [9] 開(kāi)發(fā)板上,該開(kāi)發(fā)板基于 Himax WiseEye2 HX6538 微控制器并集成了 16 MB 的外部閃存。Himax WiseEye2 HX6538 [10] 微控制器搭載了 Cortex-M55 CPU 和 Ethos-U55 NPU,運行頻率均為 400 MHz,且帶有 512 KB 緊耦合存儲器 (TCM) 和 2 MB SRAM。
圖:Seeed Studio Grove Vision AI Module V2 開(kāi)發(fā)板
該開(kāi)發(fā)板上有一個(gè) 15 引腳相機串行接口 (CSI),連接至 Himax WiseEye2 HX6538 MCU,可與基于 OmniVision OV5647 的相機模塊一起使用。開(kāi)發(fā)板上運行的應用可以從相機模塊 [11] 實(shí)時(shí)采集分辨率為 160x120、320x240 或 640x480 像素的 RGB 圖像。
將 2.8 寸的 TFT 彩色液晶屏和 3.7 伏的鋰聚合物 (LiPo) 電池連接到開(kāi)發(fā)板上,便能打造出一款便攜式的電池供電設備。
TinyML 應用
部署到開(kāi)發(fā)板上的兩個(gè)基于計算機視覺(jué)的應用將會(huì )持續:

從相機模塊采集圖像。

完成使用 ML 模型時(shí)所需的預處理和后處理并執行 ML 推理。

在開(kāi)發(fā)板所連接的 TFT 屏幕上顯示所采集的圖像和 ML 推理結果。
第一個(gè)應用將使用兩個(gè) ML 模型來(lái)檢測臉上的關(guān)鍵特征點(diǎn),第二個(gè)應用則使用 ML 模型來(lái)檢測人體姿態(tài)中的關(guān)鍵特征點(diǎn)。
這兩個(gè)應用都將用到 TFLM 庫和 Ethos-U 自定義算子 [12] ,以便將 ML 運算卸載到 NPU 中。應用中所用的量化 8 位 TensorFlow Lite 模型必須使用 Arm 的 vela [13] 編譯器進(jìn)行編譯。vela 編譯器將 NPU 支持的運算轉換為 Ethos-U 自定義算子,使其可分派到 NPU 進(jìn)行高效執行。任何不受 NPU 支持的運算都將保持原樣并退回到 CPU 上運行。
左為 8 位量化 TensorFlow Lite 模型圖,右為經(jīng) vela 編譯的 8 位量化 TensorFlow Lite 模型圖 (點(diǎn)擊圖片,查看全圖)
在上例中,除了 pad 運算之外的所有 TensorFlow 算子都被 vela 編譯器轉換為在 Ethos-U55 NPU 上運行的 Ethos-U 自定義算子。未轉換的 pad 算子將回調到 CPU 上運行。
Face Mesh 應用
該應用從相機模塊采集 320x240 圖像,然后估算人臉上的 468 個(gè)關(guān)鍵特征點(diǎn)。對于那些需要識別熟悉面孔、監測注意力、識別情緒或執行醫療診斷的用例來(lái)說(shuō),該應用可以用作特征提取層。其采用了兩個(gè) ML 模型,首先是使用 Google MediaPipe BlazeFace(短程)模型 [14] 來(lái)識別圖像中面部的位置。檢測到人臉后,繼而使用 Google MediaPipe Face Mesh 模型 [15] 來(lái)識別圖像中最大的那個(gè)人臉的 468 個(gè)關(guān)鍵特征點(diǎn)。
MediaPipe BlazeFace(短程)模型
MediaPipe BlazeFace(短程)模型需要將一張 RGB 128x128 圖像作為輸入,且每次推理要執行 3,100 萬(wàn)次 MAC 運算。利用 Katsuya Hyodo 的 PINTO_model_zoo GitHub 資源庫 [16] ,可得到 TensorFlow Lite 格式的 BlazeFace(短程)模型的 8 位量化版本。
上表總結了對 RAM 和閃存的要求,并將單獨使用 Cortex-M55 CPU 與同時(shí)使用 Cortex-M55 CPU 和 Ethos-U55 NPU 所對應的推理延遲進(jìn)行了比較,結果顯示 Ethos-U55 NPU 將推理速度提高了 109 倍!
MediaPipe Face Mesh 模型
MediaPipe Face Mesh 模型需要將一張 RGB 192x192 的臉部裁剪圖像(填充率為 25%)作為輸入,且每次推理要執行 3,680 萬(wàn)次 MAC 運算。從 GitHub [17] 下載該模型的 16 位浮點(diǎn)版本,并使用 tflite2tensorflow [18] 工具將其轉換為 8 位量化模型。
上表總結了對 RAM 和閃存的要求,并將單獨使用 Cortex-M55 CPU 與同時(shí)使用 Cortex-M55 CPU 和 Ethos-U55 NPU 所對應的推理延遲進(jìn)行了比較,結果顯示 Ethos-U55 NPU 將推理速度提高了 103 倍。
Ethos-U55 的優(yōu)勢
將 ML 計算卸載到 Ethos-U55,可使該應用每秒執行 10 次以上的推理。如果將其部署到 Cortex-M55 CPU,在臉部可見(jiàn)的情況下,該應用只能每八秒執行一次推理。
姿態(tài)估計應用
該應用從相機模塊采集 320x240 圖像,然后為圖像中檢測到的每個(gè)人估計人體姿態(tài)的 17 個(gè)關(guān)鍵特征點(diǎn)。該應用可以用作那些需要檢測跌倒或運動(dòng)的應用的特征提取層,或作為人機界面的輸入。
該模型使用 Ultralytic YOLOv8 GitHub 資源庫的 DeGirum 分支 [19] ,通過(guò)一張 256x256 的 RGB 圖像輸入,導出為一個(gè) 8 位量化 TensorFlow Lite 模型。對 DeGirum 進(jìn)行修改可以讓導出的模型更好地針對微控制器進(jìn)行優(yōu)化,這是通過(guò)刪除轉置運算并分離模型的七個(gè)輸出來(lái)實(shí)現的,旨在提高量化的準確性。該模型每次推理需要進(jìn)行 7.28 億次 MAC 運算。
上表總結了對 RAM 和閃存的要求,并將單獨使用 Cortex-M55 CPU 與同時(shí)使用 Cortex-M55 CPU 和 Ethos-U55 NPU 所對應的推理延遲進(jìn)行了比較,結果顯示 Ethos-U55 NPU 將推理速度提高了 611 倍!將 ML 計算卸載到 Ethos-U55,可使該應用每秒執行 10 次以上的推理。如果將其部署到 Cortex-M55 CPU,該應用只能每 62 秒執行一次推理。推理延遲的縮短使得應用能夠更快地對人們的動(dòng)作做出反應。
結論
本文演示了為移動(dòng)端應用開(kāi)發(fā)的 ML 模型,它們每次推理需要進(jìn)行千萬(wàn)到數億次 MAC 運算,可部署到配備 Ethos-U55 NPU 的現代微控制器上。與 TFLM 庫中所含的示例應用相比,這些 ML 模型對 MAC 運算、RAM 和閃存的要求更高。使用 NPU 可以讓?xiě)迷谝幻雰葓绦卸啻瓮评?,而如果沒(méi)有 NPU,則每隔幾秒或一分鐘內只能執行一次推理。因此,使用 NPU 對于應用來(lái)說(shuō)非常有利,使其能夠運行一個(gè)或多個(gè)相比初始 tinyML 應用中所使用的模型更為復雜的 ML 模型,而且能夠對周?chē)h(huán)境做出更快的反應。
評論