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推理流程:
- 图像采集:从摄像头读取一帧
- 预处理:缩放、归一化、格式转换
- 模型推理:NPU或CPU执行前向计算
- 后处理:NMS、阈值过滤、坐标映射
- 结果输出:绘制框、发送数据
如果单线程串行执行,每一帧都要等前一个步骤完全结束才能开始。我实测过,在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 课程知识体系总览
下面这张图展示了整个课程的知识结构。你可以把它当成一张地图,后面每学一章都能回来看看自己走到了哪里。
1.7 我的一些建议
这门课我会尽量把每个知识点都配上可运行的代码。你最好有一块RK3588或者Jetson Nano的开发板,跟着敲一遍代码。光看不练,效果打对折。
另外,我建议你准备一个笔记本,记录每章的性能数据。比如:
- 单线程帧率是多少?
- 加了流水线后提升了多少?
- 调整缓冲区大小后有什么变化?
这些数据积累起来,就是你自己的嵌入式AI优化手册。
一个小技巧: 刚开始做流水线时,别急着上多线程。先用单线程把整个流程跑通,确认每个阶段的耗时,然后再拆成流水线。这样出了问题,你知道该查哪个环节。