1. 课程导学与环境准备:YOLO发展史、嵌入式AI应用场景、开发板选型与交叉编译环境搭建
大家好,欢迎来到《嵌入式端YOLO目标检测部署项目实战》的第一章。
我是你们这门课的主讲。做了快十年的嵌入式AI,从最早的树莓派跑个MobileNet都卡顿,到现在能在Jetson Nano上实时跑YOLOv8,这条路我算是踩坑踩过来的。今天咱们先不急着敲代码,把地基打牢。
这一章,我会带你搞清楚三件事:YOLO到底是怎么一路进化过来的?嵌入式AI到底能干啥?以及我们该选哪块板子、怎么搭环境?
1.1 YOLO发展史:从v1到v8,我们经历了什么
YOLO,全称You Only Look Once。说白了,就是“看一眼就搞定”。
2016年,Joseph Redmon提出了YOLOv1。那时候的目标检测主流还是Faster R-CNN,两阶段,慢。YOLO直接把检测当成回归问题,一个网络搞定边界框和类别。我记得第一次跑YOLOv1的时候,被它的速度惊到了——虽然精度一般,但那种“实时”的感觉,太震撼了。
| 版本 | 核心改进 | 我的评价 |
|---|---|---|
| YOLOv1 | 端到端单阶段检测,7x7网格 | 开山之作,但小目标基本废了 |
| YOLOv2 | 引入Anchor、Batch Normalization | 收敛快了,精度上来了 |
| YOLOv3 | 多尺度预测、Darknet-53骨干 | 我项目里用得最多的版本,稳 |
| YOLOv4 | Mish激活、CSPNet、PANet | 工程优化集大成者 |
| YOLOv5 | PyTorch原生、Focus层、自动锚框 | 社区生态最好,部署最友好 |
| YOLOv6~v8 | 重参数化、解耦头、Anchor-Free | 精度速度双杀,但模型大了 |
1.2 嵌入式AI应用场景:到底能用在哪儿?
你可能会问:为什么非要在嵌入式设备上跑YOLO?云端不香吗?
嗯,这里有个关键点:延迟、带宽、隐私。
举个例子。我去年做一个工厂质检项目,摄像头拍下流水线上的零件,如果传回云端检测,来回至少200ms延迟。产线速度是每秒一个零件,根本来不及。直接在Jetson Nano上跑YOLOv5s,推理只要30ms,实时报警。
- 智慧安防:门禁人脸、异常行为检测,数据不出设备
- 工业质检:表面缺陷、装配检测,毫秒级响应
- 自动驾驶:车道线、行人、交通标志,必须本地实时
- 农业无人机:作物识别、病虫害检测,边缘计算省流量
- 消费电子:手机拍照、AR眼镜,功耗敏感
1.3 开发板选型:Jetson Nano vs RK3588
目前嵌入式端YOLO部署,主流就两个阵营:NVIDIA的Jetson系列和瑞芯微的RK系列。
我个人的经验是:看生态选Jetson,看性价比选RK3588。
| 对比项 | Jetson Nano (4GB) | RK3588 |
|---|---|---|
| AI算力 | 472 GFLOPS (FP16) | 6 TOPS (INT8) |
| 推理框架 | TensorRT (官方支持) | RKNN (需模型转换) |
| 生态成熟度 | 极高,社区资源丰富 | 中等,文档偏少 |
| 价格 | 约800元 | 约500元 |
| 功耗 | 10W | 8W |
| YOLO部署难度 | 低(有官方示例) | 中(需手动优化) |
1.4 交叉编译环境搭建:从零开始
交叉编译,说白了就是在你的电脑上编译出能在开发板上运行的程序。
为什么要这么做?因为开发板性能有限,编译YOLO这种项目,在Jetson Nano上直接编译可能要半小时,而在你的PC上只要5分钟。
1.4.1 宿主机环境准备(Ubuntu 20.04/22.04)
# 更新系统
sudo apt update && sudo apt upgrade -y
# 安装基础工具
sudo apt install -y build-essential cmake git wget
# 安装CUDA(如果你有NVIDIA显卡)
# 建议CUDA 11.4以上
wget https://developer.download.nvidia.com/compute/cuda/11.4.0/local_installers/cuda_11.4.0_470.42.01_linux.run
sudo sh cuda_11.4.0_470.42.01_linux.run
# 配置环境变量
echo 'export PATH=/usr/local/cuda-11.4/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
1.4.2 安装交叉编译工具链
对于Jetson Nano,我们使用aarch64交叉编译工具链。
# 下载Linaro GCC工具链
wget https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz
# 解压到指定目录
sudo tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz -C /opt/
# 配置环境变量
echo 'export PATH=/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
# 验证安装
aarch64-linux-gnu-gcc --version
1.4.3 验证交叉编译环境
写一个简单的Hello World,交叉编译后在Jetson Nano上运行。
// hello.c
#include <stdio.h>
int main() {
printf("Hello from Jetson Nano!\n");
return 0;
}
// 交叉编译
aarch64-linux-gnu-gcc hello.c -o hello
// 将hello文件拷贝到Jetson Nano上
scp hello nvidia@192.168.1.100:/home/nvidia/
// 在Jetson Nano上运行
./hello
看到"Hello from Jetson Nano!",说明环境搭好了。
1.5 本章知识体系总览
下面这张图,是我自己画的本章知识结构。你可以把它当成一张地图,随时回来对照。
1.6 本章小结
这一章,我们走完了YOLO从v1到v8的进化之路,看到了嵌入式AI在安防、工业、自动驾驶等场景的真实落地案例。你也知道了Jetson Nano和RK3588各自的优劣势,并且亲手搭好了交叉编译环境。
说实话,环境搭建这一步,很多人会卡住。我当年第一次配TensorRT的时候,折腾了整整两天。但别怕,这门课里我会把每一步的坑都提前告诉你。