在Milk-V Duo上部署MobileNetV2

Milk-V Duo 是一款基于CV1800B芯片的RISC-V架构开发板,它可以运行 Linux 和 RTOS,适用于嵌入式系统和物联网设备的开发。其中,CV1800B 是一款高性能、低功耗芯片,适用于住宅消费监控 IP 摄像机、家庭智能等众多产品。它提供丰富的教程和资料,支持多种操作系统,具有活跃的社区支持,并且接口丰富,易于上手。该开发板可用于教育和研究,尤其在计算机体系结构、嵌入式系统设计、硬件原型制作等方面。

一、启动 Duo

1、准备一个大于1GB的microSD和一根Type-C 数据线

2、下载镜像和工具从官方镜像和SDK下载系统镜像,下载Flash工具 balenaEtcher。使用读卡器将SD卡插到电脑上,打开balenaEtcher,按照界面提示进行烧录。

3、将Milk-V Duo 通过Type-C数据线与电脑进行连接;想要通过数据线来连接Milk-V Duo 开发板可以采用RNDIS的方式,需要先安装RNDIS驱动,如果打开设备管理器有一个RNDIS设备,但是会有一个警告标致,请参考Milk -v 开发板烧录系统以及ssh连接_milkv-CSDN博客解决连接问题。

4、如果SDK烧录成功,Duo上的蓝色LED灯将会闪烁。

二、配置Docker开发环境

 MilkV Duo的开发板的模型转换环境需要在docker中运行,这样可以避免无意中篡改了主机的系统环境变量。Docker是一个用于创建、部署和运行应用程序的轻量级容器化平台,允许开发者将应用及其依赖打包成一个可在任何环境中一致运行的容器。

1.、在 Windows 下运行 Docker 需要相关依赖,即如图中所示,需要使用 WSL2 (WSL2是Windows Subsystem for Linux的升级版,它通过虚拟化技术在Windows 10及更高版本上高效地运行Linux环境,提供近乎原生的性能和系统调用兼容性,极大地方便了需要在Windows系统中使用Linux工具和应用程序的开发者)后端或者 Hyper-V 后端作为运行依赖,我配置的是WSL2 后端。具体安装过程参考

十七、WSL2的安装与使用(Win11)_win11 wsl2-CSDN博客

2.、在 windows 环境下,可以安装 Docker Desktop for Windows,Docker 下载地址

 安装完成后,需要重启电脑,然后即可使用 Docker,如果出现以下问题:

可以参考 win11启动docker desktop报错 docker desktop unexpected wsl error_win 11 docker desktop windows containers not suppo-CSDN博客

3、然后,拉取开发所需 Docker 镜像

docker pull sophgo/tpuc_dev:v3.1

4、启动 Docker 容器,在 Windows 终端中执行

docker run --privileged --name <container_name> -v /workspace -it sophgo/tpuc_dev:v3.1

其中,<container_name>为自己定义的容器名,比如叫 DuoTPU

docker run --privileged --name DuoTPU -v /workspace -it sophgo/tpuc_dev:v3.1

5、登陆到 Docker 容器启动容器后会自动登陆到 Docker 窗口的终端界面,如果需要新开窗口,可以在 Windows 终端中用 docker ps 命令查看当前 Docker 容器列表 

docker exec -it f3a060efb1d3 /bin/bash

 用 CONTAINER ID登陆到 Docker 容器中,在 Docker 终端中,检查当前是否为 /workspace
 目录,如果不是,用 cd 命令进入该目录。

 获取开发工具包并添加环境变量

git clone https://github.com/milkv-duo/tpu-mlir.git

在 Docker 终端中,用 source 命令添加环境变量 In the Docker terminal, use the source command to add environment variables 

source ./tpu-mlir/envsetup.sh

三、在 Docker 中准备工作目录 

1、创建并进入 mobilenet_v2 工作目录,注意是与 tpu-mlir 同级的目录

mkdir mobilenet_v2 && cd mobilenet_v2

2、将克隆的 MobileNet-Caffe 目录下的模型文件、 tpu-mlir 工具链目录下的图片文件放入当前目录下

cp MobileNet-Caffe/mobilenet_v2_deploy.prototxt .
cp MobileNet-Caffe/mobilenet_v2.caffemodel .
cp -rf ${TPUC_ROOT}/regression/dataset/ILSVRC2012/ .
cp -rf ${TPUC_ROOT}/regression/image/ .

这里的 ${TPUC_ROOT} 是环境变量,对应 tpu-mlir 目录,是在前面配置 Docker 开发环境中 source ./tpu-mlir/envsetup.sh 这一步加载的
3、创建并进入 work 工作目录,用于存放编译生成的 MLIRcvimodel 等文件

# mkdir work && cd work

四、MobileNet-Caffe 模型转换

1、Caffe 模型转换成 MLIR

模型输入是图片,在转模型之前我们需要了解模型的预处理。如果模型用预处理后的 npz 文件做输入,则不需要考虑预处理。预处理过程用公式表达如下($x$代表输入): $$ y = (x-mean)\times scale $$

本例中的模型是 BGR 输入, mean 和 scale 分别为 103.94,116.78,123.68 和 0.017,0.017,0.017,模型转换命令如下:

