Skip to content

Latest commit

 

History

History
executable file
·
170 lines (125 loc) · 7.42 KB

File metadata and controls

executable file
·
170 lines (125 loc) · 7.42 KB

SG2002 TPU 推理性能报告

版本: v5 (2026-07-23 更新) 平台: SG2002 (LicheeRV Nano), 0.5 TOPS INT8, RISC-V C906 @ 1GHz 测试标准: 遵循 MLPerf Tiny 惯例,区分 TPU Forward / 推理 Pipeline / 端到端管线三层

📋 关于本报告

本报告区分三个度量层级:

  • TPU Forward: 纯 CVI_NN_Forward 硬件耗时,不含 memcpy
  • 推理 Pipeline: Forward + 预处理 + NMS 后处理
  • 端到端管线: 摄像头取帧 + 预处理 + 推理 + NMS

勘误 (2026-07-23): 此前"Linux Python 200ms"数据使用了不同模型(27600 anchors), 非 OS 差异。同模型控制变量后 Linux 与 StarryOS 均为 ~40ms。


一、TPU Forward 纯推理 (同模型, 同输入)

模型: yolov8n_tennis_v2.cvimodel (cv181x, v1.4.0, 8400 anchors) 输入: tennis-ball-close.int8 (640×640×3, CHW planar, 1.2MB)

Rank 平台 语言 Forward FPS 二进制 备注
1 StarryOS C 39.6ms 25.3 11KB 纯C, 最精简
2 StarryOS C++ 40.0ms 25.0 15KB RAII 封装
3 AKA-00 Linux Python 39.6ms 25.3 2026-07-23 实测
4 StarryOS Python 40.0ms 25.0 15KB ctypes, 免编译
5 StarryOS Rust 41ms 24.4 860KB async + camera

结论: TPU 硬件推理性能与 OS 无关,均 40ms ± 1ms。

二、跨平台验证 (2026-07-23 新增)

控制变量: 同硬件、同模型 (8400 anchors)、同输入。

平台 OS TPU Forward 说明
LicheeRV Nano StarryOS (TGOSKits) 40.0ms 自研 Rust 微内核
LicheeRV Nano AKA-00 Linux (Buildroot 2023.11.2, 5.10.4) 39.6ms Sipeed 官方

此前 200ms 数据根因

模型 锚点数 Forward 归因
yolov8n_tennis_v2 (我们) 8,400 40ms 单类检测, 优化结构
AKA-00 旧版 tennis 27,600 188ms 3.3x 锚点, 多类结构, 不同绑定

此前 "StarryOS 40ms vs Linux 200ms" 是模型差异 (4.8x),非 OS 差异。

三、端到端推理 Pipeline

同模型,含预处理 (C) + TPU Forward + C NMS,不含摄像头。

平台 Pre (C) TPU NMS (C) Total FPS
StarryOS 143ms 40ms 4ms 187ms 5.3
AKA-00 Linux 120ms 40ms 4ms 164ms 6.1

四、实时摄像头管线 (2026-07-23 新增)

完整链路: USB 摄像头 640×480 YUYV → C 预处理 (yuyv_resize_planar) → TPU → C NMS

平台 Camera Pre TPU NMS Total FPS 备注
AKA-00 Linux ~10ms 120ms 40ms 4ms 174ms 5.7 实测 ✅
StarryOS (当前) 255ms 143ms 40ms 4ms 442ms 2.3 实测 ✅
StarryOS (CrabUsb 7/25) 100ms 143ms 40ms 4ms 287ms 3.5 ✅ 实测 2026-07-27

2026-07-27 更新: 李明涛已将 USB 后端从 sg200x-bsp 替换为 CrabUsb (Rust 原生),蒋玉月补全 Isoch 等时传输。 此前 255ms 空转已消除,Camera 降至 100ms 稳定均匀。下一步在 usbfs 事件循环中给 UVC 开低延迟通道, 目标 10ms + 管线 15fps。

五、检出精度 (四语言 100% 对齐)

