Skip to content

Latest commit

 

History

History
127 lines (66 loc) · 4.36 KB

TFLite模型转换为K210模型.md

File metadata and controls

127 lines (66 loc) · 4.36 KB

TFLite模型转换为K210模型

[TOC]

概要

使用nncase工具箱与MaixToolbox里面的工具完成K210模型转换。

下载nncase工具箱

TFlite模型转换为K210的模型格式,需要借助嘉楠的nncase工具箱。

运行get_nncase.sh 脚本,自动从github下载nncase的linux的编译好的二进制文件, 解压至Maix_Toolbox并重命名为nnc

Maix_Toolbox$ ./get_nncase.sh

关于nncase的使用方法,可以查看其github主页nncase-github

添加测试图片

TFlite模型在转换为K210模型的时候,会对原来的网络结构进行量化quantization, 量化会将原来网络中的浮点运算转化为8比特整数运算,起到压缩模型尺寸与加速的目的。线性激活函数, relu激活函数, relu6激活函数等均可以转换为等价的量化运算。

Maix_Toolbox的根目录下有一个images文件夹,用于存放量化图片数据, 在量化的过程中需要用到。

image_folder.png

注: TFlite也有量化的功能,但是nncase暂不支持此功能。

测试图片必须直接放置在images文件夹中。 图像的名称可以任意,图像尺寸跟训练集的图像尺寸保持一致,可以从训练集的图像样本中选取一些有代表性的,放在images文件夹中。

运行转换脚本

执行Maix_Toolbox中的tflite2kmodel.sh 脚本, 这段脚本可以将tflite模型转换为K210的kmodel模型。

执行这个脚本的时候,后面紧跟tflite模型的路径.

Maix_Toolbox$ ./tflite2kmodel.sh ./workspace/nn_xo.tflite 

这个脚本其实是封装了nncase中的ncc指令,等效为:

./ncc/ncc -i tflite -o k210model --dataset images ./workspace/nn_xo.tflite ./workspace/nn_xo.kmodel
  • -i 指定输入模型的格式为tflite
  • -o 制定输出模型的格式为k210model
  • --dateset 指定量化数据集文件夹为Maix_Toolbox/images
  • ./workspace/nn_xo.tflite 输入模型的路径与名称
  • ./workspace/nn_xo.kmodel 输出模型的路径与名称

下面是转换日志

2019-05-09 02:41:13.477395: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
打印一下转换为KModel的量化结构
0: InputLayer -> 1x1x28x28
1: TensorflowFlatten 1x1x28x28 -> 1x784
2: Quantize 1x784 -> 1x784 量化 浮点数转换为8bit整数
3: K210AddPadding 1x784 -> 1x784x4x4 添加Padding
4: K210Conv2d 1x784x4x4 -> 1x128x4x4 二维卷积层
5: K210Conv2d 1x128x4x4 -> 1x128x4x4 二维卷积层
6: K210Conv2d 1x128x4x4 -> 1x2x4x4 二维卷积层
7: K210RemovePadding 1x2x4x4 -> 1x2 去除Padding
8: Dequantize 1x2 -> 1x2 反量化 8-bit整数转换为浮点数
9: Softmax 1x2 -> 1x2 Softmax激活函数
10: OutputLayer 1x2 输出层
硬件资源占用信息
KPU memory usage: 58368 B 
Main memory usage: 6272 B

转换完成之后,工作区的文件夹中就多了个一个.kmodel 文件。

Maix_Toolbox$ ls workspace/
nn_xo.kmodel  nn_xo.pb  nn_xo.tflite

拓展阅读

如果你对神经网络的量化技术感兴趣的话,可以阅读相关论文/博客。

8-Bit Quantization and TensorFlow Lite: Speeding up mobile inference with low precision

Quantization and Training of Neural Networks for EfficientInteger-Arithmetic-Only Inference

A Survey on Methods and Theories of Quantized Neural Network

Quantized Neural Networks: Training Neural Networks withLow Precision Weights and Activations

Pete Warden's blog 系列博客

Why are Eight Bits Enough for Deep Neural Networks?

How to Quantize Neural Networks with TensorFlow

What I’ve learned about neural network quantization