通過觀看視頻,記下此次筆記,筆記內容來自lite深度解析視頻。視頻來源:https://www.bilibili.com/video/av24219725/
tensorflow lite 定位於設備端智能應用。我們在臺式機上使用tensorflow開發出模型,訓練出權重,然後使用轉換工具,將模型轉換爲tensorflow lite的格式。在設備端,tensorflow的解析器會加載這個模型並且進行計算。lite內置NEON指令集,並且支持硬件加速接口。
1、模型文件格式
模型文件的主結構爲model結構體,如下圖所示:
結構體中的operator_codes:[OperatorCode];定義了該模型所用的算子。
結構體中的subgraph定義了各個子圖,其中第一個子圖是主圖。
buffers是數據存儲區域。主要用來存放模型權重。
1.1 subgraphs裏面的具體內容
subgraphs定義了圖的具體結構。
其中的tensor,定義了子圖中的各個tensor。
其中的inputs和outputs,通過索引值的形式,定義了哪些tensor負責輸入輸出。
operators定義了子圖的各個算子。
1.2 tensor具體結構
包含了維度信息、數據類型以及數據位置。
其中的buffer,通過索引值的形式,指出了此tensor使用了哪個buffer。
1.3 operator具體內容
其中的opcode_index通過索引值的形式,指明瞭改operator使用的具體算子。
inputs和outputs,指明瞭該operator的輸入輸出。
2 、解析器細節
數據流圖可以用邊和結點來表達。邊就是tensor在結點對應的op進行操作輸出進入另一個tensor。
首先模型文件通過mmap加載進內存,內存裏有了tensor、operator以及buffer等內容。
其中,爲了表示那些數值可變的tensor,增加了可寫的buffer區域。
解析器,還包含了具體執行計算的代碼,稱之爲kernal。
模型中的各個tensor,被加載爲tflitetensor格式,集中存放於TfLiteContext中。
每個tensor的指針指向內存映射的只讀數據區域,或新分配的可寫數據區域。
模型中的operator被加載爲TfLiteNode。包含了輸入輸出的tensor索引值。
Node對應的操作符存儲於TfLiteRegistration,包含了指向kernal的指針。
OpResolver負責維護函數指針映射關係。
更多細節,在這幾個代碼文件。