
系列目录:
IOT设备AI搭建1:Linux上构建Tensorflow Lite
IOT设备AI搭建2:树莓派部署TF Lite(图片分类实例)
IOT设备AI搭建3:TF Lite构建过程解析
IOT设备AI搭建4:MakeFile基础语法
前言:
TF Lite只支持模型推导,不能进行模型训练;适合在服务器完成模型训练,在端设备应用模型的场景
测试环境:
1:电脑环境,VirtualBox虚拟机,LinuxMint 19.3
2:基于Tf稳定版分支r2.2,master分支会有各种问题
获取分支代码
到GitHub仓库下载稳定版TF 2.X 全部代码:(53.88M)
wget https://codeload.github.com/tensorflow/tensorflow/zip/r2.2
unzip master.zip
交叉编译
交叉编译是在一个平台上生成另一个平台上的可执行代码
要使用 TensorFlow Lite 交叉编译功能,应先安装工具链和相关的库。
sudo apt-get update
#安装后占用空间大小 15.4kb
sudo apt-get install crossbuild-essential-armhf
构建
运行以下命令,安装依赖包
./tensorflow/lite/tools/make/download_dependencies.sh
编译TensorFlow Lite,我是在本地虚拟机的Ubuntu验证
#在树莓派上
./tensorflow/lite/tools/make/build_rpi_lib.sh
# 在ARM64上运行,例如andorid 手机
bash ./tensorflow/lite/tools/make/build_aarch64_lib.sh
# 在普通Ubuntu上运行:
bash ./tensorflow/lite/tools/make/build_lib.sh
以构建普通Linux的静态包为例
运行批处理脚本:
# 在普通Ubuntu上运行:
bash ./tensorflow/lite/tools/make/build_lib.sh
脚本文件实际调用的是/tensorflow/lite/tools/make/Makefile文件;每种运行脚本对应一个配置文件(tensorflow/lite/tools/make/targets中),里面配置了不同目标平台的编译参数,配置文件是在Makefile文件中加载的
运行Makefile成功后,这将编译一个静态库,它位于:
tensorflow/lite/tools/make/gen/linux_x86_64/lib/libtensorflow-lite.a
静态库文件使我们所需要的的最重要的文件,我们可以使用它生成各种场景的可执行文件;相对对应的动态库也就是so文件
同样也会在/tensorflow/lite/tools/make/gen/linux_x86_64/bin生成minimal可执行文件
minimal文件是一个模型加载和模型推导可执行文件,相当于一个AI场景;
如果你需要其他AI场景,你需要根据具体的模型文件编写模型加载程序,并生成类似与minimal的可执行文件
运行可执行文件
在/tensorflow/lite/tools/make/gen/linux_x86_64/bin运行minimal命令
./minimal mobilenet_v1_0.25_128_quant.tflite
如果能够读取模型内容,输出以下结果表示成功:
=== Pre-invoke Interpreter State ===
Interpreter has 90 tensors and 31 nodes
Inputs: 88
Outputs: 87
...
Tensor 87 MobilenetV1/Predictions/Reshape_1 kTfLiteUInt8 kTfLiteArenaRw 1001 bytes ( 0.0 MB) 1 1001
Tensor 88 input kTfLiteUInt8 kTfLiteArenaRw 49152 bytes ( 0.0 MB) 1 128 128 3
Tensor 89 (null) kTfLiteUInt8 kTfLiteArenaRw 110592 bytes ( 0.1 MB) 1 64 64 27
...
Node 28 Operator Builtin Code 3 CONV_2D
Inputs: 0 3 2
Outputs: 1
Node 29 Operator Builtin Code 22 RESHAPE
Inputs: 1 5
Outputs: 4
Node 30 Operator Builtin Code 25 SOFTMAX
Inputs: 4
Outputs: 87
TF Lite 移植到其他Linux平台
将上述编译好的minimal文件和对应的模型文件tflite移植到其他Linux平台(同处理器架构),不需要移植Tensorflow其他包,
这样,我们可以使用在移动端Linux环境环境中,不需要很多的存储空间,就可以运行我们的AI场景
~/tensorflow/linux_x86_64/bin$ ls
minimal mobilenet_v1_0.25_128_quant.tflite
运行:
~/tensorflow/linux_x86_64/bin$ ./minimal mobilenet_v1_0.25_128_quant.tflite
=== Pre-invoke Interpreter State ===
Interpreter has 90 tensors and 31 nodes
Inputs: 88
Outputs: 87
...
表示运行成功,可以根据实际项目需要,编译你的可执行程序;
同样的操作方式,可以将TF_LITE交叉编译后的可执行文件,在树莓派,IOS上运行
总结
通过在电脑端交叉编译各个Linux版本的TF_LITE,可以将TF_LITE一直到各个移动端设备
移植的文件 | 名称 | 暂用空间大小 |
---|---|---|
静态库文件 | libtensorflow-lite.a | 5.7M |
可执行文件 | minimal | 3.4M |
模型文件 | tflite | 497kb |
文件空间占用情况如上边,根据不同的场景,可执行文件大小变化不大;不同的场景,模型文件会差异比较大,官方80个物体监测的模型文件为3.3M
网友评论