版本: 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。
模型: 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。
控制变量: 同硬件、同模型 (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 官方 |
| 模型 | 锚点数 | Forward | 归因 |
|---|---|---|---|
| yolov8n_tennis_v2 (我们) | 8,400 | 40ms | 单类检测, 优化结构 |
| AKA-00 旧版 tennis | 27,600 | 188ms | 3.3x 锚点, 多类结构, 不同绑定 |
此前 "StarryOS 40ms vs Linux 200ms" 是模型差异 (4.8x),非 OS 差异。
同模型,含预处理 (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 |
完整链路: 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。
| 引擎 | 检出数 | 置信度 | 坐标 (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 (受光照和运动模糊影响)
| 版本 | 方法 | 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 |
| 引擎 | 耗时 | 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) |
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 稳定
| 指标 | 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 | 对比基准失真 | ✅ 已修正 |
- chenlongos/ACT-Runtime — 本仓库
- jiangyuyue111/sg2002_yolo_inference — 完整管线项目
- rcore-os/tgoskits — StarryOS 内核
- chenlongos/AKA-00 — 辰龙机器人