基于機(jī)器學(xué)習(xí)的高效嵌入式計(jì)算機(jī)視覺
作者:Arm 物聯(lián)網(wǎng)事業(yè)部主任軟件工程師兼技術(shù)推廣工程師
本文引用地址:http://butianyuan.cn/article/202409/462644.htmSandeep Mistry
TinyML 是機(jī)器學(xué)習(xí) (ML) 的一個分支,專注于將 ML 模型部署到低功耗、資源受限的物聯(lián)網(wǎng) (IoT) 設(shè)備上。在物聯(lián)網(wǎng)設(shè)備上部署 ML 模型有諸多好處,包括減少延遲和保護(hù)隱私性,因?yàn)樗袛?shù)據(jù)都是在端側(cè)處理。TinyML 在 2019 年引起了人們的關(guān)注,當(dāng)時,Google 的 TensorFlow 團(tuán)隊(duì)發(fā)布了適用于微控制器的 TensorFlow Lite (TFLM) 庫 [1] 。
最初的用例和 TFLM 示例側(cè)重于在基于 Arm Cortex-M4 [2] 的開發(fā)板(例如 Arduino Nano 33 BLE Sense [3] 和 SparkFun Edge [4] )上運(yùn)行量化的 8 位關(guān)鍵詞檢測 [5] 和人員檢測 [6] 模型。這些示例利用 Cortex-M4 CPU 的 SMLAD [7] 指令對模型所需的乘加 (MAC) 運(yùn)算執(zhí)行端側(cè) ML 推理。
上表總結(jié)了 Arduino Nano 33 BLE Sense 上兩種模型的 MAC 數(shù)量、RAM 和閃存要求以及推理延遲。
配備 Arm Ethos-U55 NPU 的現(xiàn)代微控制器能夠運(yùn)行最初為移動端應(yīng)用開發(fā)的復(fù)雜模型。Ethos-U55 NPU 支持 44 個 TensorFlow Lite 算子 [8] 的位精確輸出,并且可配置為每個周期執(zhí)行 32、64、128 或 256 次 MAC 運(yùn)算。本文將通過在配備 Ethos-U55 NPU 的現(xiàn)代微控制器上運(yùn)行兩個 TinyML 應(yīng)用來展示 NPU 的性能優(yōu)勢。我們將分別在采用和不采用 Ethos-U55 NPU 的微控制器上運(yùn)行應(yīng)用中所使用的 ML 模型,以此對推理延遲進(jìn)行基準(zhǔn)測試。
現(xiàn)代物聯(lián)網(wǎng)開發(fā)板
TinyML 應(yīng)用被部署到 Seeed Studio 的 Grove Vision AI Module V2 [9] 開發(fā)板上,該開發(fā)板基于 Himax WiseEye2 HX6538 微控制器并集成了 16 MB 的外部閃存。Himax WiseEye2 HX6538 [10] 微控制器搭載了 Cortex-M55 CPU 和 Ethos-U55 NPU,運(yùn)行頻率均為 400 MHz,且?guī)в?512 KB 緊耦合存儲器 (TCM) 和 2 MB SRAM。
圖:Seeed Studio Grove Vision AI Module V2 開發(fā)板
該開發(fā)板上有一個 15 引腳相機(jī)串行接口 (CSI),連接至 Himax WiseEye2 HX6538 MCU,可與基于 OmniVision OV5647 的相機(jī)模塊一起使用。開發(fā)板上運(yùn)行的應(yīng)用可以從相機(jī)模塊 [11] 實(shí)時采集分辨率為 160x120、320x240 或 640x480 像素的 RGB 圖像。
將 2.8 寸的 TFT 彩色液晶屏和 3.7 伏的鋰聚合物 (LiPo) 電池連接到開發(fā)板上,便能打造出一款便攜式的電池供電設(shè)備。
TinyML 應(yīng)用
部署到開發(fā)板上的兩個基于計(jì)算機(jī)視覺的應(yīng)用將會持續(xù):
從相機(jī)模塊采集圖像。
完成使用 ML 模型時所需的預(yù)處理和后處理并執(zhí)行 ML 推理。
在開發(fā)板所連接的 TFT 屏幕上顯示所采集的圖像和 ML 推理結(jié)果。
第一個應(yīng)用將使用兩個 ML 模型來檢測臉上的關(guān)鍵特征點(diǎn),第二個應(yīng)用則使用 ML 模型來檢測人體姿態(tài)中的關(guān)鍵特征點(diǎn)。
這兩個應(yīng)用都將用到 TFLM 庫和 Ethos-U 自定義算子 [12] ,以便將 ML 運(yùn)算卸載到 NPU 中。應(yīng)用中所用的量化 8 位 TensorFlow Lite 模型必須使用 Arm 的 vela [13] 編譯器進(jìn)行編譯。vela 編譯器將 NPU 支持的運(yùn)算轉(zhuǎn)換為 Ethos-U 自定義算子,使其可分派到 NPU 進(jìn)行高效執(zhí)行。任何不受 NPU 支持的運(yùn)算都將保持原樣并退回到 CPU 上運(yùn)行。
左為 8 位量化 TensorFlow Lite 模型圖,右為經(jīng) vela 編譯的 8 位量化 TensorFlow Lite 模型圖 (點(diǎn)擊圖片,查看全圖)
在上例中,除了 pad 運(yùn)算之外的所有 TensorFlow 算子都被 vela 編譯器轉(zhuǎn)換為在 Ethos-U55 NPU 上運(yùn)行的 Ethos-U 自定義算子。未轉(zhuǎn)換的 pad 算子將回調(diào)到 CPU 上運(yùn)行。
Face Mesh 應(yīng)用
該應(yīng)用從相機(jī)模塊采集 320x240 圖像,然后估算人臉上的 468 個關(guān)鍵特征點(diǎn)。對于那些需要識別熟悉面孔、監(jiān)測注意力、識別情緒或執(zhí)行醫(yī)療診斷的用例來說,該應(yīng)用可以用作特征提取層。其采用了兩個 ML 模型,首先是使用 Google MediaPipe BlazeFace(短程)模型 [14] 來識別圖像中面部的位置。檢測到人臉后,繼而使用 Google MediaPipe Face Mesh 模型 [15] 來識別圖像中最大的那個人臉的 468 個關(guān)鍵特征點(diǎn)。
MediaPipe BlazeFace(短程)模型
MediaPipe BlazeFace(短程)模型需要將一張 RGB 128x128 圖像作為輸入,且每次推理要執(zhí)行 3,100 萬次 MAC 運(yùn)算。利用 Katsuya Hyodo 的 PINTO_model_zoo GitHub 資源庫 [16] ,可得到 TensorFlow Lite 格式的 BlazeFace(短程)模型的 8 位量化版本。
上表總結(jié)了對 RAM 和閃存的要求,并將單獨(dú)使用 Cortex-M55 CPU 與同時使用 Cortex-M55 CPU 和 Ethos-U55 NPU 所對應(yīng)的推理延遲進(jìn)行了比較,結(jié)果顯示 Ethos-U55 NPU 將推理速度提高了 109 倍!
MediaPipe Face Mesh 模型
MediaPipe Face Mesh 模型需要將一張 RGB 192x192 的臉部裁剪圖像(填充率為 25%)作為輸入,且每次推理要執(zhí)行 3,680 萬次 MAC 運(yùn)算。從 GitHub [17] 下載該模型的 16 位浮點(diǎn)版本,并使用 tflite2tensorflow [18] 工具將其轉(zhuǎn)換為 8 位量化模型。
上表總結(jié)了對 RAM 和閃存的要求,并將單獨(dú)使用 Cortex-M55 CPU 與同時使用 Cortex-M55 CPU 和 Ethos-U55 NPU 所對應(yīng)的推理延遲進(jìn)行了比較,結(jié)果顯示 Ethos-U55 NPU 將推理速度提高了 103 倍。
Ethos-U55 的優(yōu)勢
將 ML 計(jì)算卸載到 Ethos-U55,可使該應(yīng)用每秒執(zhí)行 10 次以上的推理。如果將其部署到 Cortex-M55 CPU,在臉部可見的情況下,該應(yīng)用只能每八秒執(zhí)行一次推理。
姿態(tài)估計(jì)應(yīng)用
該應(yīng)用從相機(jī)模塊采集 320x240 圖像,然后為圖像中檢測到的每個人估計(jì)人體姿態(tài)的 17 個關(guān)鍵特征點(diǎn)。該應(yīng)用可以用作那些需要檢測跌倒或運(yùn)動的應(yīng)用的特征提取層,或作為人機(jī)界面的輸入。
該模型使用 Ultralytic YOLOv8 GitHub 資源庫的 DeGirum 分支 [19] ,通過一張 256x256 的 RGB 圖像輸入,導(dǎo)出為一個 8 位量化 TensorFlow Lite 模型。對 DeGirum 進(jìn)行修改可以讓導(dǎo)出的模型更好地針對微控制器進(jìn)行優(yōu)化,這是通過刪除轉(zhuǎn)置運(yùn)算并分離模型的七個輸出來實(shí)現(xiàn)的,旨在提高量化的準(zhǔn)確性。該模型每次推理需要進(jìn)行 7.28 億次 MAC 運(yùn)算。
上表總結(jié)了對 RAM 和閃存的要求,并將單獨(dú)使用 Cortex-M55 CPU 與同時使用 Cortex-M55 CPU 和 Ethos-U55 NPU 所對應(yīng)的推理延遲進(jìn)行了比較,結(jié)果顯示 Ethos-U55 NPU 將推理速度提高了 611 倍!將 ML 計(jì)算卸載到 Ethos-U55,可使該應(yīng)用每秒執(zhí)行 10 次以上的推理。如果將其部署到 Cortex-M55 CPU,該應(yīng)用只能每 62 秒執(zhí)行一次推理。推理延遲的縮短使得應(yīng)用能夠更快地對人們的動作做出反應(yīng)。
結(jié)論
本文演示了為移動端應(yīng)用開發(fā)的 ML 模型,它們每次推理需要進(jìn)行千萬到數(shù)億次 MAC 運(yùn)算,可部署到配備 Ethos-U55 NPU 的現(xiàn)代微控制器上。與 TFLM 庫中所含的示例應(yīng)用相比,這些 ML 模型對 MAC 運(yùn)算、RAM 和閃存的要求更高。使用 NPU 可以讓應(yīng)用在一秒內(nèi)執(zhí)行多次推理,而如果沒有 NPU,則每隔幾秒或一分鐘內(nèi)只能執(zhí)行一次推理。因此,使用 NPU 對于應(yīng)用來說非常有利,使其能夠運(yùn)行一個或多個相比初始 tinyML 應(yīng)用中所使用的模型更為復(fù)雜的 ML 模型,而且能夠?qū)χ車h(huán)境做出更快的反應(yīng)。
評論