基于K210的MNIST手写数字识别

该博客详细介绍了如何在K210平台上实现MNIST手写数字识别。从创建虚拟环境、训练LeNet模型到模型转换(h5->pb->tflite->kmodel),再到模型下载到K210并运行代码,每个步骤都有清晰的操作指南。特别地,提到了模型转换工具NNCase和Maix_Toolbox在转换过程中的使用,以及解决运行时错误的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面

本篇文章主要对https://blog.csdn.net/weixin_44874976/article/details/104487069文章进行适当补充,以方便其他同学更好实现作者mgcsky98的例程。

开始

硬件平台

采用Maixd dock开发板(不同板子主要在固件下载和载入kmodel时选择不同而已)
在sipeed官方有售

开发平台

本文用到的所有程序都是从mgcsky98博主的GitHub下载,在此表示十分感谢。
操作系统:Windows系统
模型训练:tensorflow1.15 CPU版,原文作者使用tensorflow2.1 CPU版以及tensorflow1.15 CPU版
模型转换工具:NNCase v0.2.0 Beta2
模型训练IDE:pycharm
nncase下载地址:链接: Github。需要将下载的ncc.exe复制到相应ncc相应文件夹下即可。

操作步骤

1 配置模型开发环境

打开pytoch使用快捷键alt+F12进入终端
在这里插入图片描述
进入anoconda 使用conda create 命令新建虚拟环境

conda create -n mnist python=3.7

激活虚拟环境

conda activate mnist 

本人建议直接下载python3.7就行,然后使用pip install 命令下载

pip install tensorflow==1.15 keras==2.2.4 imgaug==0.2.6 opencv-python Pillow requests tqdm  sklearn pytest-cov codecov matplotlib

安装完成后设置pycharm为解释器当前虚拟环境(快捷键为Ctrl+Shift+S)
解释器

2 模型建立

在模型的搭建时有一点需要注意,k210的kpu 最好使用1x1、3x3的卷积核,这样效率比较高。因此根据情况在代码中做调整即可,关于一些kpu的新手问题在这边都有提到。
运行lenet_k210.py代码,训练后得到h5模型
在这里插入图片描述

3 模型转换

因为k210单片机并不能识别tensorflow的模型,因此需要转换。
大致的流程是这样的。
h5–>pb–>tflite–>kmodel

3.1 h5->pb

运行h52pb.py
####3.2 2 查看计算图
使用工具箱Maix_Toolbox
进入tf1.15的虚拟环境,并cd到Maix_Toolbox路径下,输入如下指令查看计算图。主要目的是找到计算图的输入与输出,这里输入是conv2d_input, 输出是dense_2/Softmax。

3.3 pb–>tflite

运行命令(一定要在pytorch 的Terminal下运行

./pb2tflite.sh 

根据提示依次输入对应内容即可,最终会自动生成需要的指令,并自动生成tflite文件。
个人建议直接把pb2tflite.sh文件直接做如下修改

echo "This script help you generate cmd to convert *.pb to *.tflite"
echo "Please put your pb into workspace dir"
echo "1. pb file name: (don't include workspace)"
pb_name="mnist_lenet_K210_model.pb"
echo "2. input_arrays name:"
in_name="conv2d_input"
tflite_name=`echo $pb_name | cut -d '.' -f 1`
tflite_name=$tflite_name.tflite
echo "3. output_arrays name:"
out_name="dense_2"
echo "4. input width:"
in_w=32
echo "5. input height:"
in_h=32
echo "6. input channel:"
in_ch=1

这样如果有错误就不用每次都要做一些重复性工作。

3.4 tf->kmodel

首先需要准备训练集并保存到toolbox的images目录下,由于训练时使用的mnist不是图片格式,可以使用dataset2jpg.py代码生成图片。
复制所有图片到toolbox下的images文件夹下。在Terminal中运行以下指令

 ncc\ncc compile workspace/mnist_lenet_K210_model.tflite workspace/test1.kmodel -i tflite -o kmodel --dataset images

4 下载模型到k210

使用kflash_gui工具把kmodel模型下载到k210的flash中(注意选好地址本次使用0x300000)
如果maixpy的固件过大,调整地址,避免重叠。本人所购板子为Dock,原作者板子为Maxiduino。
在这里插入图片描述

5 运行代码

打开maixpy IDE,运行mnist1.py即可,注意如果有

Traceback (most recent call last):
  File "<stdin>", line 9, in <module>
ValueError: [MAIXPY]kpu: load error:2002, ERR_KMODEL_VERSION: only support kmodel V3
MicroPython v0.6.2-46-geafab8cfd on 2021-04-14; Sipeed_M1 with kendryte-k210
Type "help()" for more information.
>>> 

报错,需要更新固件,博文介绍的比较详细,大家可以参考一下

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值