像Faster R-CNN这样的两阶段检测器通过先提出感兴趣区域再进行分类来获得高准确性。然而,这种顺序处理过程可能需要大量计算。单阶段检测器提供了一种不同的方法,通过在网络的一次前向传播中完成定位和分类来优先考虑速度。此类别中最具影响力的系列是YOLO,即“你只看一次”。YOLO理念:将检测视为回归问题YOLO对待目标检测的方式与基于区域提议的方法截然不同。YOLO不是首先识别潜在的目标区域,而是将检测视为一个回归问题,在一次评估中直接从整个图像预测边界框和类别概率。其核心思路是将输入图像划分为一个 $S \times S$ 的网格。每个网格单元负责检测其中心落在此单元内的目标。对于每个网格单元,网络预测:边界框: 固定数量 ($B$) 的边界框。每个边界框预测包含5个值:$(x, y)$:框中心的坐标,相对于网格单元的边界。$(w, h)$:框的宽度和高度,相对于整个图像的大小。置信度分数: 一个分数,反映模型对框中包含目标以及边界框预测准确性的置信程度。类别概率: 对于 $C$ 个类别中的每个类别,预测条件类别概率 $Pr(\text{类别}_i | \text{目标})$。此概率以网格单元中存在目标为前提。整个过程都在一个单一的卷积网络中进行。网络接收图像作为输入,并输出一个形状为 $S \times S \times (B \times 5 + C)$ 的三维张量。这个张量编码了所有网格单元的所有预测。digraph YOLO_Concept { rankdir=LR; node [shape=rect, style=rounded, fontname="sans-serif", fontsize=10]; edge [fontname="sans-serif", fontsize=9]; splines=ortho; subgraph cluster_input { label = "输入图像"; bgcolor="#e9ecef"; img [label="输入图像", shape=box, style=filled, fillcolor="#dee2e6"]; } subgraph cluster_cnn { label = "单次CNN处理"; bgcolor="#e9ecef"; cnn [label="CNN特征提取器", shape=cds, style=filled, fillcolor="#ced4da"]; } subgraph cluster_grid { label = "逻辑网格 (S x S)"; bgcolor="#e9ecef"; node [shape=square, style="filled,solid", color="#868e96", fillcolor="#adb5bd", fixedsize=true, width=0.3, height=0.3, label=""]; edge [style=invis]; g11 -> g12 -> g13; g13 -> g1n [label="...", fontsize=8]; g21 -> g22 -> g23; g23 -> g2n [label="...", fontsize=8]; g31 -> g32 -> g33; g33 -> g3n [label="...", fontsize=8]; g31 -> gn1 [label=".", style=dotted]; g32 -> gn2 [label=".", style=dotted]; g33 -> gn3 [label=".", style=dotted]; g11 -> g21 -> g31; g12 -> g22 -> g32; g13 -> g23 -> g33; g22 [style="filled,solid", color="#1c7ed6", fillcolor="#74c0fc", label="单元格", fontcolor=black, fontsize=9]; // 示例单元格 } subgraph cluster_output { label = "一个单元格的输出张量切片"; bgcolor="#a5d8ff"; node [shape=record, style=filled, fillcolor="#e9ecef", fontname="sans-serif", fontsize=9]; out [label="{ <f0> 框1 (x,y,w,h, 置信度) | <f1> 框2 (...) | ... | <fB> 框B (...) | <fC> 类别概率 (C个类别) }"]; } img -> cnn [minlen=2]; cnn -> grid [minlen=2, label="生成基于网格的\n预测", fontsize=9]; grid:g22 -> out [minlen=2, label="负责中心在此处的\n目标", fontsize=9]; }YOLO模型将输入图像划分为网格。单个CNN处理图像,并且对于每个网格单元(例如高亮显示的蓝色单元格),它预测多个边界框和类别概率,这些都编码在一个输出张量中。每个网格单元内预测框 ($box_j$) 的置信度分数正式定义为: $$ \text{置信度}_j = Pr(\text{目标}) \times IOU(\text{预测框}_j, \text{真实框}) $$ 这里,$Pr(\text{目标})$ 是与预测相关的网格单元中存在目标中心的概率,$IOU(\text{预测框}_j, \text{真实框})$ 是预测框 ($pred_j$) 和真实框之间的交并比。如果该单元格中没有目标,则 $Pr(\text{目标})$ 应为零,从而使置信度分数为零。在推理过程中,每个边界框的最终类别特定置信度分数通过将框置信度分数乘以条件类别概率计算得出: $$ Pr(\text{类别}_i | \text{目标}) \times Pr(\text{目标}) \times IOU(\text{预测框}_j, \text{真实框}) = Pr(\text{类别}_i) \times IOU(\text{预测框}_j, \text{真实框}) $$ 这个分数表示特定类别存在于该框中的概率以及预测框与目标拟合的程度。低于某个阈值的框将被丢弃,并应用非极大值抑制(NMS)来移除同一目标的冗余重叠框。演进:解决YOLO的局限原始的YOLO(YOLOv1)速度非常快,但存在局限性,特别是在检测靠得很近的小目标(因为每个网格单元只预测有限数量的框和一组类别概率)以及与两阶段方法相比实现精确的定位方面。后续版本引入了显著的改进:YOLOv2 (YOLO9000): 引入了锚框,类似于Faster R-CNN和SSD中使用的锚框。网络不是直接预测边界框的尺寸,而是预测相对于预定义锚框形状的偏移量。这使得网络更容易学习预测常见的目标形状并提高了召回率。YOLOv2还使用了更高分辨率的输入,结合了批量归一化,并采用了新的骨干网络(Darknet-19)。值得一提的是,它在检测(COCO)和分类(ImageNet)数据集上联合训练,使其能够检测到未见过带标签边界框的目标类别。YOLOv3: 通过引入多尺度预测进一步完善了方法。它使用骨干网络(现在是Darknet-53)不同阶段的特征图,在三种不同的空间分辨率下(分别下采样32、16和8倍)进行预测。这大幅改善了小目标的检测能力。YOLOv3还将框内类别预测从使用softmax切换为为每个类别使用独立的逻辑分类器,从而允许多标签预测(例如,一个目标同时是“人”和“女人”)。YOLOv4、YOLOv5及后续进展: 发展持续迅速,重心在于优化速度和准确性之间的平衡。这些版本通常包含一系列架构和训练方面的增强:骨干网络改进: 使用更高效、更强大的骨干网络(例如CSPDarknet)。颈部架构: 采用特征聚合技术,例如路径聚合网络(PANet)或特征金字塔网络(FPN),以更有效地组合来自不同尺度的特征。训练策略(“免费赠品包”): 在训练期间应用先进的数据增强(例如Mosaic、MixUp)和正则化技术,以提高泛化能力而不会增加推理成本。架构模块(“特制赠品包”): 像Mish激活函数或空间金字塔池化(SPP)这样的技术,它们会略微增加推理成本,但显著提高准确性。值得注意的是,“YOLOv5”及后续版本(如YOLOv6、v7、v8、YOLO-NAS等)代表了一个通常与特定代码库(如Ultralytics)相关的演进路线,而非由单一研究论文明确定义每个版本,从而形成了一种持续发展的方法。单阶段、基于网格的回归这一核心原理保持不变。优点与缺点优点:速度: 主要优势。YOLO一次性处理整个图像,使其速度极快,适合实时应用(例如视频处理、机器人技术)。全局上下文: YOLO在进行预测时能看到整个图像,因此它隐含地编码了上下文信息。与滑动窗口或区域提议方法相比,这使其更不容易出现背景误判(将背景区域预测为目标)。泛化能力: 学习目标的可泛化表示,与某些其他方法相比,在新情境或意外输入上表现良好。缺点:小目标: 难以检测非常小的目标,特别是当它们聚集在一起时。网格分辨率限制了在近距离内可检测到的目标数量。后期版本中的多尺度预测缓解了这一点,但并未完全消除。定位准确性: 虽然自v1以来已显著改善,但对于某些要求高精度边界框的应用,其定位准确性可能仍略低于最新的两阶段检测器。对宽高比的敏感性: 性能可能取决于目标形状和宽高比与所用锚框的匹配程度。实现注意事项许多预训练的YOLO模型可在各种深度学习框架(PyTorch、TensorFlow/Keras)中获得。这些模型在COCO等大型数据集上训练,提供了很好的起点。在自定义数据集上微调预训练的YOLO模型是将其应用于特定检测任务的常见做法。像Ultralytics YOLO这样的库或MMDetection这样的框架提供了用于训练和部署基于YOLO的检测器的简化工具。总而言之,YOLO系列代表了目标检测发展中的一个重要分支,它以牺牲少量定位准确性(与最好的两阶段模型相比)为代价,换取了处理速度上的显著提升。其直接回归方法和持续改进使其成为实时计算机视觉应用的“主力军”。