目录

RK3588芯片NPU的使用:Windows11 Docker中运行MobileNet模型以及部署到开发板进行目标检测

本文的目标

本文将在RKNN Docker环境(见本系列的第二篇文章)中练习MobileNet图像分类示例,并通过adb工具部署到RK3588开发板。

MobileNet简介请参考上一篇文章。

开发环境说明

  • 主机系统:Windows11
  • 目标设备:搭载RK3588芯片的安卓开发板
  • 核心工具:包含rknn-toolkit2、rknn_model_zoo等工具的Docker镜像、ADB调试工具

启动RKNN Docker环境

bash 复制代码
# 使用 docker run 命令创建并运行 RKNN Toolkit2 容器
# 并通过附加 -v <host src folder>:<image dst folder> 参数,将本地文件映射进容器中
docker run -t -i --privileged -v /dev/bus/usb:/dev/bus/usb -v D:\rknn\rknn_model_zoo-v2.3.0:/rknn_model_zoo rknn-toolkit2:2.3.0-cp38 /bin/bash

介绍一下mobilenet目录结构

Docker启动后,来到rknn_model_zoo中mobilenet的示例目录

bash 复制代码
cd /rknn_model_zoo/examples/mobilenet/

目录结构如下:

bash 复制代码
├── rknn_model_zoo/examples/mobilenet
│ ├── cpp # Cpp项目例子,部署会用到
│ ├── model # 模型目录
│ │ ├── bell.jpg # 例子中用到的待检测图片
│ │ ├── download_model.sh # 下载模型脚本
│ │ └── synset.txt #  ImageNet类别标签文件
│ └── python # Python工具链
|   └── mobilenet.py # 核心工具脚本

MobileNet 工具脚本说明

mobilenet.py 用于在 RKNN(Rockchip Neural Network)平台上部署 MobileNetV2 模型的工具脚本,支持模型转换、性能评估和推理测试。

整体流程


核心功能

1.模型下载与准备

自动下载 ONNX 模型 若检测到本地无模型文件(mobilenetv2-12.onnx),会从云端下载并显示实时进度条和下载速度。

python 复制代码
def check_and_download_origin_model():

2. RKNN 模型转换

配置预处理参数 标准化参数适配 ImageNet 数据集(均值/方差)。

python 复制代码
rknn.config(mean_values=[[...]], std_values=[[...]], target_platform=args.target)

模型加载与量化 支持 ONNX 模型转换,可选择 INT8/UINT8/FP32 量化。

python 复制代码
rknn.load_onnx(model=args.model, ...)
rknn.build(do_quantization=do_quant, ...)

3. 推理与评估

性能测试 支持耗时评估(--eval_perf)和内存占用分析(--eval_memory)。

python 复制代码
rknn.eval_perf()
rknn.eval_memory()

分类推理 输入图像预处理 → 推理 → 输出 Top-5 分类结果。

python 复制代码
outputs = rknn.inference(inputs=[img])
scores = softmax(outputs[0])

4. 跨平台支持

多设备兼容 通过 --target 参数指定 RKNPU 平台(如 rk3588、rk1808)。

python 复制代码
RKNPU1_TARGET = ['rk1808', 'rv1109', 'rv1126']

命令行参数说明

参数 默认值 可选值 说明
--target rk3566 rk3566/rk1808/rv1109/rv1126 指定NPU芯片型号,不同平台支持的量化类型不同
--dtype i8 i8(INT8)/fp32(浮点)/u8(UINT8) RKNPU2平台推荐使用i8,RKNPU1平台需用u8
--eval_perf False True/False 启用后会输出各层耗时分析报告
--accuracy_analysis False True/False 需要连接实机设备才能运行

使用示例

bash 复制代码
# 在RK3566平台上进行INT8量化性能测试
python mobilenet.py --target rk3566 --dtype i8 --eval_perf

使用mobilenet.py对模型进行转换并使用模拟器推理

