在邊緣AI迅速普及的今天,越來越多的應用開始依賴復雜的神經網絡模型來完成多模態(tài)識別、多任務處理等能力。然而,由于嵌入式設備資源受限,開發(fā)者常常希望在極小的內存占用下同時處理多路數(shù)據(jù)、生成多路輸出。
但現(xiàn)實是什么呢?
大部分TensorFlow Lite Micro(TFLM)的示例,包括很多MCU SDK(例如NXP eIQ examples),默認都只支持“單輸入+單輸出”模型。
這不僅限制了模型選擇,也讓開發(fā)者在面對多模態(tài)模型、檢測模型時十分受限。
因此,本系列文章將帶你從架構到實現(xiàn),一步步為TFLM添加真正完善的多輸入、多輸出(Multi-Input Multi-Output, MIMO)支持。
真的需要多輸入多輸出嗎?
你可能會疑惑:
“我平時的項目都是單輸入單輸出模型,也夠用了呀,還需要這么折騰嗎?”
下面我們從典型場景來看:
1.多模態(tài)融合模型
圖像 +IMU融合姿態(tài)識別
聲音 +圖像的情緒識別模型
2.檢測類復雜模型
YOLO:輸出分類概率、邊界框、置信度
人臉識別:輸出特征向量 +人臉關鍵點
3.多任務學習模型
同時進行分類與回歸
語音識別 +情感分析的聯(lián)合模型
這些模型本質上都需要從多個輸入源獲取數(shù)據(jù),并產生多個輸出結果。
而若代碼層只能訪問第一個輸入、只取第一個輸出,那么其余張量就完全“廢掉”了。
以下是我們在SDK中常見的典型“單輸入”實現(xiàn):
uint8_t*MODEL_GetInputTensorData(tensor_dims_t* dims,tensor_type_t* type) { TfLiteTensor* inputTensor = s_interpreter->input(0);// 只支持第一個輸入 returnGetTensorData(inputTensor, dims, type); }
這顯然無法滿足現(xiàn)代邊緣AI模型需求。下面就讓我們以此為基礎,開始設計支持多輸入多輸出的軟件架構:
一. 架構思路設計
為了讓TFLM具備完整的多輸入多輸出能力,同時保持現(xiàn)有項目可平滑過渡,我們從四個原則出發(fā):
1.核心設計原則
向后兼容:原有單輸入接口不做破壞
類型安全:強檢查避免運行期崩潰
輕量高效:盡量減少內存和額外運算消耗
易于使用:API簡潔,開發(fā)者上手快
二.系統(tǒng)整體架構

該結構主要解決三個問題:
統(tǒng)一管理所有輸入輸出張量
抽象元數(shù)據(jù)(維度、類型、指針)
提供友好的API給應用層調用
三.關鍵數(shù)據(jù)結構設計
為了支持多張量信息管理,我們需要設計三個核心結構:這些結構將作為“輸入管理器”“輸出管理器”的基礎能力。
(1)張量維度結構
typedefstruct{
intsize;
//
維度數(shù)量
intdata[MAX_TENSOR_DIMS];
//
各維度大小
}tensor_dims_t;
(2)張量類型
typedefenum{
kTensorType_FLOAT32,
kTensorType_UINT8,
kTensorType_INT8
}tensor_type_t;
(3)多張量信息結構(核心)
typedefstruct{
intcount;
//
張量數(shù)量
tensor_dims_tdims[MAX_INPUT_TENSORS];
//
維度信息數(shù)組
tensor_type_ttypes[MAX_INPUT_TENSORS];
//
類型信息數(shù)組
uint8_t* data[MAX_INPUT_TENSORS];
//
數(shù)據(jù)指針數(shù)組
}multi_tensor_info_t;
四. API接口設計(預覽)
下面展示的是應用層會使用到的主要接口。
(1)基礎查詢
//獲取輸入/輸出張量數(shù)量
intMODEL_GetInputTensorCount(void); intMODEL_GetOutputTensorCount(void);
(2)單張量訪問
//按索引獲取張量數(shù)據(jù)
uint8_t*MODEL_GetInputTensorData(intindex,tensor_dims_t* dims,tensor_type_t* type); uint8_t*MODEL_GetOutputTensorData(intindex,tensor_dims_t* dims,tensor_type_t* type);
(3)批量獲取所有張量信息
//一次性獲取所有張量信息
status_tMODEL_GetAllInputTensors(multi_tensor_info_t* input_info); status_tMODEL_GetAllOutputTensors(multi_tensor_info_t* output_info);
(4)差異化預處理
//支持按張量索引的差異化預處理
voidMODEL_ConvertInput(uint8_t* data,tensor_dims_t* dims, tensor_type_ttype,inttensor_index);
讓開發(fā)者可以針對不同的輸入,有不同的量化、歸一化策略。
五.結語與預告
在本篇文章中,我們從“為什么需要MIMO支持”講起,到支持多輸入多輸出的架構設計、數(shù)據(jù)結構設計與API規(guī)劃,構建了一套清晰完整的解決方案。
通過這樣的設計,我們不僅能夠保持現(xiàn)有代碼兼容,也能讓TFLM順利支持更復雜的邊緣AI模型,從而大幅提升應用可擴展性、減少重復開發(fā)工作,并顯著提高項目的工程效率。
在下一篇《如何為TensorFlow Lite Micro添加多輸入多輸出支持(二)》中,我們將正式進入代碼實現(xiàn),包括:頭文件設計;完整的類型定義和接口聲明以及核心函數(shù)實現(xiàn);張量管理和數(shù)據(jù)訪問的具體實現(xiàn)。
歡迎持續(xù)關注,如果您在實際開發(fā)中遇到相關問題,歡迎在評論區(qū)討論交流。
-
Micro
+關注
關注
2文章
274瀏覽量
36674 -
模型
+關注
關注
1文章
3764瀏覽量
52135 -
tensorflow
+關注
關注
13文章
335瀏覽量
62225
原文標題:突破限制!為TensorFlow Lite Micro添加多輸入多輸出的完整方案解析(一)
文章出處:【微信號:NXP_SMART_HARDWARE,微信公眾號:恩智浦MCU加油站】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
多輸入多輸出收發(fā)器系統(tǒng)的無線通信設計
如何在TensorFlow Lite Micro中添加自定義操作符(1)
一種多輸入多輸出系統(tǒng)中有限反饋預編碼的自適應跟蹤測度
存在信道估計誤差的有限反饋多用戶多輸入多輸出傳輸性能分析
多輸入-多輸出線性系統(tǒng)有限時間觀測器設計方法
都科摩(北京)通信技術研究中心開發(fā)出8發(fā)8收多輸入多輸出正交
8發(fā)8收多輸入多輸出正交頻分多址系統(tǒng)平臺
多輸入多輸出天線系統(tǒng)MIMO分析
簡介多輸入多輸出(Multiple-input Multiple-output)雷達
多輸入多輸出雷達信號與目標干擾優(yōu)化
多輸入多輸出無線終端的在空中無線測試方法
如何為TensorFlow Lite Micro添加多輸入多輸出支持(一)
評論