首页
商城
  • English
  • 简体中文
首页
商城
  • English
  • 简体中文
  • 产品系列

    • FPGA+ARM

      • 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 概述
          • 02 开发环境搭建
          • 运行官方 YOLOv5 示例
        • 七、FPGA开发

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

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

          • 资料下载
    • ShimetaPi

      • M4-R1

        • 一、简介

          • M4-R1简介
        • 二、快速上手

          • 01 OpenHarmony概述
          • 02 镜像烧录
          • 03 应用开发快速上手
          • 04 设备开发快速上手
        • 三、应用开发

          • 01 ArkUI

            • 1 ArkTS语言简介
            • 2 UI 组件-Row 容器介绍
            • 3 UI 组件-Column 容器介绍
            • 4 UI 组件-Text 组件
            • 5 UI 组件-Toggle 组件
            • 6 UI 组件-Slider 组件
            • 7 UI 组件-Animation 组件&Transition 组件
          • 02 资料获取

            • 1 OpenHarmony 官方资料
          • 03 开发须知

            • 1 Full-SDK替换教程
            • 2 引入和使用三方库
            • 3 HDC调试
            • 4 命令行恢复出厂模式
            • 5 升级App为system权限
          • 04 构建第一个应用

            • 1 构建第一个ArkTs应用-HelloWorld
          • 05 案例

            • 01 串口调试助手应用案例
            • 02 手写板应用案例
            • 03 数字时钟应用案例
            • 04 WIFI 信息获取应用案例
        • 四、设备开发

          • 1 Ubuntu环境开发

            • 01 环境搭建
            • 02 下载源码
            • 03 编译源码
          • 2 使用DevEco Device Tool 工具

            • 01 工具简介
            • 02 开发环境的搭建
            • 03 导入SDK
            • 04 HUAWEI DevEco Tool 功能介绍
        • 五、内核外设与接口

          • 01 指南
          • 02 设备树介绍
          • 03 NAPI 入门
          • 04 ArkTS入门
          • 05 NAPI开发实战演示
          • 06 GPIO介绍
          • 07 I2C通讯
          • 08 SPI通信
          • 09 PWM 控制
          • 10 串口通讯
          • 11 TF卡
          • 12 屏幕
          • 13 触摸
          • 14 Ethernet(以太网)
          • 15 M.2 硬盘
          • 16 音频
          • 17 WIFI & BT
          • 18 摄像头
        • 六、资料下载

          • 资料下载
      • M4-R2

        • 一、产品简介

          • M4-R2 产品简介
        • 二、快速上手

          • 快速上手
        • 三、Android 系统

          • 1 快速上手

            • Android系统烧录与启动
            • 开发环境搭建
            • ADB调试与日志分析
            • SDK下载与编译环境搭建
            • Android系统基础操作
          • 2 SDK 编译

            • Android_SDK编译
            • Android构建系统与增量编译
          • 3 系统开发

            • Android系统定制
          • 4 应用开发

            • Android应用开发入门
            • Android JNI开发
          • 5 驱动与 HAL

            • Android HAL开发
          • 6 AI 与 NPU

            • Android NPU使用指南
        • 四、硬件参考

          • 核心板参数
          • 底板接口定义
          • 40PIN引脚定义
          • 电源管理
        • 五、常见问题与故障排除

          • 系统启动问题
          • 外设驱动问题
          • 网络连接问题
          • 显示问题
          • 常见编译错误
        • 六、应用方案参考

          • 智能显示终端方案
          • 边缘AI计算方案
          • 工业控制方案
          • NVR安防监控方案
          • 智能家居网关方案
        • 七、资料下载

          • 资料下载
      • M5-R2A

        • 一、产品简介

          • M5-R2A 产品简介
        • 二、快速上手

          • 系统烧录指南
          • 开发环境搭建
          • 快速上手
          • SDK下载与编译环境搭建
        • 四、Debian/Ubuntu 系统

          • 1 快速上手

            • 系统启动与基础操作
            • 网络配置与SSH
            • 软件包管理与更新
            • Debian 与 Ubuntu 镜像差异
          • 2 系统开发

            • Linux SDK编译
            • 内核配置与裁剪
            • 设备树详解与实践
            • 根文件系统构建
          • 3 外设驱动开发

            • GPIO驱动与控制
            • I2C驱动开发
            • SPI驱动开发
            • UART串口驱动
            • PWM驱动
            • ADC驱动
            • CAN/CAN-FD驱动
            • USB主机与设备驱动
            • SDMMC/eMMC驱动
            • 以太网GMAC驱动
            • 音频驱动
            • 摄像头Camera驱动
            • 触摸屏驱动
            • 显示DRM驱动
            • HDMI显示驱动
            • PCIe驱动
            • WiFi/蓝牙驱动
            • 看门狗WDT驱动
            • 热敏传感器THERMAL驱动
          • 4 应用开发

            • C/C++应用开发入门
            • Python应用开发
            • Qt嵌入式开发实战
            • GStreamer多媒体开发
            • 网络编程与应用
            • 文件系统与存储
          • 5 AI 与 NPU

            • NPU架构与性能概览
            • RKNN Toolkit2安装与使用
            • 模型转换与量化
            • 分类模型部署(LeNet/ResNet)
            • 目标检测部署(YOLOv5/v7/v8)
            • 语义分割部署
            • 人脸检测与识别
            • OCR文字识别
            • NPU性能调优与调试
          • 6 多媒体

            • 显示框架
            • 摄像头应用
            • 视频编解码(MPP)
            • 音频开发与ALSA
            • RGA图像处理
          • 7 性能优化与调试

            • 系统启动时间优化
            • CPU/GPU/NPU调优
            • 内存与存储优化
            • 功耗分析与优化
            • 调试工具使用指南
          • 8 高级主题

            • 安全启动与加密
            • OTA远程升级
            • Docker容器部署
            • ROS/ROS2机器人开发
            • RTOS与Linux协同
        • 五、Android 系统

          • 1 快速上手

            • Android系统烧录与启动
            • Android系统基础操作
            • ADB调试与日志分析
          • 2 SDK 编译

            • Android SDK编译
            • Android构建系统与增量编译
          • 3 系统开发

            • Android系统定制
          • 4 应用开发

            • Android应用开发入门
            • Android JNI开发
          • 5 驱动与 HAL

            • Android HAL开发
          • 6 AI 与 NPU

            • Android NPU使用指南
        • 六、硬件参考

          • 核心板参数
          • 底板接口定义
          • 40PIN引脚定义
          • 电源管理
        • 七、资料下载

          • 资料下载
      • Pico-G1

        • 一、产品概述

          • 01 产品介绍
          • 02 SDK版本基本信息
        • 二、快速入门

          • 01 开发环境搭建
          • 02 镜像编译
          • 03 镜像烧录
          • 04 系统登录
          • 05 网络配置
          • 06 文件传输
          • 07 SDK目录结构
          • 08 部署第一个应用程序
          • 09 部署第一个驱动程序
          • 10 SD卡挂载
        • 三、外设与接口

          • 01 GPIO控制
          • 02 UART串口通信
          • 03 I2C 通信
          • 04 SPI 通信
        • 四、MPP媒体开发

          • 01 MPP媒体处理软件
          • 02 图像处理链路
          • 03 视频输入
          • 04 图像编码
        • 五、NPU与AI

          • 01 NPU驱动与运行库架构
          • 02 .xmm 模型加载
          • 03 SVP视频处理
          • 04 AI降噪 (AI_NR)
        • 六、应用程序示例

          • 01 加解密接口应用
          • 02 ADC 采集应用
          • 03 低功耗应用
          • 04 音频处理应用
          • 05 视频编码应用
          • 06 视频输入应用
          • 07 视频图形子系统应用
          • 08 区域叠加应用
          • 09 智能视频引擎应用
          • 10 UVC 网络摄像头应用
          • 11 综合快速演示应用
          • 12 FPN 校正应用
          • 13 区域运动检测应用
          • 14 MTCNN 人脸检测应用
        • 七、扩展板外设功能例程

          • 00 - Pico 扩展板外设功能例程总览
          • 01 - OLED 显示应用
          • 02 - TFT 显示应用
          • 03 - MPU6050 陀螺仪应用
          • 04 - ADC 采集应用
          • 05 - 无源蜂鸣器应用
          • 06 - MQ 气体传感器应用
          • 07 - GPS 定位应用
          • 08 - SHT20 温湿度应用
          • 09 - 超声波测距应用
          • 10 - SPO2 血氧传感器应用
          • 11 - 电机控制应用
          • 12 - 舵机控制应用
    • 开源鸿蒙

      • SC-3568HA

        • 一、简介

          • SC-3568HA简介
        • 二、快速上手

          • OpenHarmony概述
          • 镜像烧录
          • 开发环境准备
          • Hello World应用以及部署
        • 三、应用开发

          • ArkUI

            • 第一章 ArkTS语言简介
            • 第二章 UI组件介绍和实际应用(上)
            • 第三章 UI组件介绍和实际应用(中)
            • 第四章 UI组件介绍和实际应用(下)
          • 拓展

            • 第一章 入门指引
            • 第二章 三方库的引用和使用
            • 第三章 应用编译以及部署
            • 第四章 命令行恢复出厂设置
            • 第五章 系统调试--HDC调试
            • 第六章 APP 稳定性测试
            • 第七章 应用测试
        • 四、设备开发

          • 第一章 环境搭建
          • 第二章 下载源码
          • 第三章 编译源码
        • 五、内核的外设与接口

          • 树莓派接口
          • GPIO 接口
          • I2C 接口
          • SPI通信
          • PWM控制
          • 串口通讯
          • TF Card
          • 屏幕
          • 触摸
          • 音频
          • RTC
          • Ethernet
          • M.2
          • MINI-PCIE
          • Camera
          • WIFI&BT
          • 树莓派拓展板
        • 六、资料下载

          • 资料下载
      • M-K1HSE

        • 一、简介

          • M-K1HSE 简介
        • 二、快速开始

          • 开发环境搭建
          • 源码获取
          • 编译说明
          • 烧录指南
        • 三、应用开发

          • 00 应用开发环境搭建
          • 01 第一个应用-Hello World
        • 四、外设与接口

          • 01 Audio
          • 02 RS485
          • 03 Display
        • 五、系统定制开发

          • 系统移植
          • 系统定制
          • 驱动开发
          • 系统调试
          • OTA升级
        • 六、资料下载

          • 资料下载
    • HVS视觉融合相机

      • 快速开始

        • 01 SDK 介绍
        • 02 资料下载
        • 03 设备固件烧录
        • 04 第一个 C++ 程序
        • 05 第一个 Python 程序
        • 06 Python 数据分析
        • 07 MultiVision Studio
        • 08 版本介绍
      • 二次开发

        • 01 编程指引

          • 01 打开相机
          • 02 读取事件
          • 03 录制与回放
          • 04 事件处理
          • 05 显示与可视化
          • 06 调参
          • 07 采集 APS 图像
          • 08 帧率切换
          • 09 时间戳同步
        • 02 Toolkit SDK

          • 01 Hybrid Vision Toolkit
          • 02 快速上手
          • 03 C++ API
          • 04 Python API
        • 03 Algo SDK

          • 01 Hybrid Vision Algo
          • 02 Algo API
          • 03 Windows Algo SDK
        • 04 USB数据协议
        • 05 示例程序总览
        • 06 应用场景
      • 基础知识

        • 01 事件相机基础原理
        • 02 HVS 融合视觉
        • 03 事件可视化
        • 04 数据格式参考
        • 05 术语表
        • 06 偏置与调参
        • 07 视频教程
      • HVS 相机

        • 01 HVS 相机快速上手
        • 02 网络化能力

          • 01 HVS 相机系统架构
          • 2 EVS Network Server
          • 3 EVS Time Sync
          • 4 Web Window
        • 03 HVS 相机兼容性矩阵
        • 04 常见问题解决指南
        • 05 产品

          • CF-NRS1(灵光一号视觉融合相机)
      • HVS 模块

        • 01 MIPI 模块快速上手
        • 02 载板适配

          • RDK X5 载板适配
          • RDK S100 载板适配
          • 树莓派载板适配
          • shimetapi 板载板适配
        • 03 MIPI 模块兼容性矩阵
        • 04 产品

          • EVS_003 传感器模块
    • AI硬件

      • 1684XB-32T

        • 一、简介

          • AIBOX-1684XB-32简介
        • 二、快速上手

          • 初次使用
          • 网络配置
          • 磁盘使用
          • 内存分配
          • 风扇策略
          • 固件升级
          • 交叉编译
          • 模型量化
        • 三、应用开发

          • 开发简介

            • Sophgo SDK开发
            • SOPHON-DEMO简介
          • 大语言模型

            • 部署Llama3示例
            • Sophon LLM_api_server开发
            • 部署MiniCPM-V-2_6
            • Qwen-2-5-VL图片视频识别DEMO
            • Qwen3-chat-DEMO
            • Qwen3-Qwen Agent-MCP开发
            • Qwen3-langchain-AI Agent
          • 深度学习

            • ResNet(图像分类)
            • LPRNet(车牌识别)
            • SAM(通用图像分割基础模型)
            • YOLOv5(目标检测)
            • OpenPose(人体关键点检测)
            • PP-OCR(光学字符识别)
        • 四、资料下载

          • 资料下载
      • 1684X-416T

        • 简介

          • AIBOX-1684X-416简介
        • Demo简单操作指引

          • shimeta智慧监控demo的简单使用说明
      • RDK-X5

        • 简介

          • RDK-X5 硬件简介
        • 快速开始

          • RDK-X5 快速开始
        • 应用开发

          • AI在线模型开发

            • 实验01-接入火山引擎豆包 AI
            • 实验02-图片分析
            • 实验03-多模态视觉分析定位
            • 实验04-多模态图文比较分析
            • 实验05-多模态文档表格分析
            • 实验06-摄像头运用-AI视觉分析
          • 大语言模型

            • 实验01-语音识别
            • 实验02-语音对话
            • 实验03-多模态图片分析-语音对话
            • 实验04-多模态图片比较-语音对话
            • 实验05-多模态文档分析-语音对话
            • 实验06-多模态视觉运用-语音对话
          • ROS2基础开发

            • 实验01-搭建环境
            • 实验02-工作包的创建及编译
            • 实验03-运行 ROS2 话题通信节点
            • 实验04-ROS2 相机应用
          • 40pin-IO开发

            • 实验01-GPIO 输出(LED闪烁)
            • 实验02-GPIO 输入
            • 实验03-按键控制 LED
            • 实验04-PWM 输出
            • 实验05-串口输出
            • 实验06-IIC 实验
            • 实验07-SPI 实验
          • USB模块开发使用

            • 实验01-USB 语音模块使用
            • 实验02-声源定位模块使用
          • 机器视觉技术实战

            • 实验01-打开 USB 摄像头
            • 实验02-颜色识别检测
            • 实验03-手势识别体验
            • 实验04-YOLOv5物体检测
      • RDK-S100

        • 简介

          • RDK-S100 硬件简介
        • 快速开始

          • RDK-S100 硬件简介
        • 应用开发

          • AI在线模型开发

            • 实验01-接入火山引擎豆包 AI
            • 实验02-图片分析
            • 实验03-多模态视觉分析定位
            • 实验04-多模态图文比较分析
            • 实验05-多模态文档表格分析
            • 实验06-摄像头运用-AI视觉分析
          • 大语言模型

            • 实验01-语音识别
            • 实验02-语音对话
            • 实验03-多模态图片分析-语音对话
            • 实验04-多模态图片比较-语音对话
            • 实验05-多模态文档分析-语音对话
            • 实验06-多模态视觉运用-语音对话
          • ROS2基础开发

            • 实验01-搭建环境
            • 实验02-工作包的创建及编译
            • 实验03-运行 ROS2 话题通信节点
            • 实验04-ROS2 相机应用
          • 40pin-IO开发

            • 实验01-GPIO 输出(LED闪烁)
            • 实验02-GPIO 输入
            • 实验03-按键控制 LED
            • 实验04-PWM 输出
            • 实验05-串口输出
            • 实验06-IIC 实验
            • 实验07-SPI 实验
          • USB模块开发使用

            • 实验01-USB 语音模块使用
            • 实验02-声源定位模块使用
          • 机器视觉技术实战

            • 实验01-打开 USB 摄像头
            • 实验02-图像处理基础
            • 实验03-目标检测
            • 实验04-图像分割
      • AIBOX-M88(RK1828)

        • 一、简介

          • AIBOX-M88(RK1828) - 产品介绍
          • AIBOX-M88(RK1828) 硬件规格
          • AIBOX-M88(RK1828) 使用与安全
        • 二、快速开始

          • AIBOX-M88(RK1828) 镜像烧录
          • RK182X 硬件安装与验证
          • RK182X 开发环境快速搭建
          • RK182X SDK 总览
          • RK182X 环境搭建详解
          • RK182X 快速开始
          • 原厂 SDK 资料抽取记录
        • 三、开发指南

          • ClawChips 架构与原理
          • SKILL 使用手册
          • RK182X系列LLM推理(RK1828型号)
          • RK182X系列CNN推理(RK1828型号)
          • 模型转换
          • RK182X AI Agent 应用开发指南
          • RK182X 工业异常检测应用
        • 四、SDK 参考

          • RKNN3-SDK 概述

            • RKNN3 SDK 概述
          • RKNN3-Toolkit

            • RKNN3 Toolkit 安装与使用
          • RKLLM

            • RKLLM 设备端 LLM 推理
          • RK182X系列 NPU 概述与架构(RK1828型号)
          • RK182X INT8 量化推理部署
          • RK182X MPP 多媒体处理框架
          • MPP 详解

            • RK182X 视频解码
            • RK182X 视频编码
          • NPU 详解

            • RKNN 模型转换
            • RK182X NPU INT8 量化推理
            • RK182X 多模型并行推理
          • RGA 详解

            • RK182X RGA 2D 图形加速
          • VPU 详解

            • RK182X VPU 编解码
        • 五、硬件参考

          • RK182X系列 硬件架构概述(RK1828型号)
          • RK182X 引脚定义与复用配置
          • RK182X 引脚定义
          • RK182X 电源管理
          • RK182X 时钟与 PLL 配置
          • RK182X 时钟与频率配置
        • 六、实战教程

          • Hello World
          • Hello RK1828 - 第一个程序
          • RTSP 推流
          • RTSP 推流 + AI 分析
          • 视美泰AI龙虾一键部署
          • PaddleOCR-VL 文字识别
          • Qwen3-1.7B LLM 文本对话
          • AI 巡检多视角(Qwen3-VL 包装)
          • YOLOv5 目标检测
        • 七、资料下载

          • 资料下载
        • 八、常见问题

          • 常见问题
    • 核心板

      • C-3568BQ

        • 简介

          • C-3568BQ 简介
      • C-3588LQ

        • 简介

          • C-3588LQ 简介
      • GC-3568JBAF

        • 简介

          • GC-3568JBAF 简介
      • C-K1BA

        • 简介

          • C-K1BA 简介
    • 软件平台

      • ShiMetaPi Workbench

        • 一、产品简介

          • 产品概述
          • 核心架构
          • 功能入口
          • 支持的硬件
          • 版本说明
        • 二、快速入门

          • 安装与登录
          • 连接设备
          • 配置环境
          • 接入 AIHub
          • 首次调用模型
        • 三、用户指南

          • 工作区总览
          • 设备管理
          • 模型广场
          • 一键部署
          • 视觉 - SVP
          • 视觉 - 自定义模型
          • shimeta-py IDE
          • 终端
          • Agent 调试助手
          • 设置与资源
        • 四、常见问题

          • 安装与登录
          • 设备连接
          • 模型与部署
          • 视觉与运行时
          • 设置与其他
      • ShimetaPi软件源

        • 简介

          • ShimetaPi 软件源
        • Pico G1 (GK7206)

          • 快速开始

            • 安装与首次推理
            • shimeta_infer — 图片推理
            • shimeta_camera — 摄像头实时推理
            • SVP 场景检测
            • 文件传输与内置模型参考
            • 常见问题
          • HTTP API & Python SDK

            • HTTP API 参考
      • 模型微调训练平台

        • 一、平台介绍

          • 模型训练平台
        • 二、快速上手

          • 注册与登录
          • 创建第一个模型(30 分钟快速体验)
        • 三、训练指南

          • 数据准备与标注
          • 训练参数配置
          • 启动与监控训练
          • 模型评估与测试
        • 四、模型部署

          • 导出模型
          • 部署到边缘设备

