意法半導(dǎo)體(ST)持續(xù)積極參與高速發(fā)展的嵌入式人工智慧領(lǐng)域。為了在具成本效益和低功耗的微控制器上加快運(yùn)用機(jī)器學(xué)習(xí)和深度神經(jīng)網(wǎng)路,ST開發(fā)全方位的邊緣人工智慧生態(tài)系統(tǒng),嵌入式開發(fā)人員可以在各種STM32微控制器產(chǎn)品組合中,輕鬆新增利用人工智慧的新功能和強(qiáng)大的解決方案。
圖一顯示ST AI解決方案之於整個(gè)STM32產(chǎn)品組合,而且已經(jīng)擁有預(yù)先訓(xùn)練神經(jīng)網(wǎng)路的嵌入式開發(fā)人員,可以在任何採(cǎi)用Cortex M4、M33和M7的STM32上移植、最佳化和驗(yàn)證這整個(gè)產(chǎn)品組合。STM32Cube.AI是 STM32CubeMX的AI擴(kuò)充套件,讓客戶能以更高效率開發(fā)其AI產(chǎn)品。
利用深度學(xué)習(xí)的強(qiáng)大功能可以增強(qiáng)訊號(hào)處理效能,並提升STM32 應(yīng)用的工作效率。
本文概述FP-AI-VISION1,此為用於電腦視覺(jué)開發(fā)的架構(gòu),提供工程師在STM32H7上執(zhí)行視覺(jué)應(yīng)用的程式碼範(fàn)例。

| 圖一 : 執(zhí)行機(jī)器學(xué)習(xí)和深度學(xué)習(xí)演算法的STM32產(chǎn)品組合 |
|
從FP-AI-VISION1程式碼範(fàn)例開始,簡(jiǎn)易達(dá)成在邊緣執(zhí)行的各種電腦視覺(jué)使用案例,例如
? 生產(chǎn)線上的物體分類,藉以根據(jù)物體的類型調(diào)整輸送帶速度;
? 偵測(cè)產(chǎn)品的一般瑕疵;
? 區(qū)分不同類型的物件,例如:螺絲、義大利麵、樂(lè)高零件,並分揀到不同的容器中;
? 對(duì)設(shè)備或機(jī)器人操作的材料類型進(jìn)行分類,並隨之調(diào)整行為;
? 對(duì)食品類型進(jìn)行分類以調(diào)整烹調(diào)/燒烤/沖泡或重新訂購(gòu)貨架上的新產(chǎn)品。
FP-AI-VISION1
概述
FP-AI-VISION1是STM32Cube功能套件(FP),提供採(cǎi)用卷積神經(jīng)網(wǎng)路(CNN)的電腦視覺(jué)應(yīng)用範(fàn)例。其由STM32Cube.AI產(chǎn)生的軟體元件和AI電腦視覺(jué)應(yīng)用專用的應(yīng)用軟體元件組成。
功能套件中提供的應(yīng)用範(fàn)例,包含:
? 食品識(shí)別:辨識(shí)18類常見(jiàn)食品;
? 人體感測(cè):識(shí)別影像中是否有人;
? 人數(shù)統(tǒng)計(jì):依照物體偵測(cè)模型計(jì)算情境中的人數(shù)。
主要特色
FP-AI-VISION1在與STM32F4DIS-CAM攝影機(jī)子板,或是B-CAMS-OMV攝影機(jī)模組搭配連接的STM32H747I-DISCO板上運(yùn)作,包括用於攝影機(jī)擷取、畫格影像預(yù)處理、推斷執(zhí)行的完整應(yīng)用韌體和輸出後處理。這也提供浮點(diǎn)和 8 位元量化 C 模型的整合範(fàn)例,並支援多種資料記憶體設(shè)定,滿足各種應(yīng)用需求。
此功能套件最重要的其中一項(xiàng)關(guān)鍵優(yōu)勢(shì)是提供範(fàn)例,描述如何將不同類型的資料有效地放置在晶片上的記憶體和外部記憶體中。使用者因此能夠輕鬆瞭解最符合需求的記憶體分配,並有助建立適用於STM32系列的自訂神經(jīng)網(wǎng)路模型,特別是在STM32H747-Disco板上。

