本文轉載於極術社群
極術專欄:Arm技術部落格
作者:鄭亞斌丨Arm中國生態技術市場經理
一、概述
隨著邊緣計算和深度學習領域的不斷髮展,越來越多的端側 AI 裝置開始出現在我們的視野中。本次提出的這一方案著眼於邊緣計算與深度學習場景,提出了一款應用於無人值守倉儲、居民社群或危險禁入區域的智慧監控方案,具有成本低、功耗低等優勢。此處以人體檢測為例,對於長時間徘徊於某區域的行人進行智慧識別,並且將異常現象及時上報雲端,從而實現邊緣 AI,TencentOS Tiny 以及騰訊雲完美結合的智慧安防案例。
二、系統創新點
1。 本系統採用了 TencentOS Tiny 這一物聯網實時作業系統來實現片上資源的智慧化管理。一方面,它可以靈活高效的管理系統的片上資源,為系統併發執行多個任務提供了基礎 ;另一方面,搭載 TencentOS Tiny 的端側系統可以方便的與騰訊雲對接,依託於騰訊雲的豐富資源為端雲結合帶來了更多的可能性。
2。 本系統搭載了Tensorflow Lite Micro 超低功耗 AI 推理框架以及 Arm CMSIS-NN 加速庫。Tensorflow Lite Micro 是 Tensorflow 針對微控制器應用場景所設計的 AI 推理框架。它佔用的資源少,執行時記憶體最低只需要 16KB。並且它依託於Tensorflow 平臺強大的技術生態,使得更多開發者可以方便的整合、使用 AI 演算法。Tensorflow Lite Micro 透過使能 Arm 開源加速庫 CMSIS-NN ,為端側帶來人工智慧的新活力。
CMSIS-NN:
https://www。keil。com/pack/doc/CMSIS/NN/html/index。html
3。 目前 Tensorflow Lite Micro 及 CMSIS-NN 元件已經合併到 TencentOS Tiny GitHub 倉庫,其中提供了 Tensorflow Lite Micro 原始碼以及針對 Arm Cortex-M 系列的 MDK lib 庫檔案,可以方便開發者整合到 MCU 開發環境中。
Tensorflow Lite Micro 及 CMSIS-NN:
https://github。com/Tencent/TencentOS-tiny/tree/master/components/ai/tflite_micro
4。 本系統將邊緣 AI 和 TencentOS Tiny 結合,面向區域安防管理,提出了一種新的端雲系統架構。透過對系統的驗證並配合詳細的使用者移植文件,讓整個系統具備在多領域多場景的可遷移性與易用性。
系統拓撲結構圖:
單個 TencentOS Tiny 內部結構圖:
系統 Demo 展示:
裝置檢測的正確率與模型設計和模型訓練息息相關。經過測試,採用 Tensorflow Lite Micro 官方 github 中的 Person Detection 模型開發的行人檢測例程,其檢測正確率達到 84%。端側檢測到行人後,MCU 將有關行人的資料上傳到雲端,雲端根據收到的資訊來喚醒其他高效能裝置,進一步獲取更加詳實的真實資料。
相比與傳統的社群管理員透過大量連線高畫質攝像頭的螢幕來完成社群安全管理的方法相比,這種基於 TencentOS Tiny 和 CMSIS-NN 的端雲協同智慧安防系統僅會在端側檢測到行人後才會觸發相應事件。這不僅減輕了管理員的工作負擔,更重要的是端側實現的智慧化應用將極大的節省系統頻寬,提升系統響應的同時也降低了成本,是一種綜合能力較強的解決方案。
三、系統移植概述
我們已將相關程式碼和文件開源至官方主倉庫,開發者可以按照指南進行移植和應用。
1。 準備目標硬體(開發板 / 感測器 / 模組)
開發板 :NUCLEO-L496ZG,MCU 為 STM32L496ZG
Camera :獲取 RGB 影象,本例程使用 OV2640 攝像頭
通訊模組 :負責 MCU 與雲端之間的通訊,本例程選用的樂鑫 ESP8266
2。準備系統軟體
參考 TencentOS Tiny 基於 Keil 的移植教程進行移植。
為了方便初始化 MCU 外設,後續要繼續使用 STM32CubeMX 軟體,請確保正確安裝。在系統移植完成後,工程可以進行執行緒任務切換,透過串列埠列印“hello world”,表明基礎 Keil 工程程式碼準備完畢。
準備 Tensorflow Lite Micro 元件。
基於 Keil 的移植教程:
https://github。com/Tencent/TencentOS-tiny/blob/master/doc/10。Porting_Manual_for_KEIL。md
本次我們使用 Tensorflow Lite Micro 推理框架來實現行人檢測任務,使用者可以直接採用主倉庫中 TencentOS-tiny\components\ai\tflite_micro 路徑下對應的lib 庫檔案來整合到系統中,然後呼叫相關的 API 即可將 AI 元件部署在 MCU 平臺上。
製作 lib 庫檔案以及能使 CMSIS NN 加速。
請參考 Tensorflow Lite Micro 元件使用說明。
使用說明:
https://github。com/Tencent/TencentOS-tiny/blob/master/components/ai/tflite_micro/TFlite_Micro_Component_User_Guide。md
3。 系統移植流程
在獲得基礎工程後,我們首先移植驅動程式碼
新增與本例程相關的 Necluo STM32L496RG 的攝像頭驅動程式碼 ( 此處採用官方倉庫中的驅動程式碼)
Necluo STM32L496RG 的攝像頭驅動程式碼:
https://github。com/Tencent/TencentOS-tiny/tree/master/board/NUCLEO_STM32L496ZG/BSP/Hardware/Src
重寫 mcu_init 函式中的 DCMI 幀中斷回撥函式。值得注意的是,當使用 CubeMX 重新配置外設並生成程式碼時,程式碼需要寫在 CubeMx 生成的註釋語句內,這樣新增的程式碼才不會被覆蓋。如下所示,程式碼新增在 /* USER CODE BEGIN 4 / 和 / USER CODE END 4 */ 註釋語句之間 :
新增 LCD 程式顯示攝像頭影象 :
將 Tensorflow Lite Micro 的模型和資料接入程式碼新增到工程中,同時新增
TencentOS-tiny\components\ai\tflite_micro\KEIL\retarget。c
TencentOS-tiny\components\ai\tflite_micro\ARM_CortexM4_lib\ tensorflow_lite_micro。lib
模型和資料接入程式碼:
https://github。com/Tencent/TencentOS-tiny/tree/master/examples/tflitemicro_person_detection
最後關閉 Keil 的 Microlib 庫,include 相關的檔案
注 :最下方的路徑為
調整最佳化等級和指定 tflite_micro 的 debug 資訊輸出串列埠 :
其中宏 NUCLEO_STM32L496ZG 指定 Nucleo STM32L496 的 hlpuart1 為系統printf 函式的輸出串列埠,具體定義在 Nucleo STM32L496 BSP 資料夾中的mcu_init。c 中 。
至此 Tensorflow Lite Micro 已經成功的移植到 MCU 平臺中,可以開始設計與行人檢測有關的應用層程式碼。
設計影象預處理函式。在本例程中,模型的輸入為灰度圖,為完成攝像頭獲取的 RGB 影象到灰度圖轉換,需要解析出 RGB565 畫素格式中 R、G、B 通道的資料,再根據公式計算出單個畫素點的灰度,具體程式碼如下 :
編寫行人檢測執行緒任務函式 :
應用程式主體若在 10 幀中檢測到超過半數的人像,就判定為異常並上報雲端。根據實際的測試結果,執行一幀影象推理耗時約 633ms。
在 MCU 端處理完行人檢測後,MCU 與雲端建立資料連線並傳輸資料。部分程式碼如下 :
4. 騰訊物聯網開發平臺 - 騰訊連連小程式開發
為了方便使用者實時檢視端側上傳的資訊(是否有異常報警、人流量計數等)以及控制裝置端發出報警提示,我們利用騰訊雲 IoT Explorer 開發平臺,開發騰訊連連小程式。
開發過程如下,登入騰訊雲開發平臺 :
步驟一 :新建產品
步驟二 :跟據場景和應用定義資料模板
裝置端上傳只讀資料 :
1。行人檢測 :裝置端檢測到行人時,標誌位置為 1
2。異常停留報警 :當裝置端持續檢測到行人時,觸發異常停留報警,標誌位置為 1
3。行人計數 :當裝置端的行人檢測結果從無人變化為有人時,人流量計數值 +1
裝置端接收控制指令 :
報警提示 :當用戶看到有異常停留時,可以控制裝置端發出報警提示,也可以關閉報警提示
步驟三 :編輯小程式的面板
由於目前騰訊連連提供的模板較少,暫時使用按鈕顯示裝置狀態資訊。
步驟四 :裝置除錯
將產品 ID、金鑰、裝置號等資訊填入裝置端程式
移植基於 TencentOS Tiny 的 AT 元件和 ESP8266 適配的 SAL 框架
裝置端編寫上行和下行資料處理程式
四、結語
我們提出了一種基於邊緣 AI+TencentOS Tiny 的新架構,雖然在使用者前端還有很多改進的空間,但透過對整體方案的驗證並且配合詳細的使用者移植文件,使我們的工作具備了可遷移性和擴充套件性,同時也實現了 TencentOS Tiny 對於人工智慧領域的支援。未來我們會繼續完善 Tensorflow Lite Micro 元件並不斷更新應用,致力於豐富整個TencentOS Tiny 以及 Arm 生態。隨著越來越多的廠商採用 Arm Cortex-M55 和Ethos-U NPU IP 方案,相信未來端側 AI 的應用會更加廣闊。
TencentOS Tiny AI 元件 :
https://github。com/Tencent/TencentOS-tiny/tree/master/components/ai/tflite_micro
Arm Cortex-M4 :
https://www。arm。com/products/silicon-ip-cpu/cortex-m/cortex-m4
Arm Cortex-M55 :
https://www。arm。com/products/silicon-ip-cpu/cortex-m/cortex-m55
Arm Ethos-U55 :
https://www。arm。com/products/silicon-ip-cpu/ethos/ethos-u55
Arm Ethos-U65 :
https://www。arm。com/products/silicon-ip-cpu/ethos/ethos-u65
TensorFlow Lite for Microcontrollers :
https://github。com/tensorflow/tensorflow/tree/master/tensorflow/lite/micro
五、致謝
感謝 TencentOS Tiny 以及 TensorFlow 開源社群團隊的大力支援,感謝個人開發者鄧可笈,楊慶生和劉恆言的貢獻。
https://aijishu。com/a/1060000000188831