- pytorch转kmodel(已完成)
- K210加载kmodel文件(未完成)
目录
2. K210加载kmodel文件(未完成,表示以下步骤可能存在思路上的问题)
1. pytorch转kmodel
曾经看网上各种博客,一直在尝试.pth->.onnx->.pb->.tflite->.kmodel的过程,但是卡在了.onnx->.pb很久,转出来的.pb是一个文件夹的形式,虽然可以用tf加载,但是输出结果完全不对。后参考了技术博客丨我用深度学习做个视觉AI微型处理器! | 机器之心这篇博客,了解到nncase工具提供了.onnx -> .kmodel的转换。如下:
- 下载nncase.whl,我下的1.9版本,因为官方提出2.0后不再支持k210和k510。然后本地安装nncase库:
pip install yournncase.whl(本地路径)
-
测试导入nncase包的时候可能会遇到一个问题,具体是什么复现不出来了,如果出现问题可以在这里找到解答。
-
pytorch转onnx:
import torch import torch.onnx from model import yourmodel def pth_to_onnx(input, checkpoint, onnx_path, input_names=['input'], output_names=['output']): model = yourmodel() model.load_state_dict(torch.load(checkpoint)) model.eval() torch.onnx.export(model, input, onnx_path, verbose=True, input_names=input_names, output_names=output_names, opset_version=11) if __name__ == '__main__': checkpoint = './test.pth' onnx_path = './test.onnx' input = torch.randn(1, 3, 256, 256) # 这里用的是自己的模型,数据需要根据自己的模型进行更改。 pth_to_onnx(input, checkpoint, onnx_path)
以上转kmodel就结束了,第三步会出现算子不支持的情况,比如转置卷积,instanceNorm等,需要提前看一下,改一下模型,具体支持哪些可以看文档.
2. K210加载kmodel文件(未完成,表示以下步骤可能存在思路上的问题)
- 用kflash_gui烧写Maixpy固件到0x00000。
- 用kflash_gui烧写kmodel文件到0x800000,使用Maixpy IDE加载模型:
# 我直接拿的yolov2的例程该的 # 然后加载报错 import sensor,image,lcd,time import KPU as kpu lcd.init(type=2) # 初始化显示屏,如果颜色反色了,设置type=2 lcd.rotation(2) # 设置 LCD 显示旋转, 取值范围:[0,3] sensor.reset() # 初始化摄像头 sensor.set_pixformat(sensor.RGB565) # 设置图像格式为RGB565 sensor.set_framesize(sensor.QVGA) # 设置图像分辨率为 320x240 #sensor.set_vflip(1) #flip camera; maix go use sensor.set_hmirror(0) sensor.set_hmirror(1) # 设置左右镜像 sensor.set_vflip(1) # 设置上下翻转 sensor.run(1) # 摄像头开始运行,也可以不调用,参数设置好后会自动运行 clock = time.clock() # classes = ['aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat', 'chair', 'cow', 'diningtable', 'dog', 'horse', 'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor'] task = kpu.load(0x800000)
剩下的继续慢慢摸,想法是想把自己的模型部署在k210上。