| 圖二 : FP-AI-VISION1評(píng)估裝置範(fàn)例 |
|
FP-AI-VISION1 包括三個(gè)採(cǎi)用 CNN 的影像分類應(yīng)用範(fàn)例:
? 一種對(duì)彩色(RGB 24位元)畫格影像執(zhí)行的食品識(shí)別應(yīng)用;
? 一種對(duì)彩色(RGB 24位元)畫格影像執(zhí)行的人體感測(cè)應(yīng)用;
? 一種對(duì)灰階(8位元)畫格影像執(zhí)行的人體感測(cè)應(yīng)用。
本文將重點(diǎn)介紹食品識(shí)別和人體感測(cè)之兩種範(fàn)例。
首先討論食品識(shí)別應(yīng)用。食品識(shí)別CNN是MobileNet模型的衍生模型。MobileNet是適用於行動(dòng)和嵌入式視覺(jué)應(yīng)用的高效率模型架構(gòu),此模型架構(gòu)由Google[1]提出。
MobileNet模型架構(gòu)包括兩個(gè)簡(jiǎn)單的全域超參數(shù),可以高效在延遲和準(zhǔn)確度之間進(jìn)行權(quán)衡。原則上,這些超參數(shù)可讓模型建構(gòu)者根據(jù)問(wèn)題的限制條件,決定應(yīng)用大小適合的模型。考量STM32H747的目標(biāo)限制條件,此軟體套件中使用的食品識(shí)別模型是透過(guò)調(diào)整這些超參數(shù)建構(gòu)而成,以便在準(zhǔn)確度、運(yùn)算成本和記憶體佔(zhàn)用之間進(jìn)行最佳權(quán)衡。
圖三為食品識(shí)別模型的簡(jiǎn)單執(zhí)行流程。這在STM32H747上執(zhí)行,大約需要150毫秒才能完成推斷。

| 圖三 : 食品識(shí)別模型的執(zhí)行流程 |
|
其次,將說(shuō)明人體感測(cè)應(yīng)用。FP-AI-VISION1 提供兩個(gè)人體感測(cè)的範(fàn)例應(yīng)用:
? 一種採(cǎi)用低複雜度CNN 模型(所謂的Google_Model),用於處理解析度為96×96像素的灰階影像(每像素 8 位元)。這個(gè)模型可從:storage.googleapis.com下載。
? 一種採(cǎi)用更高複雜度的CNN模型(所謂的 MobileNetv2_Model),用於處理解析度為 128×128像素的彩色影像(每像素 24 位元)。
在此觀察前一個(gè)模型,人體感測(cè)應(yīng)用程式可識(shí)別影像中是否有人。在與STM32F4DIS-CAM連接的STM32L4R上執(zhí)行這個(gè)應(yīng)用程式時(shí),大約需要270毫秒來(lái)推斷。而快閃記憶體和 RAM 的大小足以在微控制器上執(zhí)行神經(jīng)網(wǎng)路 (NN),如圖四所示。
人體感測(cè)可利用從低功率喚醒,使用案例包括開燈、開門或其他任何自訂方法。一般用途通常採(cǎi)用被動(dòng)紅外線感測(cè)器,藉以在偵測(cè)到移動(dòng)的時(shí)間和地點(diǎn)觸發(fā)事件。不過(guò),這種PIR 系統(tǒng)的問(wèn)題是可能發(fā)生誤報(bào)。如果有貓經(jīng)過(guò)或在風(fēng)中飛舞的樹葉,可能會(huì)觸發(fā)這個(gè)系統(tǒng)。人體感測(cè)應(yīng)用只會(huì)偵測(cè)人類,並且有助於輕鬆開發(fā)更智慧的偵測(cè)系統(tǒng)。
系統(tǒng)架構(gòu)
FP-AI-VISION1的頂層架構(gòu),如圖五所示。

