# 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 就绪 ```bash # NPU 驱动版本 cat /sys/kernel/debug/rknpu/version # 预期:RKNPU driver: v0.9.8 ``` ## 第 2 步:运行 mobilenet 分类推理 ```bash # 用预置的 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 板端部署 目标检测] 文档,这里简述: ```bash # 板端执行(在模型目录下) 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 性能测试(多模型) ```bash # 板载性能测试工具 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 端) ```bash cd /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 模型 ```python 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 ```python 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 步:推到板子运行 ```bash 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 定频(跑模型前推荐) ```bash # root 权限,NPU 固定最高频率 echo userspace > /sys/class/devfreq/27700000.npu/governor echo 950000000 > /sys/class/devfreq/27700000.npu/userspace/set_freq ```