爱笑的小姐姐 · 2022年07月22日

Radxa Rock 3a NPU调用指南

0x0 Radxa Rock 3a开发板介绍

Radxa Rock 3a开发板是基于瑞芯微RK3568芯片设计的,ARM CPU采用4核Cortex-A55(Cortex-A53的继任者),主频最高可达2.0Ghz,CPU性能相当于中高端手机的小核性能。相比于RK3399, 树莓派4B这种采用了Cortex-A72大核CPU平台,RK3568的Cortex-A55这种虽然是小核CPU架构,但是由于主频高,性能不会逊色太多,在加上对于ARMV8.2的支持,原生支持半精度计算,在AI推理性能要略微强上一截。而在散热功耗控制上,RK3568由于采用了小核架构要比RK3399树莓派4B更有优势。

以下是基于NCNN推理框架运行MobileNetV2网络的速度测试基准:

image.png

RK3568在CPU的AI推理性能还是很强的!!!

其实基于RK3568的Radxa Rock 3a有个非常大的优势,就是太TM便宜的,某宝269RMB就可以入手,相比于RK3399和树莓派4B在价格上有太大优势了!!!

放一张Radxa Rock 3a的照片:


官方介绍

0x1 simple-rknn2傻瓜式调用rk npu

上篇讲了,Radxa Rock 3a上面搭载的那颗RK3568很强,但是不要忘了,它还有个0.8T的NPU,虽然指标算力看起来很低,但是应该也是比CPU强一些的。基于RK3568的NPU开发,是要基于瑞芯微官方提供的rknn-toolkit2以及rknpu2rknn-toolkit2主要是神经网络模型的量化及模型转换,把模型转换为.rknn的格式,rknpu2主要是提供调用NPU的API接口函数,这两个在瑞芯微的Github都有提供,下面是链接

https://github.com/rockchip-linux/rknpu2

https://github.com/rockchip-linux/rknn-toolkit2

建议大家还是要看完官方文档,在./doc目录下

那么当我们通过rknn-toolkit2工具把模型转换为.rknn的格式后,我们具体该怎么在NPU上进行推理呢?我这边就给大家造了个轮子,方便大家傻瓜式调用,就是simple-rknn2,它不光支持RK3568的NPU调用,也支持RK3588的NPU,操作系统支持Linux和Android,链接在下面:

https://github.com/dog-qiuqiu/simple-rknn2

基于它调用NPU,到底有多傻瓜呢,总共也就两个函数: LoadModel():加载模型 Forward()模型推理;

是不是很简洁,其实也就是基于官方rknpu2的NPU调用API接口进行二次封装,方便在大家不了解NPU调用API的情况下也能方便调用NPU进行.rknn模型的推理,降低大家NPU入门开发成本,simple-rknn2具体的使用流程可以参考GitHub上的README

0x2 NPU调用示例

那么我们基于simple-rknn2提供的MobileNetv2的demo,在Radxa Rock 3a实际运行测试一下吧,看看运行速度相比于CPU有多快。注意下Radxa Rock 3a我采用的Ubuntu20镜像(debian镜像调用rga会报glibc版本错误),下面是我烧录的系统镜像链接:

链接:https://pan.baidu.com/share/init?surl=WWmAanwOc8-D1lFpT3zOyQ

提取码: 28qc

按照下面GitHub README链接的步骤进行simple-rknn2的编译以及demo执行文件的编译

https://github.com/dog-qiuqiu/simple-rknn2#run-demo

编译完成生成可执行文件后,我们实际运行跑一下:

Load model:mobilenetv2_3568.rknn
sdk version: 1.2.0 (9db21b35d@2022-01-14T15:16:23) driver version: 0.4.2
model input num: 1, output num: 1
  index=0, name=data, n_dims=4, dims=[1, 224, 224, 3], n_elems=150528, size=602112, fmt=NHWC, type=FP32, qnt_type=AFFINE, zp=-13, scale=0.018317
  index=0, name=prob, n_dims=4, dims=[1, 1000, 1, 1], n_elems=1000, size=4000, fmt=NCHW, type=FP32, qnt_type=AFFINE, zp=0, scale=1.000000
model is NHWC input fmt
model input height=224, width=224, channel=3
Rga built version:1.04 788c430+2021-02-24 12:17:35
Forward time:19.2299995422 ms
=========================
index:0 c:1000 h:1 w:1
category:155 score:0.991211
=========================

运行耗时19.22ms,相比于CPU的35ms还是要快很多的,哈哈,真香!!!(最后还是想说太TM便宜啊)

作者:qiuqiuqiu
文章来源:知乎

推荐阅读

FastestDet: 比yolo-fastest更快!更强!更简单!
YOLOv7来临:图解网络结构模块
YOLOv7来临:论文详读和解析

更多嵌入式AI相关技术干货请关注嵌入式AI专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
18838
内容数
1371
嵌入式端AI,包括AI算法在推理框架Tengine,MNN,NCNN,PaddlePaddle及相关芯片上的实现。欢迎加入微信交流群,微信号:aijishu20(备注:嵌入式)
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息