NPU使用指南¶
Copyright © Quectel Wireless Solutions Co., Ltd. 2026. All rights reserved.
NPU 是什么¶
NPU(Neural Processing Unit,神经网络处理器)是 RK3576 集成的 AI 推理专用硬件,算力 6 TOPS(INT8)。它用硬件并行执行神经网络的核心计算(卷积、矩阵乘),比 CPU 快 10~25 倍。
NPU 能做什么?
应用 |
说明 |
|---|---|
目标检测 |
识别画面中的物体(人、车、猫狗…) |
图像分类 |
判断图片属于哪一类 |
人脸识别 |
检测/比对/特征提取 |
OCR |
文字识别 |
姿态估计 |
识别人体关键点 |
在 M2 板上,跑 AI 模型(如 YOLO 目标检测)就是用 NPU 加速推理,本指南一步步教你怎么做。
板载资源(开箱即用)¶
M2 板 Debian 系统已预置完整 NPU 工具链:
资源 |
路径 |
|---|---|
NPU 驱动 |
rknpu v0.9.8 |
推理运行时 |
/usr/lib/librknnrt.so(v2.3.2) |
推理测试工具 |
/usr/bin/rknn_benchmark、rknn_common_test |
预置模型 |
/usr/share/model/RK3576/mobilenet_v1.rknn |
使用场景 1:跑一个图像分类模型(最快上手)¶
第 1 步:确认 NPU 就绪¶
# NPU 驱动版本
cat /sys/kernel/debug/rknpu/version
# 预期:RKNPU driver: v0.9.8
第 2 步:运行 mobilenet 分类推理¶
# 用预置的 mobilenet_v1 模型 + 测试图片跑一次推理
rknn_common_test /usr/share/model/RK3576/mobilenet_v1.rknn /usr/share/model/dog_224x224.jpg 3
第 3 步:查看结果¶
输出会显示模型信息、推理耗时与分类结果。M2 实测 mobilenet_v1 单帧推理 约 2.1ms(470 FPS)——这就是 NPU 加速的效果,CPU 跑同样模型要慢 10 倍以上。
使用场景 2:跑 YOLO 目标检测(最常用)¶
YOLO 检测的完整操作步骤见 [YOLO 板端部署 目标检测] 文档,这里简述:
# 板端执行(在模型目录下)
cd /usr/share/model/yolov5
rknn_yolov5_demo /usr/share/model/yolov5/RK3576/yolov5s-640-640.rknn \
model/bus.jpg resize /tmp/bus_detected.jpg
实测:单帧 19ms(约 50 FPS),识别出 4 个 person + 1 个 bus。
使用场景 3:NPU 性能测试(多模型)¶
# 板载性能测试工具
rknn_benchmark /usr/share/model/RK3576/mobilenet_v1.rknn
RK3576 NPU 实测各模型性能(rknn_benchmark):
模型 |
输入尺寸 |
平均耗时 |
FPS |
类型 |
|---|---|---|---|---|
resnet18 |
224x224 |
3.50ms |
285 |
图像分类 |
resnet152 |
224x224 |
19.35ms |
51.7 |
图像分类 |
yolov5s |
640x640 |
17.37ms |
57.6 |
目标检测 |
yolo11s |
640x640 |
33.24ms |
30.1 |
目标检测 |
yolov5s 57 FPS > 30 FPS(视频帧率),说明 RK3576 可以 实时 做视频目标检测。
使用场景 4:跑自己的模型(进阶)¶
把自己的模型(PyTorch/TensorFlow/ONNX)转成 RKNN 格式就能在 NPU 上跑。
第 1 步:安装转换工具(PC 端)¶
cd <SDK>/external/rknn-toolkit2/rknn-toolkit2
pip3 install packages/x86_64/rknn_toolkit2-2.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
pip3 install "onnx==1.14.1"
第 2 步:导出 ONNX 模型¶
import torch
model = torch.hub.load('pytorch/vision:v0.14.1', 'resnet18', pretrained=True)
model.eval()
torch.onnx.export(model, torch.Tensor(1,3,224,224), 'resnet18.onnx',
input_names=['input'], output_names=['output'], opset_version=12)
第 3 步:转成 RKNN¶
from rknn.api import RKNN
rknn = RKNN()
rknn.config(mean_values=[123.675,116.28,103.53], std_values=[58.395,58.395,58.395],
target_platform='rk3576') # ★ 必须指定 rk3576
rknn.load_onnx(model='resnet18.onnx')
rknn.build(do_quantization=True, dataset='dataset.txt')
rknn.export_rknn('resnet18.rknn')
第 4 步:推到板子运行¶
adb push resnet18.rknn /data/local/tmp/
adb shell "rknn_benchmark /data/local/tmp/resnet18.rknn 2>&1 | grep -i avg"
# 预期:Avg Time 3.50ms, Avg FPS = 285.7
可复现验证包:SDK 根目录
rknn-pytorch-demo.zip(含 resnet18/resnet152/yolo11s 转换脚本 + 一键测试)。
常见问题¶
问题 |
解决 |
|---|---|
failed to open model |
模型必须用 rk3576 平台转换;检查路径 |
rknn_benchmark 不存在 |
SMARC (Buildroot) 用 |
转换报 onnx.mapping 错误 |
onnx 版本必须 ≤1.14.1 |
推理速度慢 |
NPU 定频到最高 950MHz(见下) |
NPU 定频(跑模型前推荐)¶
# root 权限,NPU 固定最高频率
echo userspace > /sys/class/devfreq/27700000.npu/governor
echo 950000000 > /sys/class/devfreq/27700000.npu/userspace/set_freq