tensorflow lite 源碼閱讀(1)

        通過觀看視頻,記下此次筆記,筆記內容來自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負責維護函數指針映射關係。

更多細節,在這幾個代碼文件。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章