模型转换中的一些心得
k210现在支持的主流模型是kmodel,在rtos下也可以使用tflite,之前的版本使用的是一个叫model compiler的转换工具,通过它转换成c语言,在maix的c语言人脸识别demo中使用过,我找了好久这个工具,终于找到了github网址,却显示404,勘智官方已经放弃,估计现在主推应该是kmodel。
kmodel可以通过堪智的nncase工具转换https://github.com/kendryte/nncase,maix在其上做了改进https://github.com/sipeed/Maix_Toolbox
说一下官方的nncase,如果是使用的micropython最好使用0.1.0rc5版本,0.2的版本会出现一些错误,而maix推出的也是在0.1.0rc5版本上进行了封装。
如果你想在k210上运行神经网络,你需要kmodel格式的模型,但是这样的模型怎么获取呢?
现在主流架构tensorflow和pytorch都不是这种模型,nncase的作用就是如何把其他模型转换成kmodel,在其github简介上说明了其支持的模型转换,最新的0.2版本支持TFLite ,Caffe ,ONNX 三种格式转换,但这并不以为这三种格式都可以转换成kmodel,还需要满足k210支持的算子,具体的算子可以在github上找到简介,如果说你的模型不是以上三种怎么办?miax提供了其他格式转换从tflite的工具

图中可以看出,其以tflite为转入点,可以将tensorflow的pb文件转换成kmodel。当然如果你使用其他框架只要可以转换从pb也是可以的,本人使用的是darknet获取到的是weights和cfg文件,通过darkflow转换成pb也是可以的,所以这个时候要考虑的就是是否支持tflite算子问题,我选用的是yolo2tiny,主要算子是卷积,池化,激活函数,基本满足tflite的支持。
关于模型转换是否影响精度,我从网上看到大部分或多或少都是会有一些影响的。