10. 源码级应用开发
注:
- 本章节使用SDK1.1.0版本和nncase2.4.0版本实现,后续更改请参考: kendryte/K230_training_scripts (github.com)。
- 开发时需要注意版本对应,k230_sdk版本和nncase版本对应关系参考链接:K230 SDK nncase版本对应关系 — K230 文档 (canaan-creative.com)。
- 相关教学视频,见参考章节链接。
本章节介绍了KTS(k230_training_scripts)工具的使用方法和模型上板部署过程。KTS提供了分类、检测、翻译、关键词唤醒共四个任务从训练到部署的源码,覆盖cv、nlp、语音等多个模态。用户对源码可见,感兴趣的用户可以对源码进行修改,实现更换数据集、更换模型等部分。本工具适合对深度学习的不同模态的任务有比较成熟的了解,并希望使用k230开发板完成部署的用户。
10.1 使用KTS实现图像分类任务
k230_training_scripts(KTS)提供了源码级的详细的k230开发案例,覆盖cv、nlp和audio相关的AI任务。KTS的github地址:kendryte/K230_training_scripts (github.com)。KTS相比于上面的两个工具更为灵活,对用户的代码能力要求也更高,用户可以自行修改配置对应步骤,用户可以更换模型,调整参数,从源码实现k230应用的快速开发和部署。
使用KTS进行AI开发需要实现环境搭建、数据准备、模型训练和测试、CANMV k230镜像编译和烧录、C++代码编译、网络配置和文件传输、k230 端部署等环节。以蔬菜分类场景为例,代码参见:kendryte/K230_training_scripts。
10.1.1 环境搭建
(1)Linux系统;
(2)安装显卡驱动;
(3)安装Anaconda,用于创建模型训练环境;
(4)安装Docker,用于创建SDK镜像编译环境;
(5)安装dotnet SDK;
10.1.2 数据准备
图像分类任务自定义数据集按照如下图格式组织:

注意:图像分类必须按照上述格式进行组织。
10.1.3 模型训练和测试
本节内容在训练环境中实现。
10.1.3.1 创建虚拟环境
开启命令终端:
conda create -n myenv python=3.9
conda activate myenv
10.1.3.2 安装python依赖库
按照项目内的requriements.txt安装训练所用的python库,等待安装:
pip install -r requriements.txt
在requriments.txt中会安装模型转换的包nncase和nncase-kpu,nncase 是一个为 AI 加速器设计的神经网络编译器。
编译镜像和使用nncase转换kmodel时请注意版本对应关系,k230_sdk版本和nncase版本对应关系参考下述链接:
K230 SDK nncase版本对应关系 — K230 文档 (canaan-creative.com)
您可以按照对应版本更换nncase和nncase-kpu的版本,比如更换nncase版本为2.7.0:
pip install nncase==2.7.0
pip install nncase-kpu==2.7.0
10.1.3.3 配置训练参数
给出的训练脚本中配置文件yaml/config.yaml设置如下:
dataset:
root_folder: ../data/veg_cls # 分类数据集路径
split: true # 是否重新执行拆分,第一次执行必须为true
train_ratio: 0.7 # 训练集比例
val_ratio: 0.15 # 验证集比例
test_ratio: 0.15 # 测试集比例
train:
device: cuda
txt_path: ../gen # 拆分过程生成的训练集、验证集、测试集txt文件,标签名称文件、校正集文件
image_size: [ 224,224 ] # 分辨率
mean: [ 0.485, 0.456, 0.406 ]
std: [ 0.229, 0.224, 0.225 ]
epochs: 10
batchsize: 8
learningrate: 0.001
save_path: ../checkpoints # 模型保存路径
inference:
mode: image # 推理模式,分为image和video; image模式下可推理单张图片和目录下所有图片,video调用摄像头实现推理
inference_model: best # 分为best和last,分别调用checkpoints下的best.pth和last.pth进行推理
images_path: ../data/veg_cls/bocai # 如果该路径为图片路径,则进行单张图片推理;如果该路径为目录,则对目录下所有图片进行推理
deploy:
chip: k230 # 芯片类型,分为“k230”和“cpu”两种
ptq_option: 0 # 量化类型,0为uint8,1,2,3,4为uint16的不同形式
10.1.3.4 模型训练
进入到工程的scripts目录,执行训练代码:
python3 main.py
如果训练成功,在配置文件的model_save_dir目录下可以找到训练好的last.pth、best.pth、best.onnx、best.kmodel。
10.1.3.5 模型测试
设置配置文件中的inference部分,设置测试配置,执行测试代码:
python3 inference.py
10.1.3.6 准备文件
后面部署步骤需要用到的文件包括:
(1)checkpoints/best.kmodel;
(2)gen/labels.txt;
(3)待测试图片test.jpg;
10.1.4 K230_SDK镜像编译和烧录
编译镜像和使用nncase转换kmodel时请注意版本对应关系,k230_sdk版本和nncase版本对应关系参考下述链接:
K230 SDK nncase版本对应关系 — K230 文档 (canaan-creative.com)
如果您选择使用嘉楠开发者社区 (canaan-creative.com)资料下载->K230->Images部分提供的镜像,请您注意版本对应关系下载烧录。
10.1.4.1 Docker环境搭建
# 下载docker编译镜像
docker pull ghcr.io/kendryte/k230_sdk
# 可以使用以下命令确认docker镜像是否拉取成功
docker images | grep ghcr.io/kendryte/k230_sdk
# 下载sdk源码
git clone https://github.com/kendryte/k230_sdk.git
cd k230_sdk
# 下载工具链Linux和RT-Smart toolchain, buildroot package, AI package等
make prepare_sourcecode
# 创建docker容器,$(pwd):$(pwd)表示系统当前目录映射到docker容器内部的相同目录下,将系统下的工具链目录映射到docker容器内部的/opt/toolchain目录下
docker run -u root -it -v $(pwd):$(pwd) -v $(pwd)/toolchain:/opt/toolchain -w $(pwd) ghcr.io/kendryte/k230_sdk /bin/bash