分类模型部署(LeNet/ResNet)

目标平台: RK3576 | NPU 算力: 6 TOPS | 文档版本: V1.0
适用板型: C-3576BQ 核心板 + M4-R2 底板
最后更新: 2026-10-23


1. 概述

1.1 功能简介

图像分类是最基础的 AI 视觉任务,其目标是将输入图像归入预定义的类别中。RK3576 内置 NPU 算力达 6 TOPS(INT8),可高效运行各类分类模型。

本文档以两个典型模型为例,介绍在 RK3576 上完成分类模型部署的完整流程:

模型数据集输入尺寸类别数用途
LeNetMNIST28x28x110手写数字识别(入门示例)
ResNet-50ImageNet224x224x31000通用图像分类(工程级参考)

部署流程包含以下环节:

原始模型 (ONNX) → RKNN 模型转换 → INT8 量化 → 板端推理 → 分类结果

1.2 应用场景

  • 手写数字识别:银行票据、快递单号、邮政编码等场景中的数字自动录入。
  • 通用图像分类:农产品分级、工业缺陷分类、场景识别等需要多类别判断的场景。
  • 物体识别预处理:作为目标检测管线的前置阶段,快速判断图像中是否存在感兴趣的目标类别。
  • 质量检测:产线上对产品外观进行分类判定(合格/不合格,或细粒度缺陷分类)。

