RK3576 Android14 rknn_yolov5_demo使用
一、背景
工作中需要测到NPU的VDD电压,然而已知npu做推理的时候vdd_npu电源才会打开,那么想办法让NPU跑起来。RK官方提供的是rknn_yolov5的demo。
二、开发环境
OS:Android14
Platform:RK3576
Linux Version:6.1.99
SDK Version:android-14.0-mid-rkr6
三、介绍
简单捋一捋吧,如下:
NPU:所谓NPU(Neural network Processing Unit), 即神经网络处理器。用电路模拟人类的神经元和突触结构,是一种专门设计用于加速人工智能(AI)和机器学习(ML)任务的处理器。它主要用于处理与神经网络相关的计算,例如深度学习模型的训练和推理。NPU通过优化矩阵运算、卷积运算等神经网络中的核心操作,显著提升了AI任务的执行效率。
Yolo:YOLO(You Only Look Once)是一种one-stage目标检测算法,即仅需要 “看” 一次就可以识别出图片中物体的class类别和边界框。Yolov5是由Alexey Bochkovskiy等人在YOLO系列算法的基础上进行改进和优化而开发的,使其性能与精度都得到了极大的提升。
Yolov5推出了Yolov5s、Yolov5m、Yolov5l、Yolov5x等四个版本的目标检测网络。四个模型的结构基本一致,区别主要在于模型深度depth_multiple和模型宽度width_multiple这两个参数,如下图所示。
RKNN:是 Rockchip npu 平台使用的模型类型,以.rknn
后缀结尾的模型文件。Rockchip 提供了完整了模型转换 Python 工具,方便用户将自主研发的算法模型转换成 RKNN 模型,同时 Rockchip 也提供了C/C++
和Python
API 接口。
RKNN软件栈可以帮助用户快速将AI模型部署到瑞芯微芯片上。总体框架如下:
为了使用RKNPU,用户需要先在计算机上运行RKNN-Toolkit2工具,将训练好的模型转换为RKNN格式的模型,然后使用RKNN C API或Python API在开发板上进行推理。
-
RKNN-Toolkit2 是一款软件开发套件,供用户在 PC 和瑞芯微 NPU 平台上进行模型转换、推理和性能评估。
-
RKNN-Toolkit-Lite2 为瑞芯微 NPU 平台提供 Python 编程接口,帮助用户部署 RKNN 模型,加速 AI 应用的落地。
-
RKNN Runtime为瑞芯微NPU平台提供C/C++编程接口,帮助用户部署RKNN模型,加速AI应用的落地。
-
RKNPU 内核驱动程序负责与 NPU 硬件交互。它已经开源,可以在瑞芯微内核代码中找到。
当然,在下目前在Android平台下作demo测试,直接采用rknpu2项目跑可执行文件的方法即可快速实现。另外其他编译的方式,参考原项目介绍即可:
rknpu2/examples/rknn_yolov5_demo at master · rockchip-linux/rknpu2https://github.com/rockchip-linux/rknpu2/tree/master/examples/rknn_yolov5_demo
四、测试方法
如官方演示一样:
1、编译与构建
根据目标平台,在“build-android_<TARGET_PLATFORM>.sh”上修改 Android NDK 的路径
例如
ANDROID_NDK_PATH=~/opt/tool_chain/android-ndk-r17
然后,运行以下脚本:
./build-android_<TARGET_PLATFORM>.sh
2、将所有构建输出文件推送到板上
adb root
adb remount
adb push install/rknn_yolov5_demo /data/
3、运行
adb shell
cd /data/rknn_yolov5_demo/export LD_LIBRARY_PATH=./lib
./rknn_yolov5_demo model/<TARGET_PLATFORM>/yolov5s-640-640.rknn model/bus.jpg
4、实际演示效果
RK3576:/data/rknn_yolov5_demo_Android # ./rknn_yolov5_demo ./model/RK3576/yolov5s-640-640.rknn ./model/bus.jpg <
post process config: box_conf_threshold = 0.25, nms_threshold = 0.45
Loading mode...
sdk version: 2.3.2 (429f97ae6b@2025-04-09T09:08:16) driver version: 0.9.8
model input num: 1, output num: 3index=0, name=images, n_dims=4, dims=[1, 640, 640, 3], n_elems=1228800, size=1228800, w_stride = 640, size_with_stride=1228800, fmt=NHWC, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922index=0, name=output0, n_dims=4, dims=[1, 255, 80, 80], n_elems=1632000, size=1632000, w_stride = 0, size_with_stride=1638400, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922index=1, name=286, n_dims=4, dims=[1, 255, 40, 40], n_elems=408000, size=408000, w_stride = 0, size_with_stride=491520, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922index=2, name=288, n_dims=4, dims=[1, 255, 20, 20], n_elems=102000, size=102000, w_stride = 0, size_with_stride=163840, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922
model is NHWC input fmt
model input height=640, width=640, channel=3
Read ./model/bus.jpg ...
img width = 640, img height = 640
once run use 28.806000 ms
loadLabelName ./model/coco_80_labels_list.txt
person @ (209 243 286 510) 0.879723
person @ (479 238 560 526) 0.870588
person @ (109 237 232 534) 0.828112
bus @ (93 129 553 464) 0.700761
person @ (79 353 122 517) 0.307297
save detect result to ./out.jpg
i: 0
i: 1
i: 2
i: 3
i: 4
i: 5
i: 6
i: 7
i: 8
i: 9
i: 10
i: 11
i: 12
i: 13
i: 14
i: 15
i: 16
i: 17
i: 18
i: 19
i: 20
i: 21
i: 22
i: 23
i: 24
i: 25
i: 26
i: 27
i: 28
i: 29
i: 30
i: 31
i: 32
i: 33
i: 34
i: 35
i: 36
i: 37
i: 38
i: 39
i: 40
i: 41
i: 42
i: 43
i: 44
i: 45
i: 46
i: 47
i: 48
i: 49
i: 50
i: 51
i: 52
i: 53
i: 54
i: 55
i: 56
i: 57
i: 58
i: 59
i: 60
i: 61
i: 62
i: 63
i: 64
i: 65
i: 66
i: 67
i: 68
i: 69
i: 70
i: 71
i: 72
i: 73
i: 74
i: 75
i: 76
i: 77
i: 78
i: 79
i: 80
i: 81
i: 82
i: 83
i: 84
i: 85
i: 86
i: 87
i: 88
i: 89
i: 90
i: 91
i: 92
i: 93
i: 94
i: 95
i: 96
i: 97
i: 98
i: 99
loop count = 100 , average run 34.743400 ms
如运行结果所示,这个rknn_yolov5_demo程序成功100次跑过了YOLOV5模型,对这个bus.jpg图片进行了推理,检测出图片中有4个人物和一辆公共汽车。
自然而然,在这个模型跑测的过程中利用到NPU,对应VDD电压也能获取到动态值。
五、参考来源
1、Yolov5原理详细解析!一文看懂-CSDN博客
2、【智能硬件】初识RKNN-CSDN博客
3、rknpu2/examples/rknn_yolov5_demo at master · rockchip-linux/rknpu2
4、Rockchip NPU模型-RKNN - 知乎