首页
  • GM-3568JHF
  • M4-R1
  • M5-R1
  • SC-3568HA
  • M-K1HSE
  • CF-NRS1
  • CF-CRA2
  • 1684XB-32T
  • 1684X-416T
  • C-3568BQ
  • C-3588LQ
  • GC-3568JBAF
  • C-K1BA
商城
  • English
  • 简体中文
首页
  • GM-3568JHF
  • M4-R1
  • M5-R1
  • SC-3568HA
  • M-K1HSE
  • CF-NRS1
  • CF-CRA2
  • 1684XB-32T
  • 1684X-416T
  • C-3568BQ
  • C-3588LQ
  • GC-3568JBAF
  • C-K1BA
商城
  • English
  • 简体中文
  • GM-3568JHF

    • 一、简介

      • GM-3568JHF 简介
    • 二、快速开始

      • 00 前言
      • 01 环境搭建
      • 02 编译说明
      • 03 烧录指南
      • 04 调试工具
      • 05 软件更新
      • 06 查看信息
      • 07 测试命令
      • 08 应用编译
      • 09 源码获取
    • 三、外设与接口

      • 01 USB
      • 02 显示与触摸
      • 03 以太网
      • 04 WIFI
      • 05 蓝牙
      • 06 TF-Card
      • 07 音频
      • 08 串口
      • 09 CAN
      • 10 RTC
    • 四、应用开发

      • 01 UART读写案例
      • 02 按键检测案例
      • 03 LED灯闪烁案例
      • 04 MIPI屏幕检测案例
      • 05 读取 USB 设备信息案例
      • 06 FAN 检测案例
      • 07 FPGA FSPI 通信案例
      • 08 FPGA DMA 读写案例
      • 09 GPS调试案例
      • 10 以太网测试案例
      • 11 RS485读写案例
      • 12 FPGA IIC 读写案例
      • 13 PN532 NFC读卡案例
      • 14 TF卡读写案例
    • 五、QT开发

      • 01 ARM64交叉编译器环境搭建
      • 02 QT 程序加入开机自启服务
    • 六、RKNN_NPU开发

      • 01 RK3568 NPU 概述
      • 开发环境搭建
    • 七、FPGA开发

      • ARM与FPGA通讯
      • FPGA开发手册
    • 八、其他

      • 01 根目录文件系统的修改
      • 02 系统自启服务
    • 九、资料下载

      • 资料下载

01 RK3568 NPU 概述

1 什么是 NPU

1.1 NPU 基本概念

NPU(Neural Processing Unit,神经网络处理单元)是专门为人工智能和机器学习任务设计的专用处理器。与传统的 CPU 和 GPU 相比,NPU 在执行神经网络推理任务时具有更高的能效比和更低的功耗。

1.2 NPU 的技术特点

专用架构设计

  • 并行计算能力: 针对神经网络的矩阵运算进行优化
  • 低功耗设计: 相比 GPU 在推理任务中功耗更低
  • 高效内存访问: 优化的内存层次结构减少数据搬移
  • 定点运算支持: 支持 INT8/INT16 等低精度运算,提升推理速度

应用场景

  • 计算机视觉: 图像分类、目标检测、人脸识别
  • 自然语言处理: 语音识别、文本分析
  • 智能控制: 工业自动化、机器人控制
  • 边缘计算: 物联网设备、智能监控

1.3 NPU vs CPU/GPU 对比

特性CPUGPUNPU
架构特点通用计算并行计算AI 专用计算
推理性能低中等高
功耗效率低中等高
编程复杂度简单中等简单(框架支持)
适用场景通用任务图形/并行计算AI 推理

2 RK3568 NPU 性能指标

2.1 硬件规格

基本参数

  • NPU 型号: 瑞芯微自研 NPU
  • 算力性能: 0.8 TOPS (INT8)
  • 支持精度: INT8, INT16, FP16, BFP16
  • 内存带宽: 共享系统内存
  • 工作频率: 最高 600MHz

架构特性

RK3568 NPU 架构
├── 计算单元
│   ├── 矩阵乘法单元 (MAC Array)
│   ├── 激活函数单元 (Activation)
│   └── 池化单元 (Pooling)
├── 内存子系统
│   ├── 片上缓存 (On-chip Cache)
│   ├── DMA 控制器
│   └── 内存管理单元 (MMU)
└── 控制单元
    ├── 指令解码器
    ├── 调度器
    └── 中断控制器

2.2 性能基准测试

典型模型性能 (INT8)

模型输入尺寸推理时间FPS精度损失
MobileNetV2224x224x3~15ms~66< 1%
YOLOv5s640x640x3~180ms~5.5< 2%
ResNet50224x224x3~45ms~22< 1%
EfficientNet-B0224x224x3~25ms~40< 1%

功耗特性

  • 峰值功耗: 约 1.2W
  • 平均功耗: 约 0.8W (典型推理任务)
  • 待机功耗: < 10mW
  • 功耗效率: 约 667 GOPS/W

