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 精度速度双杀,但模型大了
个人建议: 如果你是第一次接触YOLO部署,从YOLOv5或YOLOv8入手。v5的文档最全,v8的精度最高。我在实际项目中,边缘端首选v5s,云端用v8x。

1.2 嵌入式AI应用场景:到底能用在哪儿?

你可能会问:为什么非要在嵌入式设备上跑YOLO?云端不香吗?

嗯,这里有个关键点:延迟、带宽、隐私。

举个例子。我去年做一个工厂质检项目,摄像头拍下流水线上的零件,如果传回云端检测,来回至少200ms延迟。产线速度是每秒一个零件,根本来不及。直接在Jetson Nano上跑YOLOv5s,推理只要30ms,实时报警。

  • 智慧安防:门禁人脸、异常行为检测,数据不出设备
  • 工业质检:表面缺陷、装配检测,毫秒级响应
  • 自动驾驶:车道线、行人、交通标志,必须本地实时
  • 农业无人机:作物识别、病虫害检测,边缘计算省流量
  • 消费电子:手机拍照、AR眼镜,功耗敏感
避坑指南: 我曾经在一个无人机项目里,天真地想用YOLOv4-tiny跑在树莓派4上。结果帧率只有5FPS,根本没法用。后来换了Jetson Nano,直接跑到25FPS。选对硬件,比调参重要十倍。

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部署难度 低(有官方示例) 中(需手动优化)
我的选择: 本课程以Jetson Nano为主线。原因很简单——TensorRT太强了,而且踩坑的人多,你遇到问题搜一下就有答案。RK3588我会在进阶章节作为对比案例讲解。

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
小技巧: 如果你觉得手动装太麻烦,可以直接用NVIDIA官方提供的JetPack SDK。它包含了交叉编译工具链、TensorRT、OpenCV等所有依赖。我建议新手直接用JetPack,省心。

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章 知识体系总览 嵌入式YOLO部署 YOLO发展史 (v1~v8) 嵌入式AI应用场景 开发板选型对比 交叉编译环境搭建 本章核心目标 理解YOLO演进脉络 → 明确嵌入式AI落地场景 → 选对开发板 → 搭建可复用的交叉编译环境 为后续章节的模型转换、量化、部署打下坚实基础

1.6 本章小结

这一章,我们走完了YOLO从v1到v8的进化之路,看到了嵌入式AI在安防、工业、自动驾驶等场景的真实落地案例。你也知道了Jetson Nano和RK3588各自的优劣势,并且亲手搭好了交叉编译环境。

说实话,环境搭建这一步,很多人会卡住。我当年第一次配TensorRT的时候,折腾了整整两天。但别怕,这门课里我会把每一步的坑都提前告诉你。