1.3 工作原理

分类模型的核心计算流程如下:

图像输入
  │
  ▼
预处理(resize → 归一化 → 格式转换)
  │
  ▼
RKNN 模型推理 ────── NPU 6 TOPS 加速
  │
  ▼
后处理(Softmax → Top-K 排序)
  │
  ▼
分类结果输出

RK3576 NPU 对分类模型的关键加速点:

  • Conv2d 卷积层:占据模型 90% 以上的计算量,NPU 通过专用卷积引擎硬件加速。
  • BatchNorm / ReLU:与卷积融合执行,减少访存开销。
  • 全连接层(FC):对较薄的特征图有良好的调度效率。
  • INT8 量化推理:充分利用 6 TOPS INT8 算力,相比 FP16 理论性能翻倍。

2. 硬件准备

2.1 所需硬件清单

序号硬件名称规格数量说明
1C-3576BQ 核心板V1.01RK3576 主芯片,含 NPU
2M4-R2 底板V1.01提供外设接口
3USB to TTL 调试串口线3.3V 电平1连接 DEBUG UART
4电源适配器5V/2A1底板供电(Type-C 或 6pin,空载最小 1000mA)
5TF 卡32GB 以上1烧录系统镜像
6网线--1SSH 连接或文件传输

2.2 硬件连接

