关于K210的摸索历程(pytorch->kmodel并在k210部署)

  1. pytorch转kmodel(已完成)
  2. K210加载kmodel文件(未完成)

目录

1. pytorch转kmodel

2. K210加载kmodel文件(未完成,表示以下步骤可能存在思路上的问题)


1. pytorch转kmodel

        曾经看网上各种博客,一直在尝试.pth->.onnx->.pb->.tflite->.kmodel的过程,但是卡在了.onnx->.pb很久,转出来的.pb是一个文件夹的形式,虽然可以用tf加载,但是输出结果完全不对。后参考了技术博客丨我用深度学习做个视觉AI微型处理器! | 机器之心这篇博客,了解到nncase工具提供了.onnx -> .kmodel的转换。如下:

  1. 下载nncase.whl,我下的1.9版本,因为官方提出2.0后不再支持k210和k510。然后本地安装nncase库:
    pip install yournncase.whl(本地路径)
  2. 测试导入nncase包的时候可能会遇到一个问题,具体是什么复现不出来了,如果出现问题可以在这里找到解答。

  3. 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文件(未完成,表示以下步骤可能存在思路上的问题)

  1. 用kflash_gui烧写Maixpy固件到0x00000。
  2. 用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上。 

  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值