2.3 支持的算子

①卷积类算子

此类算子是深度学习,尤其是计算机视觉任务的核心,用于从输入数据(如图像)中提取特征。

- Conv2D             (标准卷积)
- DepthwiseConv2D    (深度可分离卷积)
- TransposeConv2D    (转置卷积)
- DilatedConv2D      (空洞卷积)
  • Conv2D:标准卷积操作,使用一个可学习的卷积核(滤波器)在输入特征图上进行滑动窗口计算,从而提取局部特征,如边缘、纹理等。
  • DepthwiseConv2D:将标准卷积分解为两个步骤:​深度卷积​(每个输入通道独立卷积)和逐点卷积​(1x1 卷积,用于组合通道信息)。这种结构可以大幅减少计算量和参数数量。
  • TransposeConv2D:可以看作是标准卷积的“逆过程”。它能够将一个小尺寸的特征图上采样​(放大)到一个更大尺寸的特征图。
  • DilatedConv2D:在标准卷积核的元素之间插入“空洞”(零值),从而在不增加参数数量和计算量的情况下,​扩大卷积核的感受野,捕获更广泛的上下文信息。

②池化和归一化

此类算子主要用于降维、保持平移不变性(如图像分类任务)和稳定训练过程。

- MaxPool2D / AvgPool2D          (最大池化 / 平均池化)
- GlobalMaxPool / GlobalAvgPool  (全局最大池化 / 全局平均池化)
- BatchNormalization             (批量归一化)
- LayerNormalization             (层归一化)
  • MaxPool2D / AvgPool2D: 在局部区域(如 2x2 窗口)内,取最大值(MaxPool)或平均值(AvgPool)。主要用于降低特征图的空间尺寸(宽和高),减少计算量,同时增强特征的位置不变性。
  • GlobalMaxPool / GlobalAvgPool: 对整个特征图的每个通道取最大值或平均值,最终将一个 HxWxC 的特征图直接转换为一个 1x1xC 的向量,用于提取全局特征。
  • BatchNormalization: 对一个批次(Batch)内的数据进行归一化处理(减均值、除以标准差),使其均值为 0,方差为 1。然后通过可学习的参数进行缩放和偏移。这可以加速模型训练收敛,缓解梯度消失/爆炸问题,并有一定正则化效果。用于稳定训练过程和加速收敛。
  • LayerNormalization: 与批归一化类似,但它的归一化维度不同。它是在单个样本内,对所有通道和空间位置进行归一化。在序列模型(如Transformer)和小批次训练中表现更好,用于归一化每个样本的特征。

③激活函数

激活函数为神经网络引入非线性,帮助模型学习复杂的特征表示。

- ReLU / ReLU6 / LeakyReLU    (修正线性单元)
- Sigmoid / Tanh              (S 型函数 / 双曲正切函数)
- Swish / Mish                (平滑 ReLU / Mish 激活函数)
- Softmax                     (软最大函数)
  • ReLU:Rectified Linear Unit,最大激活函数,将所有负值设为 0,正值保持不变。常用在隐藏层,解决了梯度消失问题。
  • ReLU6:与 ReLU 类似,但将输出限制在 [0, 6] 范围内,用于移动端部署。
  • LeakyReLU:对 ReLU 的改进,解决了“死亡 ReLU”问题,当输入为负数时,输出一个小的非零值,避免神经元“死亡”。
  • Sigmoid:将输入映射到 (0, 1) 范围内,常用在二分类问题的输出层。
  • Tanh:将输入映射到 (-1, 1) 范围内,与 Sigmoid 类似,但输出范围更广。
  • Swish:一种平滑的激活函数,公式为 f(x) = x * sigmoid(x),在一些模型中表现良好。
  • Mish:一种新的激活函数,公式为 f(x) = x * tanh(softplus(x)),在一些模型中也表现出良好的性能。
  • Softmax:将输入向量映射到概率分布,常用在多分类问题的输出层。将每个元素转换为 0 到 1 之间的概率值,且所有元素的和为 1。

④其他算子

以下是构建复杂网络结构所必需的基础操作和链接算子。

- Add / Sub / Mul / Div    (基本算术运算)
- Concat / Split           (拼接与分割)
- Reshape / Transpose      (形状变换)
- MatMul / FullyConnected  (矩阵乘法 / 全连接层)
  • Add / Sub / Mul / Div:分别对应加法、减法、乘法、除法。
  • Concat:用于合并多个张量,在指定维度上进行拼接。
  • Split:用于将一个张量拆分成多个子张量,在指定维度上进行分割。
  • Reshape:用于改变张量的形状,不改变元素数量。
  • Transpose:用于交换张量的维度顺序。
  • MatMul:用于矩阵乘法,主要用于构建神经网络中的线性变换层。
  • FullyConnected:用于全连接层,将输入张量与权重矩阵相乘,再加上偏置项。

