tensorflow lite 源码阅读(1)

原创
2018/11/20 21:25
阅读数 6.1K

        通过观看视频,记下此次笔记,笔记内容来自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负责维护函数指针映射关系。

更多细节,在这几个代码文件。

 

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部