滑动窗口的局限性
- 无法精确输出边界框:窗口大小是预设的,无法适应不同长宽比或大小的目标(如瘦高的人 vs 宽扁的汽车)。需要结合图像金字塔来检测多尺度目标,但计算成本高。传统的滑动窗口方法在目标检测中难以准确预测物体的边界框位置和形状。
YOLO算法(You Only Look Once)的核心思想
-
网格划分:
- 将输入图像划分为固定数量的网格(如示例中的3×3九宫格,实际应用中常用更精细的网格如19×19)。
- 每个网格单元负责预测一个目标及其边界框。
-
输出向量:
- 每个网格单元输出一个固定维度的向量(如示例中的8维向量),包含以下信息:
pc
:置信度(是否有目标,0或1)。bx, by, bh, bw
:边界框参数:(bx, by)
:目标中心点相对于当前网格单元的归一化坐标(取值[0,1])。(bh, bw)
:边界框高度和宽度相对于网格单元的比例(可大于1,允许跨网格预测)。
c1, c2, c3
:类别概率(如汽车、行人、摩托车等)。
- 每个网格单元输出一个固定维度的向量(如示例中的8维向量),包含以下信息:
-
最终输出:
-
对于3×3网格,输出张量形状为
3×3×8
(网格数×向量维度)。 -
更精细的网格(如19×19)可减少同一网格内出现多个目标的冲突。
-
YOLO的优势
- 精确的边界框预测:
- 直接回归边界框参数(
bx, by, bh, bw
),支持任意长宽比和跨网格的预测。
- 直接回归边界框参数(
- 单次检测效率高:
- 通过单次前向传播同时预测所有网格的目标和位置,速度快。
- 网格细化提升效果:
- 使用更密集的网格(如19×19)可减少多目标重叠问题,提高检测精度。
边界框参数详解
- 中心点坐标
(bx, by)
:- 相对于当前网格的局部坐标,范围[0,1]。
- 例如:
bx=0.5
表示中心位于网格水平方向中点。
- 尺寸比例
(bh, bw)
:- 边界框高度/宽度与网格单元尺寸的比例。
- 取值可大于1(如
bh=1.5
表示高度是网格高度的1.5倍),允许预测比网格更大的框。
注意事项
- 目标归属规则:若目标的中心点落在某个网格内,则由该网格负责预测(即使目标部分超出网格)。
- 多目标处理:每个网格通常仅预测一个目标,密集目标需依赖更细的网格划分或高级改进算法(如YOLOv2/v3的多锚框机制)。
通过这种设计,YOLO在保持高效性的同时,实现了比滑动窗口更精确的边界框检测。