bash 复制代码
rknn_model_zoo/examples/mobilenet/python
python mobilenet.py --model ../model/mobilenetv2-12.onnx --target rk3588

执行流程:参数解析 → 模型下载 → 跨平台构建 → 多模式推理 → 结果分析

执行流程图:

运行结果如下:

bash 复制代码
--> Download ../model/mobilenetv2-12.onnx
0.00%   [--------------------------------------------------] Speed: 0.00 KB/s
100.02% [##################################################] Speed: 61.72 KB/s
done
I rknn-toolkit2 version: 2.3.0
--> Config model
done
--> Loading model
W load_onnx: If you don't need to crop the model, don't set 'inputs'/'input_size_list'/'outputs'!
I Loading : 100%|██████████████████████████████████████████████| 177/177 [00:00<00:00, 51774.31it/s]
done
--> Building model
I OpFusing 0: 100%|█████████████████████████████████████████████| 100/100 [00:00<00:00, 5654.91it/s]
I OpFusing 2 : 100%|█████████████████████████████████████████████| 100/100 [00:00<00:00, 405.05it/s]
W build: found outlier value, this may affect quantization accuracy
                        const nameabs_mean    abs_std     outlier value
                        478      0.89        1.59        -15.073
                        550      0.61        0.68        11.299
                        577      0.64        0.65        -9.877
                        604      0.60        0.55        -9.970
I GraphPreparing : 100%|███████████████████████████████████████| 100/100 [00:00<00:00, 20185.30it/s]
I Quantizating : 100%|████████████████████████████████████████████| 100/100 [00:01<00:00, 90.17it/s]
W build: The default input dtype of 'input' is changed from 'float32' to 'int8' in rknn model for performance!
                       Please take care of this change when deploy rknn model with Runtime API!
W build: The default output dtype of 'output' is changed from 'float32' to 'int8' in rknn model for performance!
                      Please take care of this change when deploy rknn model with Runtime API!
I rknn building ...
I rknn building done.
done
--> Export rknn model
done
--> Init runtime environment
I Target is None, use simulator!
done
--> Running model
W inference: The 'data_format' is not set, and its default value is 'nhwc'!
I GraphPreparing : 100%|███████████████████████████████████████| 102/102 [00:00<00:00, 20605.87it/s]
I SessionPreparing : 100%|██████████████████████████████████████| 102/102 [00:00<00:00, 2492.67it/s]
--> PostProcess
-----TOP 5-----
[494] score=0.98 class="n03017168 chime, bell, gong"
[653] score=0.01 class="n03764736 milk can"
[469] score=0.00 class="n02939185 caldron, cauldron"
[505] score=0.00 class="n03063689 coffeepot"
[463] score=0.00 class="n02909870 bucket, pail"
done

使用mobilenet.py对模型进行连板运行

bash 复制代码
python mobilenet.py --target rk3588 --npu_device_test

C语言项目开发板端部署

编译

bash 复制代码
./build-android.sh -t rk3588 -a arm64-v8a -d mobilenet

运行结果:

bash 复制代码
./build-android.sh -t rk3588 -a arm64-v8a -d mobilenet
===================================
BUILD_DEMO_NAME=mobilenet
BUILD_DEMO_PATH=examples/mobilenet/cpp
TARGET_SOC=rk3588
TARGET_ARCH=arm64-v8a
BUILD_TYPE=Release
ENABLE_ASAN=OFF
DISABLE_RGA=
INSTALL_DIR=/rknn_model_zoo/install/rk3588_android_arm64-v8a/rknn_mobilenet_demo
BUILD_DIR=/rknn_model_zoo/build/build_rknn_mobilenet_demo_rk3588_android_arm64-v8a_Release
ANDROID_NDK_PATH=/rknn_model_zoo/android-ndk-r19c
===================================
-- Android: Targeting API '23' with architecture 'arm64', ABI 'arm64-v8a', and processor 'aarch64'
[100%] Built target imagedrawing
Install the project...
-- Install configuration: "Release"
-- Installing: /rknn_model_zoo/install/rk3588_android_arm64-v8a/rknn_mobilenet_demo/./rknn_mobilenet_demo
-- Installing: /rknn_model_zoo/install/rk3588_android_arm64-v8a/rknn_mobilenet_demo/model/bell.jpg
-- Installing: /rknn_model_zoo/install/rk3588_android_arm64-v8a/rknn_mobilenet_demo/model/synset.txt
-- Installing: /rknn_model_zoo/install/rk3588_android_arm64-v8a/rknn_mobilenet_demo/model/mobilenet_v2.rknn
-- Installing: /rknn_model_zoo/install/rk3588_android_arm64-v8a/rknn_mobilenet_demo/lib/librknnrt.so
-- Installing: /rknn_model_zoo/install/rk3588_android_arm64-v8a/rknn_mobilenet_demo/lib/librga.so

推送到开发板

bash 复制代码
# 切换到 root 用户权限
adb root

adb push install/rk3588_android_arm64-v8a/rknn_mobilenet_demo /data/rknn-test

开发板上运行demo

bash 复制代码
adb shell
# 进入开发板中rknn_yolov5_demo目录
cd /data/rknn-test/rknn_mobilenet_demo/
# 设置依赖库环境
export LD_LIBRARY_PATH=./lib
# 运行可执行文件
 ./rknn_mobilenet_demo model/mobilenet_v2.rknn model/bell.jpg

运行结果如下:

bash 复制代码
/rknn_mobilenet_demo model/mobilenet_v2.rknn model/bell.jpg                                                                                               <
num_lines=1001
model input num: 1, output num: 1
input tensors:
  index=0, name=input, n_dims=4, dims=[1, 224, 224, 3], n_elems=150528, size=150528, fmt=NHWC, type=INT8, qnt_type=AFFINE, zp=-14, scale=0.018658
output tensors:
  index=0, name=output, n_dims=2, dims=[1, 1000, 0, 0], n_elems=1000, size=1000, fmt=UNDEFINED, type=INT8, qnt_type=AFFINE, zp=-55, scale=0.141923
model is NHWC input fmt
model input height=224, width=224, channel=3
origin size=500x333 crop size=496x320
input image: 500 x 333, subsampling: 4:4:4, colorspace: YCbCr, orientation: 1
src width is not 4/16-aligned, convert image use cpu
finish
rknn_run
[494] score=0.990035 class=n03017168 chime, bell, gong
[469] score=0.003907 class=n02939185 caldron, cauldron
[653] score=0.001089 class=n03764736 milk can

小结

本文将mobilenet模型样例在安卓系统的RK3588开发板进行了模型转换和部署,距离端到端部署还差着最后一公里,敬请期待。

本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
元气满满的热码式3 小时前
K8S节点出现Evicted状态“被驱逐”
云原生·容器·kubernetes
塔克拉玛攻城狮4 小时前
一文详解银河麒麟配置容器运行时及gVisor(runsc)、Kata(runv)详细指南
docker·kubernetes·containerd·银河麒麟
一个小坑货4 小时前
Docker 部署 Redis 缓存服务
redis·缓存·docker
一个小坑货5 小时前
Docker 部署 MySQL 数据库
数据库·mysql·docker
Majimay5 小时前
云服务器存储空间不足导致的docker image运行失败或Not enough space in /var/cache/apt/archives
运维·服务器·docker
安步当歌5 小时前
【目标检测】对YOLO系列发展的简单理解
图像处理·yolo·目标检测·计算机视觉
Waitccy7 小时前
K8s:概念、特点、核心组件与简单应用
云原生·容器·kubernetes
咸鱼睡不醒_9 小时前
CentOS7系统安装Docker教程
运维·docker·容器
Java后端何哥9 小时前
Docker 镜像、容器和 Docker Compose的区别
docker·容器·docker镜像·dockercompose
Yang三少喜欢撸铁10 小时前
【通过Docker快速部署Tomcat9.0】
linux·运维·服务器·docker·容器·tomcat