- mnist数据集
- tensorflow训练模型ckpt->pb
- pb转tflite
- tflite转kmodel
- 转换工具Maix_Toolbox环境搭建
模型转换示意图
ckpt -> pb <-> tflite -> kmodel
∧ / ∧
| / |
∨ ∨ ∨
graph pbtxt
ckpt->|->pb->tflite->kmodel
h5----/
文件后缀说明
- model.ckpt.meta保存计算图的结构,即神经网络的结构
- checkpoint保存目录下所有的模型文件列表
- ckpt保存程序中每个变量的取值
- .data文件为模型中的训练变量
环境:
- ubuntu18.04LTS
- python3.6.8
- tensorflow-1.14.0
- keras-2.2.5
- Sipeed MAIX系列开发板
训练模型示例:
https://github.com/sipeed/Maix-TF-workspace
下载安装工具:
Maix_Toolbox:收集了常用格式转换的脚本程序
https://github.com/sipeed/Maix_Toolbox
下载nncase工具箱:
TFlite模型转换为K210的模型格式,需要借助嘉楠的nncase工具箱。
若网络情况好……运行Maix_Toolbox中的get_nncase.sh 脚本,自动从github下载nncase的linux的编译好的二进制文件
若网络情况不好……
将get_nncase.sh 脚本内的wget https://github.com/kendryte/nncase/releases/download/v0.1.0-rc5/ncc-linux-x86_64.tar.xz
修改为wget https://gitee.com/cnbright/nncase/attach_files/267069/download
换到码云的下载地址
也可以直接在这个地址下载,再在Maix_Toolbox内新建文件夹ncc,并解压到此处
tensorflow模型间转换,生成pb文件
ckpt->pb: ckpt2pb.py (.ckpt模型文件转变换.pb模型文件)
h5-pb: keras_to_tensorflow.py (.h5模型文件转变换.pb模型文件)
使用tensorboard显示pb模型图结构
把pb文件放到workspace文件夹下
gen_pb_graph.py
python gen_pb_graph.py workspace/mnist.pb
测试通过给出的地址可以在网页上看到模型结构
可以看到输入节点名为“inputs”,输出节点名为“output”
pb转换tflite
pb->tflite: pb2tflite.sh
1 | bash pb2tflite.sh workspace/mnist.pb |
之后会生成.tflite
TFlite模型在转换为K210模型的时候,会对原来的网络结构进行量化quantization, 量化会将原来网络中的浮点运算转化为8比特整数运算,起到压缩模型尺寸与加速的目的。线性激活函数, relu激活函数, relu6激活函数等均可以转换为等价的量化运算。
tflite转换kmodel
tflite->kmodel: tflite2kmodel.sh
1 | bash tflite2kmodel.sh workspace/mnist.tflite |
这时在workspace下生成了mnist.kmodel
kflash烧录kmodel到k210
用kflash烧录.kmodel文件,地址填写: (比如0x300000)
之后此地址就是micropython调用用到的地址
1 | task = kpu.load(0x300000) |