1. 课程导论与目标

1.1 先聊聊我为什么想做这门课

做嵌入式AI这几年,我踩过不少坑。记得2019年第一次把YOLOv3往树莓派上移植,那个帧率简直惨不忍睹——不到1FPS。我当时就想,这玩意儿能干啥?

后来慢慢摸索,发现瓶颈不在模型本身,而在整个系统的调度方式。说白了,CPU、NPU、内存之间都在互相等,谁也没闲着,但谁也没干多少活。

嗯,这就是我们这门课要解决的核心问题。

1.2 什么是嵌入式YOLO?

YOLO(You Only Look Once)是目标检测领域最经典的算法之一。它把检测问题当成回归问题来做,一次前向推理就能输出目标的类别和位置。

嵌入式YOLO,就是把YOLO模型部署到资源受限的嵌入式设备上,比如:

  • ARM Cortex-A系列处理器(树莓派、RK3588、Jetson Nano)
  • 带NPU的SoC(算能、地平线、瑞芯微)
  • MCU级别的低功耗芯片(STM32、ESP32-S3)

我在项目中遇到过最极端的情况——在STM32H743上跑YOLOv2-tiny,RAM只有1MB,Flash 2MB。你想想看,光模型权重就占了800KB,剩下的空间要放输入图像、中间特征图、输出结果……那叫一个捉襟见肘。

嵌入式YOLO的核心挑战:

  • 算力有限(通常不到服务器的1/100)
  • 内存紧张(几十MB到几百MB)
  • 功耗受限(电池供电场景)
  • 实时性要求(视频流处理需要25FPS以上)

1.3 为什么需要多线程流水线?

先看一个典型的嵌入式YOLO推理流程:

  1. 图像采集:从摄像头读取一帧
  2. 预处理:缩放、归一化、格式转换
  3. 模型推理:NPU或CPU执行前向计算
  4. 后处理:NMS、阈值过滤、坐标映射
  5. 结果输出:绘制框、发送数据

如果单线程串行执行,每一帧都要等前一个步骤完全结束才能开始。我实测过,在RK3588上单线程跑YOLOv5s,推理本身只要15ms,但加上预处理和后处理,一帧总耗时到了35ms——帧率不到30FPS。

为什么会这样?因为CPU在等NPU,NPU在等CPU。说白了,资源利用率极低。

多线程流水线的思路很简单:把整个流程拆成几个独立的阶段,每个阶段跑在单独的线程里,阶段之间用队列传递数据。就像工厂的流水线——第一个工人在装零件,第二个工人在拧螺丝,第三个工人在质检,大家同时干活。

我的经验: 多线程流水线在嵌入式设备上能带来2-4倍的吞吐量提升。我曾经在Jetson Nano上把YOLOv4-tiny从12FPS优化到了38FPS,核心就是流水线+双缓冲。

1.4 课程目标

学完这门课,你能够:

能力维度 具体目标
理论 理解嵌入式YOLO的模型压缩、量化、部署原理
架构 掌握多线程流水线的设计模式与同步机制
实践 能在RK3588/Jetson Nano上部署完整的流水线系统
优化 学会性能分析、瓶颈定位、参数调优的方法论

1.5 前置知识

这门课不是零基础入门,你需要具备:

  • C/C++基础:能写多线程程序,理解互斥锁、条件变量
  • Linux基础:会交叉编译、设备树、驱动加载
  • 深度学习基础:了解卷积、池化、全连接,知道YOLO的基本原理
  • 嵌入式基础:用过至少一种嵌入式Linux开发板

注意: 如果你完全没接触过YOLO,建议先看一遍原始《You Only Look Once: Unified, Real-Time Object Detection》。我不打算在课程里从头讲YOLO的网络结构,那会占用太多篇幅。

1.6 课程知识体系总览

下面这张图展示了整个课程的知识结构。你可以把它当成一张地图,后面每学一章都能回来看看自己走到了哪里。

嵌入式YOLO多线程流水线课程知识体系 嵌入式YOLO多线程流水线 · 知识体系 嵌入式YOLO基础 模型压缩 · 量化 · 部署 多线程编程基础 线程 · 锁 · 条件变量 · 原子操作 嵌入式Linux系统 交叉编译 · 驱动 · 内存管理 多线程流水线架构设计 生产者-消费者 · 流水线拆分 · 双缓冲 · 负载均衡 图像采集与预处理 V4L2 · DMA · 格式转换 模型推理引擎 RKNN · TensorRT · NCNN 后处理与输出 NMS · 坐标映射 · 显示 性能优化与项目实战 Profiling · 参数调优 · 完整项目部署 课程共30章,从基础到实战,每章都包含可运行的代码示例和性能数据

1.7 我的一些建议

这门课我会尽量把每个知识点都配上可运行的代码。你最好有一块RK3588或者Jetson Nano的开发板,跟着敲一遍代码。光看不练,效果打对折。

另外,我建议你准备一个笔记本,记录每章的性能数据。比如:

  • 单线程帧率是多少?
  • 加了流水线后提升了多少?
  • 调整缓冲区大小后有什么变化?

这些数据积累起来,就是你自己的嵌入式AI优化手册。

一个小技巧: 刚开始做流水线时,别急着上多线程。先用单线程把整个流程跑通,确认每个阶段的耗时,然后再拆成流水线。这样出了问题,你知道该查哪个环节。