嘉楠k210方案模型移植的简单梳理

前言

k210是一个面向AIOT应用的低功耗,低成本芯片方案。 它目前支持的深度学习模型类型有tensorflow tflite, caffe1.0以及onnx。 值得注意的是,这3个模型类型所支持的算子有限,这会导致复杂些模型不能在k210上运行。k210另外一个缺点是,它内置了SRAM, 给ai模型的内存大小只有2MB,也就是说它只能支持2MB以内的模型。

移植流程

由于我们项目的模型是yolov3 tiny,而且做了裁剪只有4MB左右大小。再去做8bit量化后只有1MB大小,所以是可以在k210上运行起来的。

1)darknet模型转换到tensorflow框架。

 由于我们模型是采用darknet框架训练的,所以第一步需要将darknet模型转成tensorflow。 

这里可以参考这个链接:https://github.com/jinyu121/DW2TF.git

最终的转换结果如下所示:

2)由于k210的编译器只支持tensorflow的pb模型输入,所以第二步要将tensorflow的ckpt模型转换成pb

注意,第一步的pb实际上还是模型配置文件,里面没有weights值。

具体ckpt2pb.py的脚本实现可以自行上网解决。

3)用tensorflow自带的toco命令将pb模型转换成tflite轻量级模型。

其实这里并没有做8bit量化,因为后面使用k210的nncase工具可以来完成该量化 。所以这个tflite模型实际上还是float32模型。

4)到这一步,就终于可以用k210工具nncase来讲tflite模型转换成kmodel(回忆下前面,nncase只支持tflite,caffe或onnx)。

nncase的链接如右所示:https://github.com/kendryte/nncase.git

不过该开源代码不容易编译成功,可以直接去下载编译好的可执行文件,如下所示(我的平台为win10 64bit):

嘉楠k210方案模型移植的简单梳理_第1张图片

nncase解压并配置成功后,就可以在CMD窗口输入如下编译命令:

ncc.exe compile ./model/yolov3-tiny_xxx.tflite ./model/yolov3-tiny_xxx.kmodel -i

tflite -o kmodel --dataset ./dataset/

注意下,上面的--dataset参数,它是指8bit量化时所需要的的参考图像,一般准备500张经典场景训练样本图片。

生成kmodel后,先不要急着去到板子上面运行,可以先跑下仿真命令来得到最后一个conv层的输出。

ncc.exe infer ./model/yolov3-tiny_xxx.kmodel ./result --dataset ./testset

为了验证最后一个仿真层的输出是否正常,可以将该输出值灌到yolo层看看最终输出的检测结果是否正常。

结论 

这个只是简单的k210模型移植流程简单介绍。kmodel正确生成还只是一个好的开始,还需要结合软件运行到板上。 这里面细节也比较多,后续有机会再介绍。

 

你可能感兴趣的:(嵌入式AI)