首页
商城
  • 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)

目标平台: RK3588 | NPU 算力: 6 TOPS | 文档版本: V1.0
适用板型: C-3588LQ 核心板 + SHIMETAPI-M5-R2A 底板
最后更新: 2026-08-19


1. 概述

1.1 功能简介

图像分类是最基础的 AI 视觉任务,目标是把输入图像归到预定义的类别里。RK3588 内置 NPU 算力达 6 TOPS(INT8),跑各类分类模型都很轻松。

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

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

整个部署流程一句话概括:

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

1.2 应用场景

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

1.3 工作原理

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

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

RK3588 NPU 对分类模型的加速点主要在这几处:

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

2. 硬件准备

2.1 所需硬件清单

序号硬件名称规格数量说明
1C-3588LQ 核心板V1.01RK3588 主芯片,含 NPU
2SHIMETAPI-M5-R2A 底板V1.01提供外设接口
3USB to TTL 调试串口线3.3V 电平1连接 DEBUG UART
4电源适配器12V/2A DC1底板供电
5MicroSD 卡32GB 以上1烧录系统镜像
6网线或 USB 网卡--1SSH 连接或文件传输

2.2 硬件连接

各接口的连接关系如下:

┌─────────────────────────────────┐
│        SHIMETAPI-M5-R2A 底板      │
│                                 │
│  ┌─────────────────────┐        │
│  │  C-3588LQ 核心板     │        │
│  │  RK3588 (6 TOPS NPU)│        │
│  └─────────────────────┘        │
│                                 │
│  DEBUG UART ──── USB to TTL ──→ PC (串口终端) │
│  ETH0      ──── 网线 ────────→ 路由器/PC     │
│  DC 12V    ──── 电源适配器                    │
│  SD Card   ──── MicroSD 卡                   │
└─────────────────────────────────┘

2.3 串口连接参数

用 USB to TTL 线接好核心板 DEBUG 口后,在 PC 端用串口终端工具(如 minicom、PuTTY)按下面的参数连接:

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

2.4 上电启动

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

3. 软件准备

3.1 开发环境(PC 端)

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

# RKNN Toolkit2 —— PC 端模型转换与量化(版本与板端 librknnrt 匹配)
pip3 install rknn-toolkit2==2.3.2 -i https://pypi.org/simple

# 依赖库
pip3 install numpy opencv-python pillow

补充三点:

  1. PyPI 无 Windows wheel,PC 需 Linux(x86_64/aarch64 均有)。
  2. aarch64 板上直装需 --no-deps 绕过 onnxoptimizer(详见 ch02 3.1)。
  3. rknn-toolkit2[all] 的 extras 写法不被该包支持,装完整依赖直接 pip 装对应包即可。

3.2 运行环境(板端)

板端(出厂 Debian 12):librknnrt.so 2.3.2 已预装在 /usr/lib/,但 Python 的 rknnlite 包没有预装,需要自己装:

# 板端推理包(正确包名 rknn-toolkit-lite2,版本与 librknnrt 一致)
sudo pip3 install --break-system-packages rknn-toolkit-lite2==2.3.2

# 板端依赖(numpy 已预装 1.24.2;opencv 出厂未装,需要时再装)
pip3 list 2>/dev/null | grep -iE "numpy|opencv|pillow"
#  numpy 1.24.2(预装)、Pillow 12.3.0(预装)、opencv 无

3.3 工具版本对照

本机的工具版本汇总,供排错时对照:

工具版本说明
rknn-toolkit22.3.2转换(PC 或板上)
rknn-toolkit-lite22.3.2板端推理
librknnrt2.3.2 (出厂预装)板端 C 运行时
rknpu 驱动0.9.8 (出厂内建)DRM 方式,renderD129
numpy1.24.2 (预装)数值计算
Pillow12.3.0 (预装)图像读取(opencv 未预装)
onnx1.16.1ONNX 处理(板上 pip 装)

4. 操作步骤

4.1 LeNet 模型转换

LeNet 是经典的卷积神经网络,适用于 MNIST 手写数字识别。下面的脚本在 PC 端把 ONNX 格式的 LeNet 模型转成 RKNN 格式(Rockchip NPU 专用格式),跑完后输出 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='rk3588',
    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='rk3588',
    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}')

下面的输出取自实机(resnet50-v2-7.onnx 97.7MB,板上转换,32 张校准图):