3 RKNN 软件栈生态介绍

3.1 RKNN 软件栈架构

应用层
├── Python 应用   (rknn-toolkit2)
├── C/C++ 应用    (rknnrt)
└── Android 应用  (RKNN API)
    │
框架层
├── RKNN-Toolkit2 (模型转换)
├── RKNN Runtime  (推理引擎)
└── RKNN API      (编程接口)
    │
驱动层
├── NPU 驱动   (Kernel Driver)
├── 内存管理   (Memory Manager)
└── 电源管理   (Power Manager)
    │
硬件层
└── RK3568 NPU 硬件

3.2 核心组件介绍

1)RKNN-Toolkit2

RKNN-Toolkit2 的核心功能是作为模型转换与部署的桥梁。它支持将多种主流框架(如 TensorFlow、PyTorch、ONNX 等)训练的模型转换为专用的 RKNN 格式。在转换过程中,工具会自动化执行量化和图优化,显著提升模型在NPU上的推理效率。同时,它提供模型仿真和性能分析功能,便于开发者在部署前验证模型效果与运行速度。该工具支持在 Windows、Linux 和 macOS 系统上运行,具备良好的跨平台兼容性。

支持的框架:

# 支持的输入格式
- TensorFlow / TensorFlow Lite
- PyTorch / ONNX
- Caffe / Caffe2
- MXNet
- Darknet

2)RKNN Runtime

核心功能:

  • 高效的模型推理引擎
  • 内存管理和优化
  • 多线程支持
  • 硬件资源调度

为了满足不同开发场景的需求,RKNN Runtime 提供了多层次的 API 语言支持。对于追求极致性能和低延迟的嵌入式部署场景,​C/C++ API​ 是最佳选择,它提供了最直接和高效的底层控制。在算法原型快速验证、科研以及脚本开发阶段,​Python API​ 因其简洁的语法和快速的迭代能力而备受青睐,大大提升了开发便捷性。此外,针对安卓平台的应用程序开发,它还提供了 ​Java API,使得开发者能够方便地将 AI 功能集成到现有的 Android 应用之中。

3.3 开发工具链

PC 端工具

# RKNN-Toolkit2 安装
pip install rknn-toolkit2

# 模型转换工具
rknn-toolkit2-convert

# 性能分析工具
rknn-toolkit2-profiler

板端运行时

# RKNN Runtime 库
librknnrt.so

# Python 绑定
rknnlite

# 示例程序
rknn_demo

3.4 生态支持

  • GitHub 仓库: https://github.com/rockchip-linux/rknn-toolkit2
  • 开发文档: 完整的 API 文档和用户指南
  • 示例代码: 涵盖各种应用场景的 Demo
  • 模型库: 预训练模型和转换脚本

RK3568 NPU 拥有一个由官方主导、社区活跃的成熟开发生态。其核心资源集中在官方的 ​GitHub 仓库​(rockchip-linux/rknn-toolkit2)上,该仓库提供了完整的软件开发套件,包括详尽的 ​API 文档、用户指南、覆盖图像分类、目标检测、语义分割等多种应用的示例代码,以及一个持续更新的模型库,内含大量预训练好的 RKNN 模型和转换脚本,帮助开发者快速上手。

4 开发流程总览

WholeStep

首先是第一阶段“开发环境准备”​,在此需要完成两项基础工作:一是准备好由 PyTorch 或 TensorFlow 等主流框架训练并导出的原始模型文件(如 .pt 或 .onnx 格式),二是配置核心的模型转换工具链,即安装 RKNN-Toolkit2 软件开发包及其相关依赖环境。

接下来进入第二阶段“模型验证”​,这是确保模型能正确、高效运行的关键环节。先利用 RKNN-Toolkit2 将原始模型转换为 NPU 专用的 RKNN 格式,此过程通常包含关键的量化步骤,旨在优化模型体积与推理速度。随后,在 PC 端进行仿真验证,无需连接实际硬件即可快速检验模型转换后的功能正确性与基础性能,极大提升了开发调试效率。

最终是第三阶段“部署与集成”​,将经过验证的 RKNN 模型部署到目标硬件上。这一阶段首先进行板端部署,确保模型在真实环境中被正确加载;接着通过性能分析与优化,精细调整参数以充分释放 NPU 的算力;最后,将优化后的模型集成到最终的应用程序中,完成整个 AI 解决方案的落地。

5 总结

RK3568 的 NPU 为边缘 AI 应用提供了强大的计算能力和完整的软件生态支持。通过 RKNN 软件栈,开发者可以轻松地将各种深度学习模型部署到 GM-3568JHF 开发板上,实现高效的 AI 推理应用。

接下来的章节将详细介绍开发环境搭建、官方示例运行、模型转换和自定义模型部署等具体操作步骤,帮助您快速上手 RK3568 NPU 开发。

在 GitHub 上编辑此页
上次更新:
贡献者: jxc
Next
开发环境搭建