1. YOLO初探:目标检测概述、YOLO发展史(v1到v8)、YOLO核心思想(You Only Look Once)、YOLO应用场景
1.1 目标检测到底是什么?
先问大家一个问题:图像分类和目标检测,区别在哪?
图像分类,就是给一张图打标签——"这是一只猫"。
目标检测呢?它不仅要告诉你"这里有猫",还要框出猫的位置——"猫在左上角这个框里"。
说白了,目标检测 = 分类 + 定位。
我刚开始做这个方向时,总觉得分类做好了,检测不就是顺手的事吗?
后来才发现,完全不是这么回事。一张图里可能有多个物体,大小不一,相互遮挡,还要实时输出位置——这复杂度直接翻了好几倍。
- 每个目标的类别(Class)
- 每个目标的位置(Bounding Box,即边界框)
- 每个目标的置信度(Confidence Score)
1.2 目标检测的两种主流思路
在YOLO出现之前,业界主要走两条路:
| 流派 | 代表算法 | 核心思路 | 速度 | 精度 |
|---|---|---|---|---|
| 两阶段(Two-stage) | R-CNN、Fast R-CNN、Faster R-CNN | 先提候选区域,再分类+回归 | 慢 | 高 |
| 单阶段(One-stage) | YOLO、SSD | 一步到位,直接预测类别和位置 | 快 | 稍低(早期) |
两阶段方法,你可以理解为"先猜可能的位置,再仔细看是什么"。
单阶段方法呢?"一眼扫过去,直接说结果"。
YOLO就是单阶段里最出名的那个。它把检测问题直接当作回归问题来处理——输入一张图,输出一堆框和类别。一步到位,不拖泥带水。
1.3 YOLO的核心思想:You Only Look Once
YOLO这个名字,本身就是个宣言。
You Only Look Once——你只看一次。
什么意思?
传统方法(比如滑动窗口+分类器)要在图上跑很多次,不同位置、不同尺度,反复看。
YOLO不这么干。它把整张图喂进一个神经网络,一次前向传播,直接输出所有检测结果。
我当年第一次跑通YOLOv1时,真的被震撼到了。
一张图进去,几十毫秒出来,框和标签全有了。虽然精度不如当时的Faster R-CNN,但那个速度——每秒几十帧——在工程上完全是另一个维度的东西。
- 将输入图像划分为 S×S 的网格(如7×7)
- 每个网格负责预测 B 个边界框(如2个)
- 每个边界框输出:x, y, w, h, confidence
- 每个网格同时预测 C 个类别的概率
- 最终输出张量形状:S × S × (B×5 + C)
这里有个关键点:每个网格只负责检测中心点落在该网格内的物体。
如果一个物体跨了多个网格,只有中心点所在的那个网格对它负责。
嗯,这个设计后来被证明是YOLOv1的一个瓶颈——小物体和密集物体容易漏检。但它的简洁性,为后续版本铺平了路。
1.4 YOLO发展史:从v1到v8
YOLO的发展史,就是一部"速度与精度"的平衡史。
我按时间线给大家捋一遍:
| 版本 | 年份 | 作者 | 核心改进 | 我的评价 |
|---|---|---|---|---|
| YOLOv1 | 2016 | Joseph Redmon | 开创性工作,端到端检测 | 粗糙但惊艳 |
| YOLOv2 | 2017 | Joseph Redmon | 引入Anchor Box、Batch Normalization | 精度大幅提升 |
| YOLOv3 | 2018 | Joseph Redmon | 多尺度预测、Darknet-53骨干 | 经典之作 |
| YOLOv4 | 2020 | Alexey Bochkovskiy | CSPDarknet、Mish激活、数据增强 | 工程集大成者 |
| YOLOv5 | 2020 | Ultralytics | PyTorch实现、Focus结构、自动锚框 | 社区最火 |
| YOLOv6 | 2022 | 美团 | RepVGG、工业部署优化 | 工业级 |
| YOLOv7 | 2022 | Chien-Yao Wang | E-ELAN、重参数化 | 速度精度双优 |
| YOLOv8 | 2023 | Ultralytics | Anchor-Free、C2f模块、任务解耦 | 当前主流 |
这里有个小故事。
YOLOv3之后,Joseph Redmon宣布退出计算机视觉研究,原因是担心技术被滥用。
我当时看到这个消息,挺感慨的。一个开创了YOLO系列的人,在最火的时候选择了离开。
但YOLO没有停。v4、v5、v6、v7、v8,一代接一代,每一版都在刷新SOTA。
我曾经在项目里直接拿YOLOv3的预训练模型去检测小目标,结果惨不忍睹。
后来才发现,YOLOv3的原始输出层对32×32以下的物体很不友好。
如果你要检测小物体,建议用v5或v8的P6模型,或者自己调整anchor尺寸。
1.5 YOLO应用场景
YOLO能火,不只是因为算法好,更因为它真的能落地。
我这些年接触过的项目,YOLO几乎覆盖了所有视觉检测场景:
- 安防监控:行人检测、车辆检测、异常行为识别。实时性要求高,YOLO是首选。
- 自动驾驶:车辆、行人、交通标志、车道线检测。虽然现在很多方案用Transformer,但YOLO仍然是轻量级部署的标配。
- 工业质检:产品表面缺陷检测、零件装配检测。我做过一个PCB板缺陷检测项目,YOLOv5s在边缘设备上跑到了30FPS,完全够用。
- 医疗影像:细胞检测、病灶定位。虽然精度要求极高,但YOLO可以作为初筛工具。
- 零售与物流:商品识别、货架巡检、包裹分拣。速度就是钱,YOLO在这方面优势明显。
- 农业与渔业:水果计数、农作物病害检测、鱼群监测。我见过有人用YOLOv8做草莓成熟度检测,效果出奇的好。
你想想看,一个算法能在这么多领域同时落地,说明它的泛化能力和工程友好度是真的强。
1.6 YOLO知识体系总览
下面这张图,是我自己梳理的YOLO知识体系。你可以把它当作整个课程的地图:
1.7 本章小结
这一章,我们聊了:
- 目标检测的本质——分类+定位
- YOLO的核心思想——只看一次,一步到位
- YOLO从v1到v8的发展脉络——每一版都在解决上一版的问题
- YOLO的落地场景——从安防到农业,遍地开花
我个人觉得,YOLO最厉害的地方不是某个版本的精度有多高,而是它让目标检测真正"可用"了。
在YOLO之前,做实时检测需要昂贵的硬件和复杂的优化。YOLO之后,一个普通的GPU甚至嵌入式设备,都能跑起来。
这就是工程的力量。
如果你刚接触YOLO,我建议直接从YOLOv8开始学。
它集成了前几代的所有优点,文档完善,社区活跃。
等跑通了基础流程,再回头去看v1到v7的演进,你会理解得更深。