引擎 检出数 置信度 坐标 (x1,y1,x2,y2)
C 1 0.969 (261, 263, 371, 377)
C++ 1 0.969 (261, 263, 371, 377)
Python 1 0.969 (261, 263, 371, 377)
Rust 1 0.969 (261, 263, 371, 377)

实时摄像头检出: conf=0.85-0.97 (受光照和运动模糊影响)

六、Python 预处理优化历程

版本 方法 Pre TPU NMS Total 关键改进
v3 PIL + numpy 11s 60ms 68ms 11.2s 基线
v4 C preprocess_ops.so v3 338ms 52ms 68ms 458ms +C 加速
v4+ + 消除 memcpy 40ms 100ms +直接调用
v6 C v4 融合版 + C NMS 143ms 40ms 4ms 187ms +融合 YUV, +C NMS

七、CPU vs TPU

引擎 耗时 vs TPU
C++ CPU (StarryOS) 14.19s 355x
C++ CPU (Linux) 14.17s 354x
Python CPU (Linux) 25.1s 628x

八、系统架构

┌──────────────────────────────────────────┐
│  C / C++ / Python / Rust  ← 用户态       │
│  CVI_NN API → libcviruntime.so           │
├──────────────────────────────────────────┤
│  OS (StarryOS / Linux)                   │
│  /dev/cvi-tpu0  ← TPU 设备节点           │
├──────────────────────────────────────────┤
│  SG2002 TPU  ← 硬件 (TDMA + TIU)         │
│  0.5 TOPS INT8, RISC-V C906 @ 1GHz       │
└──────────────────────────────────────────┘

九、测试环境

组件 StarryOS AKA-00 Linux
OS TGOSKits StarryOS Buildroot 2023.11.2
Kernel StarryOS (自研) Linux 5.10.4
工具链 Xuantie V3.4.0 Xuantie V2.6.1
libcviruntime v1.4.0 v1.4.0
Python 3.11.8 (musl) 3.11.6
摄像头驱动 V4L2 (自研 UVC) OpenCV 4.9 / V4L2
C 预处理库 preprocess_ops.so v4 (9.7KB) preprocess_ops.so v4 (9.5KB)

十、USB 架构升级:sg200x-bsp → CrabUsb (2026-07-27)

背景

StarryOS 内核自带 usbfs 管理 USB 主机及设备。旧的 sg200x-bsp (Cvitek 厂商 BSP) 试图独立操作 USB,与 usbfs 中断号冲突——usbfs 已注册的中断 sg200x-bsp 无法再注册,导致 UVC 驱动只能轮询,出现 ~255ms 空转。

解决方案

李明涛将 USB 后端完全替换为 CrabUsb (Rust 原生 USB 栈),融入内核 usbfs 中断体系。蒋玉月补全了 CrabUsb 缺失的 Isoch (等时) 传输,使 UVC 视频流正常工作。

升级前: StarryOS usbfs(中断已占用) ✗ sg200x-bsp → 中断冲突 → 255ms 轮询
升级后: StarryOS usbfs(事件循环)   ✓ CrabUsb   → 合法注册中断 + Isoch → 100ms 稳定

测试数据 (2026-07-27, boot_crabusb_20260725.sd)

指标 sg200x-bsp CrabUsb + Isoch
Camera 裸帧 ~255ms (不稳定) 100ms (均匀稳定)
TPU Raw Forward 39.6ms 39.8ms
DQBUF 稳定性 偶尔空转 ✅ 无空转

下一步

UVC 仍挂在 usbfs 通用事件循环上(100ms),Linux 同等硬件仅 10ms。目标:中断直通 + buffer 预分配 → Camera 100ms → 10ms → 管线 15fps。

十一、已知问题

问题 影响 状态
UVC 事件循环延迟 100ms (vs Linux 10ms) 端到端 fps ↓2x 🟡 优化中
preprocess_ops.so 还有优化空间 预处理 120-143ms 🟡 可继续
AKA-00 旧模型 27600 anchors 对比基准失真 ✅ 已修正

参考