┌─────────────────────────────────┐
│          M4-R2 底板              │
│                                 │
│  ┌─────────────────────┐        │
│  │  C-3576BQ 核心板     │        │
│  │  RK3576 (6 TOPS NPU)│        │
│  └─────────────────────┘        │
│                                 │
│  DEBUG UART ──── USB to TTL ──→ PC (串口终端) │
│  ETH0      ──── 网线 ────────→ 路由器/PC     │
│  DC 5V     ──── 电源适配器                    │
│  TF Card   ──── TF 卡                        │
└─────────────────────────────────┘

2.3 串口连接参数

通过 USB to TTL 线连接核心板 DEBUG 口后,在 PC 端使用串口终端工具(如 minicom、PuTTY)连接:

参数值
波特率1500000
数据位8
停止位1
校验位无
流控无

2.4 上电启动

  1. 插入已烧录系统镜像的 TF 卡。
  2. 连接 USB to TTL 串口线至 PC。
  3. 连接网线(可选,便于文件传输)。
  4. 接通 5V 电源,系统开始启动。
  5. 在串口终端中观察启动日志,等待登录提示符出现。

3. 软件准备

3.1 开发环境(PC 端)

在 PC 的 Linux 环境(推荐 Ubuntu 20.04/22.04)中安装 RKNN 工具链:

