锚盒 (Anchor Boxes)
在目标检测任务中,我们通常将图像划分为多个网格,每个网格负责检测落在其内的对象。但是,在之前的目标检测算法中,每个网格只能检测一个对象。如果一个网格中有多个对象的中心点,那么该网格只能检测其中的一个对象。
为了解决这个问题,YOLO算法引入了 Anchor Boxes 的概念。Anchor Boxes是预先定义的一组不同形状的边界框,用于覆盖不同形状的对象。通过使用 Anchor Boxes,每个网格不仅能检测多个对象,还能根据对象的形状,将其与最合适的 Anchor Box 关联。
在训练阶段,每个对象会被分配到其中心点所在的网格,以及与其形状最相似(即 IOU 最高)的 Anchor Box。在预测阶段,算法会为每个网格的每个 Anchor Box 输出一个目标向量,然后根据对象的概率和边界框的位置,确定对象的位置和类别。
值得注意的是,Anchor Boxes的数量和形状是可以根据任务的需求进行调整的。在实际应用中,通常会通过聚类算法(如 K-means 算法)在训练数据集上的边界框尺寸来确定 Anchor Boxes 的数量和形状,以便更好地适应对象的尺寸分布。
在YOLO算法中,非极大值抑制(NMS)是按照类别进行的,而不是按照Anchor Box进行的。这意味着,如果一个物体类别的多个检测框(可能来自不同的Anchor Box)重叠在一起,那么它们就会被NMS处理,从而只保留其中的一个检测框。这是为了避免同一物体的多个检测框被认为是多个不同的物体。所以,即便物体的检测框位于不同的Anchor Box,它们仍然可能会相互抑制。