跳到主要内容

9. 使用AI Cube开发

注:

本章节以图像分类和目标检测为例,详细地介绍了AI Cube工具在Ubuntu平台和Windows平台的使用方法,并将任务在K230开发板上部署运行的过程。AI Cube是一款离线训练工具,适合具有计算资源,追求数据安全性,但不关注底层训练代码的用户使用。

9.1 使用AI Cube实现图像分类任务

9.1.1 软件安装

AI Cube是嘉楠为开发者提供的离线开发工具,该平台保证了数据安全性,实现可视化的本地训练。该平台支持图像分类、目标检测、语义分割、OCR检测、OCR识别、度量学习、多标签分类、异常检测共8个任务。

现在以使用Ubuntu版本AI Cube实现蔬菜分类并在CanMV-K230上部署为例,介绍利用AI Cube快速开发的流程。请准备一台带有界面的ubuntu系统PC,安装cuda驱动。

首先,在嘉楠开发者社区 (canaan-creative.com)的资料下载页面,选择Tools,下载Linux版本AI Cube,推荐使用V1.2版本。

下载AI Cube_V1.2_Linux

在安装包下载目录解压安装包:

unzip AI_Cube_for_Linux_v1.2.zip

解压后,内部目录如下图所示:

AI Cube 目录

打开一个新的Terminal,先按如下步骤安装dotnet sdk 7.0,如果您的计算机已安装dotnet sdk 7.0,请跳过此步骤。

wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
dpkg -i packages-microsoft-prod.deb
apt update
apt install -y apt-transport-https
apt install -y dotnet-sdk-7.0

在Terminal进入解压目录,启动AI Cube:

./run.sh

9.1.2 功能页介绍

AI Cube包含5个功能页,“项目”页面主要实现项目管理功能,展示当前项目和最近项目;“图像”页面展示当前项目的数据集信息,便于用户查看数据集的图片;“拆分”页面展示拆分信息,统计拆分类别和不同拆分集的图片;“训练”页面实现训练参数配置,训练信息和训练曲线的显示;“评估”页面实现模型评估和评估信息的展示,并且可以配置部署必要参数生成部署包。

“项目”页面图示:

项目页面

“图像”页面图示:

图像页面

“拆分”页面图示:

拆分页面

“训练”页面图示:

训练页面

“评估”页面图示:

评估页面

9.1.3 创建数据集

按照不同任务的数据集格式组织数据集。对应数据集格式在“项目”页面点击新建项目查看,同时我们提供了不同任务的示例数据集,在AI Cube/example_dataset/目录下,vegetable_cls就是图像分类任务的示例数据集。

关于不同任务的示例数据集,对应关系如下:

数据集名称对应任务说明
vegetable_cls图像分类蔬菜分类场景
insect目标检测昆虫检测场景
Ocular_lesions语义分割眼球病变区域分割场景
dataset_td100OCR检测OCR文字检测场景
ProductionDateOCR识别生产日期识别场景
drink度量学习饮料瓶分类场景
multilabel2000多标签分类自然风光多标签分类场景
bottle异常检测瓶口异常检测场景

您既可以使用我们提供的示例数据集,也可以自己按照对应格式组织您的数据集。下面是蔬菜分类场景的数据集的结构:

蔬菜分类

每个类别一个子目录,子目录内是对应类别的所有图片。

9.1.4 创建项目

进入“项目”页面—>点击“新建项目”按钮—>选择任务类型—>导入数据集—>选择项目的存储路径—>添加项目的名称—>创建项目。

新建项目界面如下图所示:

新建项目

项目新建完成后,会自动跳转到“图像”页面,您可以查看您的数据集详情。进入“拆分“页面,您可以按照自定义比例对数据集进行拆分,并查看拆分集的统计信息。

9.1.5 启动训练

进入“训练”页面,在左侧配置模型、数据增强和训练参数。

常见参数解析:

平台参数名称常用参数定义参数含义解析
模型model不同结构的网络模型,用于实现不同的任务;
Backbonemodel backbone模型中的特征提取部分网络结构,比如检测和分割任务的模型;
是否预训练pretrain是否加载AI Cube提供的预训练模型;
预训练模型语言pretrain languageOCR识别的特定任务参数,选择训练预训练模型的样本语言;
模型大小model sizen、s、m、l、x,同一模型的变体,区别是模型尺寸和输入分辨率,用于平衡准确率和速率;
模型宽度model width宽度越大,参数量越大;
图像尺寸image size模型输入分辨率,单值表示输入为[x,x],双值表示输入为[x,y];
ASPP空洞率ASPP dilation rate语义分割的参数,不同空洞卷积和池化操作的尺度,不同的空洞率进行空洞卷积可以扩大感受野,获得更广阔的的上下文信息;
编码长度embedding length度量学习的特定任务参数,样本被向量化的向量长度;
自动数据增强TrivialAugment无参数单图单次自动数据增强;
其他数据增强方法亮度、对比度、饱和度、色度、锐度增强,翻转,旋转,随机缩放,随机裁剪,透视变换,高斯模糊,直方图均衡化,灰度世界算法,CutOut,Random Erasing,Mask;
学习率learning rate优化算法的参数,每次迭代的调整步长;
迭代轮数epoch一个epoch是神经网络使用全部训练样本训练一次的过程;
训练批大小batchsize每次前向和反向传播使用的样本数量;
优化器optimizer优化网络的时候使用的优化函数,比如SGD、Adam等;
AutoAnchorautoanchor目标检测任务中的锚框自适应;
NMS选项nms option目标检测任务中区别类内和类间的非极大值抑制选项;
置信度阈值confidience threshold用于预测框类别的过滤,低于此阈值的预测框都将被删除;
交并比阈值IOU threshold对多个重叠框进行极大值筛选,计算所有检测框的得分,依次与得分最高的检测框对比,大于此阈值的检测框被删除;OCR检测中的Box阈值类似;
自动混合精度AMP针对不同层采用不同的数据精度,以节省显存并提高计算速度;
指数移动平均EMA平滑方法,防止异常值的影响,权重随时间指数递减;
早停Early Stopping增加模型泛化性和防止过拟合的方法;
预热策略WarmUp操作训练初始阶段的learning rate,使模型更快的收敛;
多尺度训练MST实现对不同尺度的输入图像进行训练,提高检测模型对不同大小物体的检测泛化性;
损失函数loss function用于评估模型预测值和真实值的差距程度,损失越小,模型性能越好;
学习率调度learning rate scheduler学习率调整策略,训练过程中动态的调整学习率以适应梯度下降过程,包括StepLR、CosineAnnealingLR、LinearLR、MultiStepLR等;
损失刷新步长loss refresh step界面Loss曲线绘制频率,以batch为单位;
GPU索引gpu index显卡索引号;

按照不同的任务配置好对应参数后,可以点击“增强样本”按钮查看经过数据增强的部分示例样本;点击“学习率曲线”可以查看不同的学习率策略导致的学习率变化;点击“开始训练”按钮,训练的信息会在右上方面板显示,损失曲线和指标曲线会在中间位置绘制;示例样本的预测结果会在右下面板迭代显示每个epoch的变化。训练时界面如下图:

训练过程

9.1.6 模型测试

进入“评估”页面,选择训练好的模型,然后选择测试方式。测试方式如下:

测试方式说明
测试集测试对拆分得到的测试集进行测试评估,输出测试指标数据;
额外数据测试使用和训练数据集相同格式的带标注数据进行测试,输出测试指标数据;
图像目录测试只选择使用训练的模型和参数对图片目录下的所有无标注样本进行推理,无测试指标;

点击“开始测试”按钮,进行测试,测试结束后,根据评估指标查看您的模型性能;双击测试数据列表的条目可以查看推理结果大图。

9.1.7 模型部署

如果模型的性能符合您的需求,您可以在芯片适配面板配置部署参数,主要是模型的输入分辨率和一些基础参数,点击“部署”按钮生成部署包。

部署包生成

部署包生成后您可以在当前项目的根目录下找到如下文件:

  • deployment_source.zip
  • mp_deployment_source.zip
  • *.kmodel
  • deploy_config.json

项目文件

9.1.8 上板准备

完成4.1.1~4.1.7步骤后,AI Cube的部分结束,现在要将得到的kmodel在CanMV-K230开发板部署。CanMV-K230开发板如下图所示:

CanMV-K230

在进行上板部署前,您需要准备好:

  • CanMV-K230开发板一块;
  • USB-TypeC数据线一条;
  • SD卡一张;
  • 读卡器一个;
  • Hdmi显示器一台,满足1080P;
  • 网线一根,也可不用网络传输,直接使用SD卡拷贝文件;

9.1.8.1 镜像烧录

首先在嘉楠开发者社区 (canaan-creative.com)的资料下载页面,选择K230->Images,选择K230_canmv_sdcard_v##_nncase_v###.img.gz,通过查看9.1.7章节得到的deploy_config.json中的”nncase_version”字段选择对应版本的镜像。

注:

k230_sdk版本和nncase版本对应关系请查看链接:

CanMV-K230_SDK_nncase版本对应关系 — K230 CanMV 文档 (canaan-creative.com)

Linux:

在SD卡插到宿主机之前,输入:

ls -l /dev/sd\*

查看当前的存储设备。

将TF卡插入宿主机后,再次输入:

ls -l /dev/sd\*

查看此时的存储设备,新增加的就是TF卡设备节点。

假设/dev/sdc就是TF卡设备节点,执行如下命令烧录TF卡:

sudo dd if=sysimage-sdcard.img of=/dev/sdc bs=1M oflag=sync

Windows:

Windows下可通过rufus工具对TF卡进行烧录,rufus工具下载地址

1)将SD卡插入PC,然后启动rufus工具,点击工具界面的”选择”按钮,选择待烧写的固件。

rufus-flash-from-file

2)点击“开始”按钮开始烧写,烧写过程有进度条展示,烧写结束后会提示“准备就绪”。

rufus-flash

rufus-sure

rufus-warning

rufus_finish

烧录结束后,将SD卡插入开发板上电启动:

板线连接

显示器连接HDMI连接口,需要使用网络可以连接网口。

9.1.8.2 网络配置

如果您选择离线使用读卡器拷贝文件可以跳过此步骤。

  • 串口工具调试

安装串口调试工具:MobaXterm安装:在https://mobaxterm.mobatek.net/download.html下载安装。

MobaXterm启动后,选择Session–>Serial:

Serial Port选择两个连续的串口,波特率Speed(bps)选择115200。

需要登录的是小核串口,进入后输入root登录;不需要登录的是大核串口,进入后按”q”回车,退出自启人脸识别程序。

双核串口

  • Windows系统PC端网络配置

控制面板->网络和共享中心->更改适配器设置->以太网网卡->右键属性->选中(TCP/IPv4)->属性

配置IP地址、掩码、网关,配置DNS服务器地址:

net_config_0

  • 开发板网络配置

进入小核命令行,执行:

# 查看是否有eth0
ifconfig
# 配置开发板IP,和PC在同一网段下
ifconfig eth0 192.168.1.22
# 查看IP配置
ifconfig

注意:每次断电后都需要重新执行网络配置命令。

9.1.8.3 文件拷贝

  • sharefs目录说明
# 进入小核根目录
cd /
# 查看目录
ls
# sharefs目录是大小核共用目录,因此从小核拷贝到sharefs目录下的文件对大核也可见
  • 离线读卡器拷贝

断电拔出SD卡,是用读卡器从PC拷贝文件至大小核共享目录sharefs下,SD卡默认根目录对应就是sharefs目录,拷贝到此处即可。

  • 本地网络TFTP拷贝

安装tftp通信工具,下载地址:https://bitbucket.org/phjounin/tftpd64/downloads/

启动tftpd64,配置待传输文件存放目录和服务网卡。

net_config_1

# 以下代码在小核串口执行
# 将PC上tftpd64配置文件存放目录中的文件传输至开发板的当前目录
tftp -g -r your_file 192.168.1.2
# 将开发板当前目录下的文件传输至tftpd64配置文件存放目录
tftp -p -r board_file 192.168.1.2
  • scp拷贝

在Linux系统中,PC正常连接网络,开发板可以通过网线连接PC所在网关下其他网口,通过scp命令实现文件传输。

开发板上电,进入大小核COM界面,在小核执行scp传输命令:

# 从PC拷贝文件至开发板
scp 用户名@域名或IP:文件所在目录 开发板目的目录
#拷贝文件夹
scp -r 用户名@域名或IP:文件所在目录 开发板目的目录
# 从开发板拷贝文件至PC
scp 开发板待拷贝目录 用户名@域名或IP:PC目的目录
# 拷贝文件夹
scp -r 开发板待拷贝目录 用户名@域名或IP:PC目的目录
  • 需要拷贝的文件
文件说明
AICube项目目录/*.kmodel项目生成的kmodel
AICube项目目录/deploy_config.json部署配置文件
AI Cube安装目录/on_board/elfs/canmv/main_canmv.elf已编译好的可执行文件
test.jpg静态图测试图片
deployment_source.zip解压后的其他文件比如ocr任务需要拷贝字库Asci0816.zf、HZKf2424.hz,还有对应的字典文件。

对于上述图像分类任务,可以在sharefs目录下新建子文件夹test_cls,需要拷贝:

kmodel文件、main_canmv.elf、选择一张测试样本test.jpg、deploy_config.json文件到test_cls目录下。

9.1.9 上板运行

  • 静态图推理

连接大核串口,执行下述命令:

cd /sharefs/test_cls
# .elf <deploy_config.json> <input_path> <debug_mode>
# deploy_config.json:部署配置文件;
# input_path:推理图片路径,如果是视频流推理,设为None;
# debug_mode:调试模式,0为不调试,1为简单调试,2为详细调试;
./main_canmv.elf deploy_config.json test.jpg 0

静态图推理效果:

静态图推理结果

  • 视频流推理

连接大核串口,执行下述命令:

cd /sharefs/test_cls
# .elf <deploy_config.json> <input_path> <debug_mode>
# deploy_config.json:部署配置文件;
# input_path:推理图片路径,视频流推理设为None;
# debug_mode:调试模式,0为不调试,1为简单调试,2为详细调试;
./main_canmv.elf deploy_config.json None 0

视频流推理效果:

视频流推理结果

9.1.10 MicroPython运行

9.1.10.1 镜像烧录

烧录MicroPython的镜像,在嘉楠开发者社区 (canaan-creative.com)的资料下载页面,点击左侧的K230/Images,选择CanMV-K230_micropython_v##_sdk_v##__nncase_v###.img.gz下载。版本选择请参考deploy_config.json文件中的“nncase_version”字段。并使用9.1.8.1章节的方法进行烧录。

注:

k230_canmv和k230_sdk、nncase的版本对应关系请查看链接:

CanMV-K230_SDK_nncase版本对应关系 — K230 CanMV 文档 (canaan-creative.com)

9.1.10.2 文件拷贝

使用读卡器进行离线拷贝,将kmodel文件、deploy_config.json和测试图片文件拷贝到SD卡中的某一目录中并记下这一目录。

9.1.10.3 安装IDE

安装CanMV IDE,在嘉楠开发者社区 (canaan-creative.com)的资料下载页面,点击左侧的Tools,根据您的系统下载图中CanMV IDE不同版本的安装包安装。

CanMV IDE

9.1.10.4 上电启动

按照下图连接开发板,上电启动:

MicroPython开发连接

启动CanMV IDE,打开文件,选择解压后的mp_deployment_source.zip中的cls_image.py文件,修改下图红框中的文件路径为您自行拷贝的文件路径,进行单图推理:

单图推理

或者打开cls_video.py文件,修改文件路径为您文件拷贝的目录,进行视频推理:

视频推理

当左下角连接状态变为如下图状态时: canmv_ide_connect

点击该按钮连接串口。选择除大小核串口外的第三路串口:

canmv_ide_port 连接后点击绿色三角按钮运行。

单图推理结果如图所示:

单图推理结果

视频推理结果如图所示:

视频推理结果

9.2 使用AI Cube实现目标检测任务

9.2.1 软件安装

使用Windows版本AI Cube完成目标检测任务并在CanMV-K230上部署为例,介绍利用AI Cube快速开发的流程。请准备一台安装Windows系统的PC,安装cuda驱动。

首先安装dotnet sdk 7.0,下载地址:.NET 下载(Linux、macOS 和 Windows) (microsoft.com),请您按照系统下载对应版本安装并添加至环境变量。

dotnet sdk 7.0下载

首先,在嘉楠开发者社区 (canaan-creative.com)的资料下载页面,选择Tools,下载Windows版本AI Cube,推荐使用V1.2版本。

Windows版本AI Cube

下载安装包后解压,解压后目录结构如下:

windows版本AI Cube目录结构

双击AI_Cube.exe启动软件。具体操作可以参考用户指南。example_dataset目录是提供的八类任务的示例数据集;example_projects是提供的八类任务的示例项目;on_board目录内包含CanMV-k230开发板烧录镜像、MicroPython烧录镜像、EVB开发板烧录镜像和在CanMV-k230开发板和EVB开发板的可执行elf文件;canmv_ide-4.0.5.exe是使用MicroPython开发的IED软件。

9.2.2 功能页介绍

AI Cube包含5个功能页,“项目”页面主要实现项目管理功能,展示当前项目和最近项目;“图像”页面展示当前项目的数据集信息,便于用户查看数据集的图片;“拆分”页面展示拆分信息,统计拆分类别和不同拆分集的图片;“训练”页面实现训练参数配置,训练信息和训练曲线的显示;“评估”页面实现模型评估和评估信息的展示,并且可以配置部署必要参数生成部署包。

“项目”页面图示:

项目页面

“图像”页面图示:

图像页面

“拆分”页面图示:

拆分页面

“训练”页面图示:

训练页面

“评估”页面图示:

评估页面

9.2.3 创建数据集

按照不同任务的数据集格式组织数据集。对应数据集格式在“项目”页面点击新建项目查看,同时我们提供了不同任务的示例数据集,在AI Cube/example_dataset/目录下,insect就是目标检测任务的示例数据集。

您既可以使用我们提供的示例数据集,也可以自己按照对应格式组织您的数据集。下面是昆虫检测场景的数据集的结构,格式满足VOC数据集格式:

insect
|---JPEGImages
|---0001.jpg
|---0002.jpg
|---0003.jpg
|---...
|---Annotations
|---0001.xml
|---0002.xml
|---0003.xml
|---...

注意:目标检测数据集也支持YOLO数据格式和CoCo数据格式,具体请参考软件新建项目。

9.2.4 创建项目

进入“项目”页面—>点击“新建项目”按钮—>选择任务类型—>导入数据集—>选择项目的存储路径—>添加项目的名称—>创建项目。

新建项目界面如下图所示:

新建目标检测项目

项目新建完成后,会自动跳转到“图像”页面,您可以查看您的数据集详情。进入“拆分“页面,您可以按照自定义比例对数据集进行拆分,并查看拆分集的统计信息。

9.2.5 启动训练

训练参数说明及其配置见4.1.5章节。

配置好对应参数后,可以点击“增强样本”按钮查看经过数据增强的部分示例样本;点击“学习率曲线”可以查看不同的学习率策略导致的学习率变化;点击“开始训练”按钮,训练的信息会在右上方面板显示,损失曲线和指标曲线会在中间位置绘制;示例样本的预测结果会在右下面板迭代显示每个epoch的变化。训练时界面如下图:

目标检测训练

9.2.6 模型测试

进入“评估”页面,选择训练好的模型,然后选择测试方式。测试方式如下:

测试方式说明
测试集测试对拆分得到的测试集进行测试评估,输出测试指标数据;
额外数据测试使用和训练数据集相同格式的带标注数据进行测试,输出测试指标数据;
图像目录测试只选择使用训练的模型和参数对图片目录下的所有无标注样本进行推理,无测试指标;

点击“开始测试”按钮,进行测试,测试结束后,根据评估指标查看您的模型性能;双击测试数据列表的条目可以查看推理结果大图。

9.2.7 模型部署

如果模型的性能符合您的需求,您可以在芯片适配面板配置部署参数,主要是模型的输入分辨率和一些基础参数,点击“部署”按钮生成部署包。

模型部署

部署包生成后您可以在当前项目的根目录下找到如下文件:

  • deployment_source.zip
  • mp_deployment_source.zip
  • *.kmodel
  • deploy_config.json

准备文件

9.2.8 上板准备

完成4.2.1~4.2.7步骤后,AI Cube的部分结束,现在要将得到的kmodel在CanMV-K230开发板部署。CanMV-K230开发板如下图所示:

CanMV-K230

在进行上板部署前,您需要准备好:

  • CanMV-K230开发板一块;
  • USB-TypeC数据线一条;
  • SD卡一张;
  • 读卡器一个;
  • Hdmi显示器一台,满足1080P;
  • 网线一根,也可不用网络传输,直接使用SD卡拷贝文件;

9.2.8.1 镜像烧录

首先在嘉楠开发者社区 (canaan-creative.com)的资料下载页面,选择K230->Images,选择K230_canmv_sdcard_v##_nncase_v###.img.gz,通过查看9.2.7章节得到的deploy_config.json中的”nncase_version”字段选择对应版本的镜像。

注:

k230_sdk版本和nncase版本对应关系请查看链接:

CanMV-K230_SDK_nncase版本对应关系 — K230 CanMV 文档 (canaan-creative.com)

Linux:

在SD卡插到宿主机之前,输入:

ls -l /dev/sd\*

查看当前的存储设备。

将TF卡插入宿主机后,再次输入:

ls -l /dev/sd\*

查看此时的存储设备,新增加的就是TF卡设备节点。

假设/dev/sdc就是TF卡设备节点,执行如下命令烧录TF卡:

sudo dd if=sysimage-sdcard.img of=/dev/sdc bs=1M oflag=sync

Windows:

Windows下可通过rufus工具对TF卡进行烧录,rufus工具下载地址

1)将SD卡插入PC,然后启动rufus工具,点击工具界面的”选择”按钮,选择待烧写的固件。

rufus-flash-from-file

2)点击“开始”按钮开始烧写,烧写过程有进度条展示,烧写结束后会提示“准备就绪”。

rufus-flash

rufus-sure

rufus-warning

rufus_finish

烧录结束后,将SD卡插入开发板上电启动:

板线连接

显示器连接HDMI连接口,需要使用网络可以连接网口。

9.2.8.2 网络配置

如果您选择离线使用读卡器拷贝文件可以跳过此步骤。

  • 串口工具调试

安装串口调试工具:MobaXterm安装:在https://mobaxterm.mobatek.net/download.html下载安装。

MobaXterm启动后,选择Session–>Serial:

Serial Port选择两个连续的串口,波特率Speed(bps)选择115200。

需要登录的是小核串口,进入后输入root登录;不需要登录的是大核串口,进入后按”q”回车,退出自启人脸识别程序。

双核串口

  • Windows系统PC端网络配置

控制面板->网络和共享中心->更改适配器设置->以太网网卡->右键属性->选中(TCP/IPv4)->属性

配置IP地址、掩码、网关,配置DNS服务器地址:

net_config_0

  • 开发板网络配置

进入小核命令行,执行:

# 查看是否有eth0
ifconfig
# 配置开发板IP,和PC在同一网段下
ifconfig eth0 192.168.1.22
# 查看IP配置
ifconfig

注意:每次断电后都需要重新执行网络配置命令。

9.2.8.3 文件拷贝

  • sharefs目录说明
# 进入小核根目录
cd /
# 查看目录
ls
# sharefs目录是大小核共用目录,因此从小核拷贝到sharefs目录下的文件对大核也可见
  • 离线读卡器拷贝

断电拔出SD卡,是用读卡器从PC拷贝文件至大小核共享目录sharefs下,SD卡默认根目录对应就是sharefs目录,拷贝到此处即可。

  • 本地网络TFTP拷贝

安装tftp通信工具,下载地址:https://bitbucket.org/phjounin/tftpd64/downloads/

启动tftpd64,配置待传输文件存放目录和服务网卡

net_config_1

# 以下代码在小核串口执行
# 将PC上tftpd64配置文件存放目录中的文件传输至开发板的当前目录
tftp -g -r your_file 192.168.1.2
# 将开发板当前目录下的文件传输至tftpd64配置文件存放目录
tftp -p -r board_file 192.168.1.2
  • scp拷贝

在Linux系统中,PC正常连接网络,开发板可以通过网线连接PC所在网关下其他网口,通过scp命令实现文件传输。

开发板上电,进入大小核COM界面,在小核执行scp传输命令:

# 从PC拷贝文件至开发板
scp 用户名@域名或IP:文件所在目录 开发板目的目录
#拷贝文件夹
scp -r 用户名@域名或IP:文件所在目录 开发板目的目录
# 从开发板拷贝文件至PC
scp 开发板待拷贝目录 用户名@域名或IP:PC目的目录
# 拷贝文件夹
scp -r 开发板待拷贝目录 用户名@域名或IP:PC目的目录
  • 需要拷贝的文件
文件说明
AICube项目目录/*.kmodel项目生成的kmodel
AICube项目目录/deploy_config.json部署配置文件
AI Cube安装目录/on_board/elfs/canmv/main_canmv.elf已编译好的可执行文件
test.jpg静态图测试图片
deployment_source.zip解压后的其他文件比如ocr任务需要拷贝字库Asci0816.zf、HZKf2424.hz,还有对应的字典文件。

对于上述图像分类任务,可以在sharefs目录下新建子文件夹test_det,需要拷贝:

kmodel文件、main_canmv.elf、选择一张测试样本test.jpg、deploy_config.json文件到test_det目录下。

如果您想自己修改C++源码进行编译,可以参考:kendryte/k230_sdk: Kendryte K230 SDK (github.com)搭建编译环境,将部署包deployment_source.zip解压后的“canmv/example_code_k230”目录拷贝到“k230_sdk根目录/src/big/nncase”下,并进入到example_code_k230目录,赋予编译脚本权限并进行编译:

chmod +x build_app.sh
./build_app.sh

如果您不想自己编译,可以略过上述编译步骤,直接使用我们提供的elf文件。

9.2.9 上板运行

  • 静态图推理

连接大核串口,执行下述命令:

cd /sharefs/test_det
# .elf <deploy_config.json> <input_path> <debug_mode>
# deploy_config.json:部署配置文件;
# input_path:推理图片路径,如果是视频流推理,设为None;
# debug_mode:调试模式,0为不调试,1为简单调试,2为详细调试;
./main_canmv.elf deploy_config.json test.jpg 0

静态图推理效果:

静态图推理结果

  • 视频流推理

连接大核串口,执行下述命令:

cd /sharefs/test_det
# .elf <deploy_config.json> <input_path> <debug_mode>
# deploy_config.json:部署配置文件;
# input_path:推理图片路径,视频流推理设为None;
# debug_mode:调试模式,0为不调试,1为简单调试,2为详细调试;
./main_canmv.elf deploy_config.json None 0

视频流推理效果:

视频流推理结果

9.2.10 MicroPython运行

9.2.10.1 镜像烧录

烧录MicroPython的镜像,在嘉楠开发者社区 (canaan-creative.com)的资料下载页面,点击左侧的K230/Images,选择CanMV-K230_micropython_v##_sdk_v##__nncase_v###.img.gz下载。版本选择请参考deploy_config.json文件中的“nncase_version”字段。并使用9.2.8.1章节的方法进行烧录。

注:

k230_canmv和k230_sdk、nncase的版本对应关系请查看链接:

CanMV-K230_SDK_nncase版本对应关系 — K230 CanMV 文档 (canaan-creative.com)

9.2.10.2 文件拷贝

使用读卡器进行离线拷贝,将kmodel文件、deploy_config.json和测试图片文件拷贝到SD卡中的某一目录中并记下这一目录。

9.2.10.3 安装IDE

安装CanMV IDE,在嘉楠开发者社区 (canaan-creative.com)的资料下载页面,点击左侧的Tools,根据您的系统下载图中CanMV IDE不同版本的安装包安装。

CanMV IDE

9.2.10.4 上电启动

按照下图连接开发板,上电启动:

MicroPython开发连接

启动CanMV IDE,打开文件,选择解压后的mp_deployment_source.zip中的cls_image.py文件,修改下图红框中的文件路径为您自行拷贝的文件路径,进行单图推理:

单图推理

或者打开cls_video.py文件,修改文件路径为您文件拷贝的目录,进行视频推理:

视频推理

当左下角连接状态变为如下图状态时: canmv_ide_connect

点击该按钮连接串口。选择除大小核串口外的第三路串口:

canmv_ide_port 连接后点击绿色三角按钮运行。

单图推理结果如下:

单图推理结果

视频推理结果:

视频推理结果