# RKNN Toolkit2 —— PC 端模型转换与量化
pip3 install rknn-toolkit2

# 依赖库
pip3 install numpy opencv-python pillow

如需使用 RKNN Toolkit2 的高级功能(如量化分析、性能评估),可安装完整版:

pip3 install rknn-toolkit2[all]

3.2 运行环境(板端)

板端运行镜像中已预装 rknn-lite2 运行时库。如需手动安装:

# 板端运行时(轻量版,仅含推理 API)
pip3 install rknn-lite2

# 板端依赖
pip3 install numpy opencv-python

3.3 工具版本对照

工具推荐版本说明
rknn-toolkit2>= 2.0.0PC 端模型转换
rknn-lite2>= 2.0.0板端推理运行时
numpy>= 1.21.0数值计算
opencv-python>= 4.5.0图像读取与预处理
onnx>= 1.12.0ONNX 模型加载(可选)

以上版本为通用推荐,具体以实际发布的 RK3576 SDK 为准。


4. 操作步骤

4.1 LeNet 模型转换

LeNet 是经典的卷积神经网络,适用于 MNIST 手写数字识别。以下脚本在 PC 端将 ONNX 格式的 LeNet 模型转换为 RKNN 格式。

"""
LeNet ONNX → RKNN 转换脚本
运行环境:PC 端 (rknn-toolkit2)
"""
from rknn.api import RKNN

