yolo v1

130 阅读3分钟

流程

(1) 将一幅图像分成SxS个网格(grid cell),如果某个object的中心落在这个网格中,则这个网格就负责预测这个object。

image.png

(2) 每个网格预测B个bounding box(边界框)。

  • 每个bounding box除了预测位置之外,
  • 还要附带预测一个confidence值(置信度)。
  • 每个网格还要预测C个类别的分数。

YOLO在PASCAL VOC上的评估

  • 使用的参数:S = 7(网格大小),B = 2(每个网格预测的bounding box数量),C = 20(PASCAL VOC数据集中有20个标记的类别)。
  • 最终预测是一个7×7×30的张量。
image.png

Bounding Box的组成

  • 每个bounding box由5个预测组成:x, y, w, h, confidence,范围都是0~1。
  • (x, y) 坐标表示:边界框中心相对于网格单元边界的位置。一个小cell
  • 宽度和高度是相对于整个图像预测的。
  • confidence预测表示预测框与任何真实框之间的IOU(交并比)。

置信度的定义

  • 置信度定义为 Pr(Object)IOUpredtruthPr(Object) * IOU^{truth}_{pred}
  • Pr(Object) 是预测框中存在对象的概率
  • IOUpredtruthIOU^{truth}_{pred} 是预测框与真实框之间的交并比。

测试时的计算

  • 我们将条件类别概率单个框的置信度预测相乘。
  • Pr(ClassiObject)×[Pr(Object)×IOUpredtruth]=Pr(Classi)×IOUpredtruth \text{Pr}(\text{Class}_i \mid \text{Object}) \times [\text{Pr}(\text{Object}) \times \text{IOU}^\text{truth}_\text{pred}] = \text{Pr}(\text{Class}_i) \times \text{IOU}^\text{truth}_\text{pred}
  1. Pr(Classi​∣Object) :这是在给定存在一个对象的条件下,该对象属于类别 i 的概率。这是模型对特定类别的预测概率。
  2. Pr(Object) :这是预测框中存在对象的概率。这个值表示模型对于该预测框确实包含一个对象的置信度。
  3. IOUpredtruth​:这是预测的边界框与真实边界框之间的交并比(Intersection over Union)。它衡量了预测框与真实框的重叠程度,值越高表示预测越准确。
  4. Pr(Classi​) :这是模型对于对象属于类别 i 的预测概率,不依赖于对象存在的概率。这可以看作是模型对类别的先验知识。

loss

image.png

非极大值抑制(只是后处理预测阶段)

将一个网格放到图像上做目标检测时,目标往往会在多个网格出现,如下所示。在左边图像上放一个19×19的网格,汽车的只有一个中心点,应该只有一个网格包含汽车,但是实践中可能会出现多个网格都认为汽车中心点落在自己这里,自己这里检测到了汽车对象,如何解决这个问题?答案是用非极大值抑制方法。

image.png

第一个Bounding Box image.png 我们将条件类别概率单个框的置信度预测相乘。条件概率*条件本身发生的概率=全概率 Pr(ClassiObject)×[Pr(Object)×IOUpredtruth]=Pr(Classi)×IOUpredtruth \text{Pr}(\text{Class}_i \mid \text{Object}) \times [\text{Pr}(\text{Object}) \times \text{IOU}^\text{truth}_\text{pred}] = \text{Pr}(\text{Class}_i) \times \text{IOU}^\text{truth}_\text{pred}

  • 左边:首先计算在预测框中包含目标对象的条件下,该对象属于类别 i 的概率(条件类别概率),然后乘以预测框中包含目标对象的置信度(Pr(Object))和预测框的准确性(IOUpredtruth​)。
  • 右边:直接给出了在考虑预测框准确性的情况下,预测框属于类别 i 的概率。

第二个Bounding Box image.png 这里B=2,所以每个cell有两个预测框。

image.png

一个竖条是一个box产生,每一列通常表示每个box他的类别概率,这里是772=98个竖条。

先看第一行dog类:

image.png

先设置一个阈值<0.2就是0,再排序。第一行弄出来看:

image.png 计算图中前两个box的IOU如果大于一个阈值(0.5)就说明是识别同一个物体,将小的概率弄为0。 在算法中,这是一个循环,第一个 和 一以后所有比,然后第二个和 二以后所有比

最后每一个box取最大的类别。 image.png

参考

5-算法精讲-预测阶段后处理-NMS非极大值抑制-480P 清晰-AVC_哔哩哔哩_bilibili