model_transform.py \
 --model_name mobilenet_v2 \
 --model_def ../mobilenet_v2_deploy.prototxt \
 --model_data ../mobilenet_v2.caffemodel \
 --input_shapes [[1,3,224,224]] \
 --resize_dims=256,256 \
 --mean 103.94,116.78,123.68 \
 --scale 0.017,0.017,0.017 \
 --pixel_format bgr \
 --test_input ../image/cat.jpg \
 --test_result mobilenet_v2_top_outputs.npz \
 --mlir mobilenet_v2.mlir

运行成功效果示例

 转成 MLIR 模型后,会生成一个 mobilenet_v2.mlir 文件,该文件即为 mlir 模型文件,还会生成一个 mobilenet_v2_in_f32.npz 文件和一个 mobilenet_v2_top_outputs.npz 文件,是后续转模型的输入文件


2、MLIR 转 INT8 模型

生成量化需要的校准表

运行 run_calibration.py 得到校准表,输入数据的数量根据情况准备 100~1000 张左右。 这里用现有的 100 张来自 ILSVRC2012 的图片举例,执行 calibration 命令:

run_calibration.py mobilenet_v2.mlir \
 --dataset ../ILSVRC2012 \
 --input_num 100 \
 -o mobilenet_v2_cali_table

运行成功效果示例

 运行完成后会生成名为 mobilenet_v2_cali_table 的文件, 该文件用于后续编译 INT8 模型的输入文件

3、MLIR 量化成 INT8 非对称 cvimodel

用 model_deploy.py 脚本参数使用 asymmetric 进行非对称量化,将 MLIR 文件转成 INT8 非对称量化模型:

model_deploy.py \
 --mlir mobilenet_v2.mlir \
 --asymmetric \
 --calibration_table mobilenet_v2_cali_table \
 --fuse_preprocess \
 --customization_format BGR_PLANAR \
 --chip cv180x \
 --quantize INT8 \
 --test_input ../image/cat.jpg \
 --model mobilenet_v2_cv1800_int8_asym.cvimodel

 运行成功效果示例

编译完成后, 会生成名为 mobilenet_v2_cv1800_int8_asym.cvimodel 的文件

五、 在 Duo 开发板上进行验证

连接 Duo 开发板、根据前面的教程完成 Duo 开发板与电脑的连接,并使用 mobaxterm 或 Xshell 等工具开启终端操作 Duo 开发板

1、获取 tpu-sdk

在 Docker 终端下切换到 /workspace 目录

cd /workspace

 下载 tpu-sdk(注意区分自己板子是64MB还是256MB)

git clone https://github.com/milkv-duo/tpu-sdk.git

 2、将开发工具包和模型文件拷贝到 Duo 开发板上

在 duo 开发板的终端中,新建文件目录 /mnt/tpu/

mkdir -p /mnt/tpu && cd /mnt/tpu

 在 Docker 的终端中,将 tpu-sdk 和模型文件拷贝到 Duo 开发板上

scp -r /workspace/tpu-sdk root@192.168.42.1:/mnt/tpu/
scp /workspace/mobilenet_v2/work/mobilenet_v2_cv1800_int8_asym.cvimodel root@192.168.42.1:/mnt/tpu/tpu-sdk/

3、设置环境变量 

在 Duo 开发板的终端中,进行环境变量的设置

cd /mnt/tpu/tpu-sdk
source ./envs_tpu_sdk.sh

六、进行图像分类测试,进行图像分类测试

进入 samples 目录

cd samples

查看 cvimodel info

./bin/cvi_sample_model_info ../mobilenet_v2_cv1800_int8_asym.cvimodel

 运行图像分类测试

./bin/cvi_sample_classifier_fused_preprocess \
 ../mobilenet_v2_cv1800_int8_asym.cvimodel \
 ./data/cat.jpg \
 ./data/synset_words.txt

分类成功结果示例

  • 25
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
milk-v duo是一个软件包,其中包含了支持Python所有版本的whl文件,比如milk-0.6.1-cp27-cp27m-win_amd64.whl、milk-0.6.1-cp34-cp34m-win_amd64.whl、milk-0.6.1-cp35-cp35m-win_amd64.whl、milk-0.6.1-cp36-cp36m-win_amd64.whl等等。 该软件包提供了用于处理MILK-V Duo设备的功能。 关于MILK-V Duo设备的GPIO控制,可以进入命令行,输入相关命令进行配置和操作。首先,通过命令"echo 440 > /sys/class/gpio/export"可以在/sys/class/gpio目录下生成gpio440目录,然后配置该IO口为输出状态,命令为"echo out > /sys/class/gpio/gpio440/direction"。要点亮LED,可以使用命令"echo 1 > /sys/class/gpio/gpio440/value",而要熄灭LED,可以使用命令"echo 0 > /sys/class/gpio/gpio440/value"。 根据相关文档,可以得知,默认GPIO相关模块已经编入内核,不需要再执行加载命令。可以在控制台下运行GPIO读写命令,或者在内核态或用户态编写GPIO读写程序,来对GPIO进行输入输出操作。其中,XGPIOC的组号值为416,所以GPIO的编号为440。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [milk-0.6.1 64位](https://download.csdn.net/download/weixin_38898802/10936635)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [2、milk-v duo(CV1800B,C906内核)控制IO,点亮LED](https://blog.csdn.net/GJF712/article/details/130277999)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曲途光未央

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值