# 模型路径配置
ONNX_MODEL = 'lenet.onnx'
RKNN_MODEL = 'lenet.rknn'
DATASET = 'mnist_samples.txt'  # 量化校准数据列表

# 初始化 RKNN
rknn = RKNN()

# 配置模型参数
# LeNet 输入为灰度图 28x28x1,归一化到 [-1, 1]
rknn.config(
    mean_values=[[128]],
    std_values=[[128]],
    target_platform='rk3576',
    quantized_dtype='asymmetric_quantized-8'
)

# 加载 ONNX 模型
ret = rknn.load_onnx(model=ONNX_MODEL)
if ret != 0:
    print('加载模型失败')
    exit(ret)

# 构建 RKNN 模型并进行 INT8 量化
ret = rknn.build(do_quantization=True, dataset=DATASET)
if ret != 0:
    print('构建模型失败')
    exit(ret)

# 导出 RKNN 模型
ret = rknn.export_rknn(RKNN_MODEL)
if ret != 0:
    print('导出模型失败')
    exit(ret)

# 释放资源
rknn.release()
print(f'模型转换完成: {RKNN_MODEL}')

校准数据文件 mnist_samples.txt 格式示例:

每行一个图片路径,共 20-50 张即可:

./calibration_data/0_1.png
./calibration_data/1_3.png
./calibration_data/2_5.png
...

4.2 ResNet-50 模型转换

ResNet-50 是 ImageNet 上的经典分类网络,1000 类输出,是工程中最常用的分类基线模型。

"""
ResNet-50 ONNX → RKNN 转换脚本
运行环境:PC 端 (rknn-toolkit2)
"""
from rknn.api import RKNN

ONNX_MODEL = 'resnet50.onnx'
RKNN_MODEL = 'resnet50.rknn'
DATASET = 'imagenet_samples.txt'

rknn = RKNN()

# ResNet-50 输入为 RGB 图 224x224x3
# ImageNet 标准归一化参数
rknn.config(
    mean_values=[[123.675, 116.28, 103.53]],
    std_values=[[58.395, 57.12, 57.375]],
    target_platform='rk3576',
    quantized_dtype='asymmetric_quantized-8'
)

ret = rknn.load_onnx(model=ONNX_MODEL)
if ret != 0:
    print('加载模型失败')
    exit(ret)

ret = rknn.build(do_quantization=True, dataset=DATASET)
if ret != 0:
    print('构建模型失败')
    exit(ret)

ret = rknn.export_rknn(RKNN_MODEL)
if ret != 0:
    print('导出模型失败')
    exit(ret)

rknn.release()
print(f'模型转换完成: {RKNN_MODEL}')

4.3 板端推理 —— ResNet-50 图像分类

将 RKNN 模型部署到 RK3576 板端执行推理:

"""
ResNet-50 板端推理 —— Top-5 分类结果
运行环境:RK3576 板端 (rknn-lite2)
"""
from rknnlite.api import RKNNLite
import cv2
import numpy as np

# ── 加载 ImageNet 标签 ──
LABELS = [line.strip() for line in open('imagenet_labels.txt')]

# ── 初始化 RKNN 运行时 ──
rknn = RKNNLite()
rknn.load_rknn('resnet50.rknn')
# 使用多核模式,获得最高推理性能
rknn.init_runtime(core_mask=RKNNLite.NPU_CORE_0_1_2)

# ── 读取并预处理图像 ──
img = cv2.imread('test.jpg')
img = cv2.resize(img, (224, 224))
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

# ── 推理 ──
outputs = rknn.inference(inputs=[img])

# ── 后处理:Softmax + Top-5 ──
output = outputs[0][0]  # shape: (1, 1000)

# 数值稳定的 softmax
output = output - np.max(output)
probs = np.exp(output) / np.sum(np.exp(output))

# 取概率最高的 5 个类别
top5_idx = np.argsort(probs)[-5:][::-1]

print('Top-5 预测结果:')
for i, idx in enumerate(top5_idx):
    print(f'  {i+1}. {LABELS[idx]}: {probs[idx]*100:.2f}%')

# ── 释放资源 ──
rknn.release()

4.4 板端推理 —— LeNet 手写数字识别

