YOLO:You Only Look Once
YOLO:You Only Look Once
YOLO 是 “You Only Look Once” 的缩写,它是一种非常流行和强大的实时目标检测 (Object Detection) 算法系列。与传统的需要多个阶段(如 R-CNN 系列先生成候选区域再进行分类)的目标检测方法不同,YOLO 的核心思想是将目标检测视为一个回归问题,直接从整个图像中预测边界框 (Bounding Boxes) 和类别概率 (Class Probabilities)。
核心思想与工作原理
一次性处理 (Single Pass): YOLO 将输入图像调整到固定尺寸,然后将其划分为一个 S x S 的网格 (Grid)。
网格单元负责检测: 如果一个物体的中心落入某个网格单元 (Grid Cell) 中,那么这个网格单元就负责检测该物体。
预测输出: 每个网格单元会预测:
B 个边界框 (Bounding Boxes): 每个边界框包含 5 个预测值:(x, y, w, h, confidence)。
(x, y) 是边界框中心相对于该网格单元边界的坐标。
(w, h) 是边界框的宽度和高度,相对于整个图像的尺寸。
confidence 是置信度得分,表示该边界框包含物体的可能性以及边界框预测的准确性 (Pr(Object) * IOU(pred, truth))。
C 个类别概率 (Class Probabilities): Pr(Class_i | Object)。这是在该网格单元包含物体的前提下,该物体属于第 i 个类别的条件概率。
最终检测结果: 将每个网格单元预测的类别概率与边界框的置信度相乘,得到每个边界框特定类别的置信度分数。然后使用非极大值抑制 (Non-Maximum Suppression, NMS) 来移除重叠度很高的冗余边界框,保留最终的检测结果。
YOLO 系列的主要优势
速度快 (Fast): 由于其一次性处理整个图像的特性,YOLO 的检测速度非常快,能够达到实时处理的要求,非常适合视频流处理和需要快速响应的应用。
全局视角 (Global Context): YOLO 在进行预测时会看到整个图像,因此它能更好地利用全局上下文信息,相比于只看局部区域的方法,它在区分背景和物体时产生的背景误报 (False Positives) 较少。
学习通用特征 (Learns Generalizable Representations): YOLO 学习到的特征具有较好的泛化能力,当用于新领域或面对意想不到的输入时,其表现通常优于其他一些检测方法。
YOLO 系列的演进
YOLO 并非单一模型,而是一个不断发展的算法家族,每一代都在前一代的基础上进行改进:
YOLOv1 (2016):
开创性的工作,首次提出 YOLO 思想。
速度极快,但对小物体的检测效果不佳,定位精度相对较低,每个网格单元只能预测一个类别。
YOLOv2 / YOLO9000 (2017):
引入锚框 (Anchor Boxes): 借鉴了 Faster R-CNN 的思想,预定义一组不同尺寸和长宽比的锚框,使得模型更容易学习预测常见的物体形状,提高了召回率和定位精度。
使用 Darknet-19 作为骨干网络 (Backbone)。
多尺度训练 (Multi-Scale Training): 提高对不同尺寸输入的鲁棒性。
YOLO9000: 能够同时检测超过 9000 个类别,通过 WordTree 结合检测数据和分类数据进行联合训练。
YOLOv3 (2018):
使用 Darknet-53 作为骨干网络: 更深、更强大,提高了精度。
多尺度预测 (Predictions across Scales): 在三个不同的特征图尺度上进行预测,显著改善了对小物体的检测效果。
类别预测改进: 对每个边界框独立进行类别预测(使用 logistic classifiers),而不是像 v1 那样每个格子只预测一个类别,解决了多标签检测问题(一个物体可能属于多个类别)。
成为当时速度和精度平衡得最好的检测器之一,应用非常广泛。
YOLOv4 (2020):
集大成者: 作者将当时各种有效的 CNN 优化技巧(称为 "Bag of Freebies" 和 "Bag of Specials")整合到 YOLOv3 中。
骨干网络: CSPDarknet53。
Neck 部分: 使用 SPP (Spatial Pyramid Pooling) 和 PANet (Path Aggregation Network)。
优化: Mish 激活函数、DropBlock 正则化、CmBN、数据增强 (Mosaic, Self-Adversarial Training) 等。
目标是在单个 GPU 上实现速度和精度的最佳平衡。
YOLOv5 (2020):
由 Ultralytics 公司发布(注意:并非 YOLOv1-v3 原作者团队)。
基于 PyTorch 实现: 非常易于使用、训练和部署,社区活跃,文档完善。
模型结构: 借鉴了 YOLOv4 的许多思想,如 CSPNet 结构、PANet Neck。
特点: 提供了多种尺寸的模型 (n, s, m, l, x),方便用户根据需求选择。训练速度快,部署方便,在工业界非常流行。
(关于 v5 是否算“正统”YOLO 曾有讨论,但其广泛应用和影响力是毋庸置疑的)
YOLOR (2021):
引入了隐式知识 (Implicit Knowledge) 和显式知识 (Explicit Knowledge) 的概念,并将其统一到一个网络中,进一步提升了性能。
YOLOX (2021):
由旷视科技提出。
Anchor-Free: 采用了无锚框 (Anchor-Free) 的设计,简化了检测头。
Decoupled Head: 将分类和定位任务的预测头分开。
SimOTA: 提出了一种先进的标签分配策略。
YOLOv6 (2022):
由美团视觉智能部发布。
同样针对工业应用设计,注重速度和精度的平衡。
也采用了 Decoupled Head、Anchor-Free 等设计,并引入了新的骨干网络和 Neck 结构 (EfficientRep Backbone, Rep-PAN Neck)。
YOLOv7 (2022):
由 YOLOv4 的部分原作者发布。
在 V100 GPU 上的速度和精度达到了新的 SOTA (State-of-the-Art) 水平。
引入了扩展的高效层聚合网络 (E-ELAN)、基于级联模型的模型缩放等技术。
训练策略上也有很多优化。
YOLOv8 (2023):
由 Ultralytics (YOLOv5 的团队) 发布。
在 YOLOv5 的基础上进行了大量改进,也采用了 Anchor-Free 和 Decoupled Head 等设计。
提供了新的骨干网络和 Neck 结构。
不仅支持目标检测,还集成了实例分割 (Instance Segmentation) 和图像分类 (Image Classification) 等任务。
同样非常易用,提供了多种尺寸模型。
YOLOv9 (2024):
引入了可编程梯度信息 (Programmable Gradient Information, PGI) 来解决信息丢失问题。
提出了全新的通用高效层聚合网络 (Generalized Efficient Layer Aggregation Network, GELAN)。
在 COCO 数据集上取得了非常好的性能。
其他变种:
YOLO-NAS (2023): 由 Deci AI 提出,使用神经架构搜索 (Neural Architecture Search) 技术自动设计网络结构,性能优异。
DAMO-YOLO (2022): 阿里巴巴达摩院提出,结合了 NAS、重参数化、蒸馏等技术。
局限性与挑战 (尤其早期版本)
小物体检测: 早期版本对小物体的检测效果相对较差,后续版本通过多尺度预测等方式显著改善。
定位精度: 相对于一些两阶段方法 (如 Faster R-CNN),YOLO 的定位精度有时会稍低,但也在不断改进。
密集物体: 当物体非常密集且相互靠近时(如一群鸟),检测可能会比较困难。
应用领域
YOLO 系列因其速度和效率,在众多领域得到了广泛应用:
自动驾驶: 车辆、行人、交通标志检测。
安防监控: 人流量统计、异常行为检测。
机器人: 物体抓取、导航。
医疗影像: 病灶检测。
零售业: 货架商品识别、库存管理。
无人机: 地面目标跟踪。
总结
YOLO 系列算法通过其创新的 “You Only Look Once” 思想,彻底改变了目标检测领域,使得实时高精度检测成为可能。从最初的 YOLOv1 到最新的 YOLOv9 以及各种变种,该系列不断吸收新的研究成果,在速度、精度、易用性等方面持续进化,是当前计算机视觉领域最重要和最活跃的研究方向之一,并在工业界得到了广泛的应用和验证。

浙公网安备 33010602011771号