| 圖五 : FP-AI-VISION1架構(gòu) |
|
應(yīng)用建構(gòu)流程
從浮點(diǎn) CNN 模型(使用 Keras 等架構(gòu)設(shè)計(jì)和訓(xùn)練)開始,使用者產(chǎn)生最佳化的C程式碼(使用STM32Cube.AI 工具)並整合到電腦視覺(jué)架構(gòu)中(FP-AI-VISION1 提供),以便在 STM32H7上建構(gòu)電腦視覺(jué)應(yīng)用。
產(chǎn)生C程式碼時(shí),使用者可從下列兩個(gè)選項(xiàng)中擇一:
? 直接從CNN模型以浮點(diǎn)方式產(chǎn)生浮點(diǎn)C程式碼;
? 或者對(duì)浮點(diǎn)CNN模型進(jìn)行量化,得到8位元模型,隨後產(chǎn)生對(duì)應(yīng)之量化後的C程式碼;
對(duì)於大多數(shù) CNN 模型,第二個(gè)選項(xiàng)可以減少記憶體佔(zhàn)用(快閃記憶體和RAM)以及推斷時(shí)間。對(duì)最終輸出準(zhǔn)確度的影響則取決於CNN模型以及量化過(guò)程(主要是測(cè)試資料集和量化演算法)。

| 圖六 : FP-AI-VISION1架構(gòu) |
|
應(yīng)用執(zhí)行流程
對(duì)於電腦視覺(jué)應(yīng)用,整合需要一些資料緩衝區(qū),如圖七所示。

| 圖七 : 執(zhí)行流程中的資料緩衝區(qū) |
|
應(yīng)用過(guò)程依序執(zhí)行下列操作:
1. 在 camera_capture buffer中擷取攝影機(jī)畫格(透過(guò)DCMI資料暫存器中的DMA引擎)。
2. 此時(shí),根據(jù)選擇的記憶體分配配置,將camera_capture buffer內(nèi)容複製到 camera_frame buffer,並啟動(dòng)後續(xù)畫格的擷取。
3. camera_frame buffer中包含的影像將重新縮放到Resize_Dst_Img buffer中,藉以配合預(yù)期的CNN輸入張量尺寸。例如,食品識(shí)別NN模型需要輸入張量,例如 Height × Width = 224 × 224像素。
4. 執(zhí)行Resize_Dst_Img buffer到Pfc_Dst_Img buffer的像素色彩格式轉(zhuǎn)換。
5. 將Pfc_Dst_Img buffer內(nèi)容中包含的各像素格式調(diào)整到nn_input緩衝區(qū)中。
6. 執(zhí)行NN模型的推斷:這個(gè)nn_input buffer以及activation buffer提供給NN作為輸入。分類結(jié)果將儲(chǔ)存在 nn_output buffer中。
7. 對(duì)nn_output buffer內(nèi)容進(jìn)行後處理,並顯示結(jié)果於螢?zāi)簧稀?/span>
圖表八詳細(xì)說(shuō)明了食品識(shí)別應(yīng)用在整合量化C模型或浮點(diǎn)C模型時(shí)所需的RAM。

| 圖八 : 用於食品識(shí)別應(yīng)用的SRAM記憶體緩衝器 |
|
FP-AI-VISION1可從連結(jié)下載:
www.st.com/en/embedded-software/fp-ai-vision1.html
參考資料
[1] 食品識(shí)別 CNN 是 MobileNet 模型的衍生模型。
MobileNet:用於行動(dòng)視覺(jué)應(yīng)用的高效率卷積神經(jīng)網(wǎng)路:https://arxiv.org/pdf/1704.04861.pdf
[2]UM2611:FP-AI-VISION1手冊(cè):
https://www.st.com/resource/en/user_manual/dm00630755-artificial-intelligence-ai-and-computer-vision-function-pack-for-stm32h7-microcontrollers-stmicroelectronics.pdf
[3]UM2526:STM32Cube.AI手冊(cè):
https://www.st.com/resource/en/user_manual/dm00570145-getting-started-with-xcubeai-expansion-package-for-artificial-intelligence-ai-stmicroelectronics.pdf
[4]FP-AI-VISION1 視訊應(yīng)用影片:
https://www.youtube.com/watch?v=VkFTrc5KSgg&t=130s
https://www.youtube.com/watch?v=8AX9uC2Oi1g&t=178s