"""
LeNet 板端推理 —— 手写数字识别
运行环境:RK3576 板端 (rknn-lite2)
"""
from rknnlite.api import RKNNLite
import cv2
import numpy as np

# ── 初始化 ──
rknn = RKNNLite()
rknn.load_rknn('lenet.rknn')
rknn.init_runtime(core_mask=RKNNLite.NPU_CORE_0)

# ── 读取灰度图并预处理 ──
img = cv2.imread('digit.png', cv2.IMREAD_GRAYSCALE)
img = cv2.resize(img, (28, 28))
img = img.reshape(1, 28, 28).astype(np.float32)
img = (img - 128) / 128  # 归一化到 [-1, 1]

# ── 推理 ──
outputs = rknn.inference(inputs=[img])

# ── 后处理 ──
pred = np.argmax(outputs[0])
confidence = np.max(np.exp(outputs[0][0]) / np.sum(np.exp(outputs[0][0])))
print(f'预测数字: {pred}, 置信度: {confidence*100:.2f}%')

rknn.release()

4.5 批量推理性能测试

以下脚本在 RK3576 上测试 ResNet-50 的实际推理性能,使用随机输入数据模拟真实场景。

"""
RK3576 NPU 分类模型性能基准测试
运行环境:RK3576 板端 (rknn-lite2)
"""
import time
from rknnlite.api import RKNNLite
import numpy as np

RKNN_MODEL = 'resnet50.rknn'

# ── 初始化 ──
rknn = RKNNLite()
rknn.load_rknn(RKNN_MODEL)
rknn.init_runtime(core_mask=RKNNLite.NPU_CORE_0_1_2)

# 生成随机输入数据(模拟 224x224 RGB 图像)
dummy = np.random.randint(0, 255, (1, 224, 224, 3), dtype=np.uint8)

# ── 预热(消除首次推理的额外开销) ──
WARMUP_ROUNDS = 10
for _ in range(WARMUP_ROUNDS):
    rknn.inference(inputs=[dummy])
print(f'预热完成 ({WARMUP_ROUNDS} 轮)')

# ── 正式测试 ──
TEST_ROUNDS = 100
times = []
for i in range(TEST_ROUNDS):
    start = time.time()
    outputs = rknn.inference(inputs=[dummy])
    elapsed = time.time() - start
    times.append(elapsed)

# ── 统计结果 ──
times_ms = np.array(times) * 1000
avg_ms = np.mean(times_ms)
min_ms = np.min(times_ms)
max_ms = np.max(times_ms)
fps = 1000 / avg_ms

print(f'测试轮数: {TEST_ROUNDS}')
print(f'平均推理时间: {avg_ms:.2f} ms')
print(f'最快: {min_ms:.2f} ms | 最慢: {max_ms:.2f} ms')
print(f'平均 FPS: {fps:.1f}')

# ── 释放 ──
rknn.release()

实测 FPS 需在 C-3576BQ + M4-R2 V10 板卡上实际测量(待板上验证)。


5. 代码详解

5.1 预处理流程

分类模型对输入数据的预处理非常敏感,预处理不当是分类精度异常的首要原因。

ResNet-50 预处理链路:

原始图像 (BGR, uint8, HxWxC)
  │
  ├─ cv2.resize(img, (224, 224))          # 缩放到模型输入尺寸
  ├─ cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # BGR → RGB(训练时使用 RGB)
  │
  ├─ normalize:
  │   img = (img - mean) / std
  │   mean = [123.675, 116.28, 103.53]    # ImageNet 通道均值
  │   std  = [58.395,  57.12,  57.375]    # ImageNet 通道标准差
  │
  └─ 输出格式: NHWC (1, 224, 224, 3) uint8

LeNet 预处理链路:

原始图像 (灰度, uint8, HxW)
  │
  ├─ cv2.resize(img, (28, 28))            # 缩放到 28x28
  ├─ reshape → (1, 28, 28)               # 添加 batch 维度
  ├─ astype(np.float32)                   # 转浮点
  │
  ├─ normalize:
  │   img = (img - 128) / 128             # 归一化到 [-1, 1]
  │
  └─ 输出格式: NCHW (1, 1, 28, 28) float32

注意: LeNet 输入为单通道灰度图,使用 NCHW 格式;ResNet-50 输入为三通道 RGB 图,RKNN 默认使用 NHWC 格式。预处理时务必确认 mean_values 和 std_values 的维度与输入通道数一致。

5.2 后处理(Softmax)

Softmax 函数将模型原始输出(logits)转换为概率分布:

def softmax(x):
    """
    数值稳定的 Softmax 实现。
    通过减去最大值防止 exp 溢出。
    """
    x = x - np.max(x)       # 平移,防止 exp 溢出
    exp_x = np.exp(x)
    return exp_x / np.sum(exp_x)

Top-K 取前 K 个最高概率的类别索引:

# Top-1
pred = np.argmax(output)

# Top-5
top5_idx = np.argsort(output)[-5:][::-1]

5.3 NPU 核心模式对比

RK3576 内置 3 个 NPU 核心,合计算力 6 TOPS。通过 core_mask 参数可选择使用的核心组合:

