Martin_ePwGU9 · 2023年09月21日 · 浙江

【聆思CSK6 视觉AI开发套件试用】csk6简单使用小记

简述

最近申请到一块儿聆思的 CSK6 开发板,这块儿板子好像可以跑一些 AI 算法,索性就拿来玩玩

入门

官方的很多文档写的还是很详细的,我拿到的是 CSK6011, 这里可以看到板子详细的说明, 因为我不是做嵌入式的,此次我主要用来测试一下目标检测 yolo 算法效果跑的怎么样

环境

我这边主要使用的是核显的 win11 本子,所以我的开发环境主要选择 win。折腾多了我现在越来越懒,越来越喜欢开箱即用的环境,环境搭建的官方文档在这里,我也就选了一个最简单方案

  • 安装git, 注意包管理工具的安装的 git 需要手动加入环境变量
  • 下载 CSK6一键安装包 并运行,根据安装引导进行安装
  • lisa info zep 检查环境
  • 编辑器官方

这几个安装完基本就能直接跑

测试

作为非嵌入式的小菜鸡,验证是否会开发的自我安慰项目,电灯实验

这里就简单写一下几个命令

## 选择 hello_world
lisa zep create

cd hello_world
## 这里如果开发板不变的话,可以 lisa zep config build.board csk6011a_nano
## 可以直接执行 lisa zep build
lisa zep build -b csk6011a_nano
lisa zep flash

刷入成功后就看到 D1 等在闪了

结构

HELLO_WORLD
│  CMakeLists.txt
│  prj.conf
│  README.rst
│  sample.yaml
│
├─boards
│      csk6011a_nano.overlay
│
└─src
        main.c

进阶

ok,可以简单研究一下ai算法实际运行情况了

算法

本来我想测试 yolov3 算法,但是量化啥的有点麻烦,我也没有显卡,只能使用官方的 resnet 模型

工程

环境

环境的话我选择直接使用docker,根据官方文档操作

镜像主要是两个

sudo docker pull listenai/linger:1.1.1  #纯cpu版本镜像
sudo docker pull listenai/thinker:2.1.1

运行之后执行以下就可以用了

docker container run -it listenai/linger:1.1.1 /bin/bash
root@66d80f4aaf1e:/linger#sh install.sh

docker container run -it listenai/thinker:2.1.1 /bin/bash
root@2f0688ea7963:/thinker#sh scripts/x86_linux.sh

量化

官方工具量化,我这里没有GPU不考虑精度
使用起来比较简单,核心就几句话

net.train()
train_mode = "quant"
linger.trace_layers(net, net, dummy_input, fuse_bn=True)
normalize_modules = (nn.Conv2d, nn.Linear, nn.BatchNorm2d)
replace_tuple = (nn.Conv2d, nn.BatchNorm2d, nn.Linear)
net = linger.normalize_layers(net, normalize_modules=normalize_modules, normalize_weight_value=8, normalize_bias_value=None, normalize_output_value=8)
net = linger.init(net, quant_modules=replace_tuple, mode=linger.QuantMode.QValue)

这样就可以把模型拿去再训练一下,下面就可以导出了

train_mode = "quant"
# linger.trace_layers(net, net, dummy_input, fuse_bn=True)
replace_tuple = (nn.Conv2d, nn.BatchNorm2d, nn.Linear)
net = linger.init(net, quant_modules=replace_tuple, mode=linger.QuantMode.QValue)
net.load_state_dict(torch.load("./aa_finetune.pth"))

with torch.no_grad():
        out = net(dummy_input)
        torch.onnx.export(net, dummy_input,"aa_quant.onnx",export_params=True,opset_version=11,operator_export_type=torch.onnx.OperatorExportTypes.ONNX_ATEN_FALLBACK)

train_mode是干啥用的,我没看懂

转换

onnx

模型可以直接导出onnx

bin
cd demo/resnet18
tpacker -g resnet18-12-regular.onnx -d True -o model.bin
输入

顺便这里把输入也准备一下,

docker环境没给安装torch, 想执行输入脚本需要自己安装包

首先 https://github.com/LISTENAI/t...resnet28换成resnet18

其次可以在docker安装torch

## 激活docker中的conda环境
source activate root
## 需要的安装一下
pip install torch torchvision
python ./tools/image_preprocess.py

如果在本地环境中使用脚本那就用docker cp进去

docker cp ./demo/resnet18/apple_after_resize.bin thinker:/thinker

测试

所有需要的东西都准备好了,那就测试一下

./bin/test_thinker demo/resnet18/apple_after_resize.bin demo/resnet18/model.bin demo/resnet18/output.bin 3 32 32 6

### 输出
init model successful!
create executor successful!
forward successful!
Predicted category index: 0
Predicted label: apple

移植

所有都好了,那就放到设备上试一下

这块儿文档也比较乱,大概是这个仓库

git clone https://cloud.listenai.com/listenai/wasm/thinker-csk-project.git
cd thinker-csk-project/app_zephyr

编译 wasm npu 应用

首先需要下载 SDK 防止出错所以跟官方一样版本, 需要在 Linux 下编译,我这里使用 docker

docker cp wasi-sdk-17.0-linux.tar.gz thinker:/opt

接下来在 docker 中操作

cd /opt
tar -zxvf wasi-sdk-17.0-linux.tar.gz
export WASI_TOOLCHAIN_PATH=/opt/wasi-sdk-17.0

git clone https://cloud.listenai.com/listenai/wasm/wasm-sdk.git --recursive
export WASM_BASE=/path/to/wasm-sdk

编译方式给的挺简单,我就是编译不成功

例如这个工程

刷入模型等固件

一直在没刷进去,后来官方有更新编译好的固件,索性直接用了,在这里

lisa zep exec cskburn -s COMx -C 6 -b 748800 0x100000 resource/cp.bin
# 这里就是上面那步编译出来的
lisa zep exec cskburn -s COMx -C 6 -b 748800 0x200000 resource/thinker_resnet18.aot
lisa zep exec cskburn -s COMx -C 6 -b 748800 0x300000 resource/resnet18_model.bin

刷入工程

lisa zep build -p -b csk6011a_nano
lisa zep flash -r csk --port COMx

打开工具就会看到

2023-09-14 16:42:59.683 *** Booting Zephyr OS build 6d326a36d5a9  ***
2023-09-14 16:42:59.685 Hello World! csk6011a_nano
2023-09-14 16:42:59.998 Loading WASM app addr: 0x18200008, size: 12637
2023-09-14 16:43:03.468 #0: Alloc video buffer: 614400
2023-09-14 16:43:03.472 #1: Alloc video buffer: 614400
2023-09-14 16:43:03.475 Press BUTTON to start a capture.
2023-09-14 16:43:03.524 Dequeueing...
2023-09-14 16:43:03.556 Processing...
2023-09-14 16:43:03.656 Resizing...
2023-09-14 16:43:05.314 Feature extraction...
2023-09-14 16:43:05.332 Input data to Thinker...
2023-09-14 16:43:05.435 Max probability: 31, index: 99
2023-09-14 16:43:05.436 Predicted label: worm

结尾

整个体验下来就是,流程基本能跑通,但是很多文档比较杂乱无章

模型必须要 QAT, 对于我这种无显卡的人来说太难了

后续有时间可以单独测一下 yolov3 的速度

最近在面试,没空搞...这篇文章也是抽时间水出来的

推荐阅读
关注数
0
文章数
1
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息