原 shape: ['N', 3, 224, 224]           ← 又是动态 batch,先固化(见下方坑2)
saved static: /var/tmp/resnet50_static.onnx
[fp16] load_onnx ret=0 114.5s
[fp16] build ret=0 130.5s
[fp16] export ret=0 size=49.92MB 130.6s
[i8]  build ret=0 279.5s
[i8]  export size=25.46MB

踩过两个坑:

  1. 内存不足会被 OOM-kill:resnet50 转换峰值 RSS 3.34GB,4GB 板(跑桌面)直接被内核杀掉,日志只剩 toolkit banner。先加 swap 再转:
    sudo fallocate -l 4G /userdata/swapfile && sudo chmod 600 /userdata/swapfile
    sudo mkswap /userdata/swapfile && sudo swapon /userdata/swapfile
    加 4G swap 后 fp16/INT8 转换全部成功(INT8 279.5s)。
  2. 动态 batch 维('N'):load 前用 onnx 库把 dim[0] 固定为 1,否则报 The input shape ... is not support!。

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

模型转好后传到板上,用下面的脚本执行推理,会打印 Top-5 分类结果:

"""
ResNet-50 板端推理 —— Top-5 分类结果
运行环境:RK3588 板端 (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()

实机测得的速度(resnet50 fp16,随机输入,30 次平均):

core_mask耗时/帧帧率
NPU_CORE_025.67 ms39 FPS
NPU_CORE_0_1_221.19 ms47 FPS

INT8 版本(同一测试条件):

core_mask耗时/帧帧率
NPU_CORE_010.75 ms93 FPS
NPU_CORE_0_1_28.54 ms117 FPS

INT8 量化后吞吐约 2.4x;ResNet-50 这类重模型多核收益(1.2~1.3x)明显小于 mobilenetv2(1.5x)。

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

"""
LeNet 板端推理 —— 手写数字识别
运行环境:RK3588 板端 (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 批量推理性能测试

想知道模型在板上的真实帧率,可以用下面的脚本测,它用随机输入模拟真实场景:

"""
RK3588 NPU 分类模型性能基准测试
运行环境:RK3588 板端 (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()

参考值(本机,50 次平均):resnet50 INT8 三核约 8.5 ms / 117 FPS;mobilenetv2 INT8 三核约 1.9 ms / 523 FPS。把脚本里的 RKNN_MODEL 换成对应文件即可复现。


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 核心模式对比

RK3588 内置 3 个 NPU 核心,每个核心约 2 TOPS。通过 core_mask 参数可选择使用的核心组合:

模式core_mask有效核心数理论算力ResNet-50 实际 FPS(INT8)适用场景
单核NPU_CORE_012 TOPS93(fp16: 39)低功耗场景、调试
三核NPU_CORE_0_1_236 TOPS117(fp16: 47)最高性能

怎么选:调试阶段用单核(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目标平台rk3588rk3588
quantized_dtype量化类型asymmetric_quantized-8asymmetric_quantized-8
do_quantization是否量化TrueTrue
dataset校准数据列表路径mnist_samples.txtimagenet_samples.txt

注意:target_platform='rk3588' 确保转换器生成针对 RK3588 NPU 优化的算子调度策略。不要使用 rk3568 等其他平台参数。


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 远低于参考值(如 ResNet-50 低于 300 FPS)。

按顺序排查:

# 1. 确认 NPU 频率是否正常
cat /sys/class/devfreq/fdab0000.npu/cur_freq   # devfreq 接口(clk_npu 在本机不存在)
# 正常值应为 800MHz 或更高

# 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='rk3588' 转换;RKNN Toolkit2 版本与板端 rknn-lite2 版本不匹配,需保持一致;模型文件损坏或传输不完整,需重新拷贝。

6.5 内存不足 (OOM)

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

排查思路:

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

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

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

7. 相关文档

文档名称路径说明
NPU 架构与性能概览ch01-npu-architecture-and-performance.mdRK3588 NPU 架构介绍
RKNN Toolkit2 安装与使用ch02-rknn-toolkit2-setup-and-usage.md工具链安装与基本使用
模型转换与量化ch03-model-conversion-and-quantization.md通用模型转换流程与量化策略
NPU 性能调优与调试ch09-npu-performance-and-debugging.md性能分析与调优技巧
在 GitHub 上编辑此页
Prev
模型转换与量化
Next
目标检测部署(YOLOv5/v7/v8)