模式core_mask有效核心数理论算力适用场景
单核NPU_CORE_01~2 TOPS低功耗场景、调试
双核NPU_CORE_0_12~4 TOPS功耗与性能平衡
三核NPU_CORE_0_1_236 TOPS最高性能

说明: 核心数量与算力分配为 RK 平台通用结构描述,具体 FPS 以实际板卡测量为准(待板上验证)。

核心选择建议:

  • 调试阶段使用单核(NPU_CORE_0),方便定位问题。
  • 正式部署时使用三核(NPU_CORE_0_1_2),充分利用 6 TOPS 算力。
  • 多模型并行部署时,可为每个模型分配不同的核心,避免资源竞争。

5.4 模型转换参数详解

参数含义LeNet 取值ResNet-50 取值
mean_values输入图像均值(用于归一化)[[128]][[123.675, 116.28, 103.53]]
std_values输入图像标准差[[128]][[58.395, 57.12, 57.375]]
target_platform目标平台rk3576rk3576
quantized_dtype量化类型asymmetric_quantized-8asymmetric_quantized-8
do_quantization是否量化TrueTrue
dataset校准数据列表路径mnist_samples.txtimagenet_samples.txt

提示: target_platform='rk3576' 确保转换器生成针对 RK3576 NPU 优化的算子调度策略。不要使用其他平台参数。


6. 常见问题

6.1 分类结果全为同一类

现象: 所有输入图像都返回相同的预测类别,置信度接近 100%。

可能原因与解决方案:

原因排查方法解决方案
mean/std 与训练不一致打印模型转换时的配置确认 mean_values 和 std_values 与训练代码一致
输入格式错误(NHWC vs NCHW)打印输入 tensor 的 shape确认 RKNN config 中的输入格式与模型要求匹配
通道顺序错误(RGB vs BGR)打印预处理后的像素值确认 cv2.cvtColor 转换方向正确
量化校准数据质量差检查校准数据集使用多样化、有代表性的校准图片

调试代码:

# 在推理前检查输入
print(f'输入 shape: {img.shape}')         # 应为 (1, 224, 224, 3)
print(f'输入 dtype: {img.dtype}')         # 应为 uint8
print(f'输入值范围: [{img.min()}, {img.max()}]')  # 应在 [0, 255] 范围

# 在推理后检查输出
output = outputs[0][0]
print(f'输出 shape: {output.shape}')      # ResNet-50 应为 (1, 1000)
print(f'输出值范围: [{output.min():.2f}, {output.max():.2f}]')

6.2 推理速度远低于预期

现象: FPS 远低于参考值。

排查步骤:

# 1. 确认 NPU 频率是否正常
cat /sys/kernel/debug/clk/clk_npu/clk_rate

# 2. 确认是否使用了多核模式
# 检查推理代码中的 core_mask 参数

# 3. 确认输入尺寸是否合理
# ResNet-50 标准输入为 224x224

# 4. 检查系统 CPU 负载
top -d 1

# 5. 检查内存使用
free -h

优化建议:

  • 确保使用 NPU_CORE_0_1_2 多核模式。
  • 检查 init_runtime 的 core_mask 参数是否正确。
  • 检查是否有多余的内存拷贝或数据格式转换操作。
  • 检查预处理是否在 NPU 推理之外完成,避免阻塞 NPU 调度。

6.3 量化后精度下降严重

现象: INT8 量化后 Top-1 精度下降超过 2 个百分点。

解决方案:

# 方案一:使用 MMSE 量化算法(精度更高,转换时间更长)
rknn.build(
    do_quantization=True,
    dataset='calibration.txt',
    quantized_algorithm='mmse'
)

# 方案二:增加校准数据量(推荐 200-500 张)
# 将 calibration.txt 中的样本数量从 20 张增加到 200+ 张

# 方案三:混合精度量化(对敏感层保留 FP16)
rknn.config(
    mixed_precision_ctrl_cfg={
        'core_mask': 0,       # 不启用混合精度
        'plugin_layer': [],    # 可指定保留 FP16 的层
    }
)

6.4 模型加载失败

现象: 板端 load_rknn 返回错误码。

常见原因:

  • RKNN 模型是针对其他平台(如 RK3568)转换的,需重新以 target_platform='rk3576' 转换。
  • RKNN Toolkit2 版本与板端 rknn-lite2 版本不匹配,需保持一致。
  • 模型文件损坏或传输不完整,需重新拷贝。

6.5 内存不足 (OOM)

现象: 推理时程序崩溃,串口输出 out of memory 相关错误。

解决方案:

# 检查系统可用内存
free -h

# 检查 NPU 已分配内存
cat /sys/kernel/debug/rknpu/version

# 关闭不必要的进程释放内存
# 使用单核模式减少内存占用

相关文档

文档名称路径说明
NPU 架构与性能概览NPU架构与性能概览RK3576 NPU 架构介绍
RKNN Toolkit2 安装与使用RKNN Toolkit2安装与使用工具链安装与基本使用
模型转换与量化模型转换与量化通用模型转换流程与量化策略
NPU 性能调优与调试NPU性能调优与调试性能分析与调优技巧

在 GitHub 上编辑此页