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) 用 rknn_common_test 替代

转换报 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