流程
(1) 将一幅图像分成SxS个网格(grid cell),如果某个object的中心落在这个网格中,则这个网格就负责预测这个object。
(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的张量。
Bounding Box的组成:
- 每个bounding box由5个预测组成:x, y, w, h, confidence,范围都是0~1。
- (x, y) 坐标表示:边界框中心相对于网格单元边界的位置。一个小cell
- 宽度和高度是相对于整个图像预测的。
- confidence预测表示预测框与任何真实框之间的IOU(交并比)。
置信度的定义:
- 置信度定义为
- Pr(Object) 是预测框中存在对象的概率
- 是预测框与真实框之间的交并比。
测试时的计算
- 我们将条件类别概率与单个框的置信度预测相乘。
- Pr(Classi∣Object) :这是在给定存在一个对象的条件下,该对象属于类别 i 的概率。这是模型对特定类别的预测概率。
- Pr(Object) :这是预测框中存在对象的概率。这个值表示模型对于该预测框确实包含一个对象的置信度。
- IOUpredtruth:这是预测的边界框与真实边界框之间的交并比(Intersection over Union)。它衡量了预测框与真实框的重叠程度,值越高表示预测越准确。
- Pr(Classi) :这是模型对于对象属于类别 i 的预测概率,不依赖于对象存在的概率。这可以看作是模型对类别的先验知识。
loss
非极大值抑制(只是后处理预测阶段)
将一个网格放到图像上做目标检测时,目标往往会在多个网格出现,如下所示。在左边图像上放一个19×19的网格,汽车的只有一个中心点,应该只有一个网格包含汽车,但是实践中可能会出现多个网格都认为汽车中心点落在自己这里,自己这里检测到了汽车对象,如何解决这个问题?答案是用非极大值抑制方法。
第一个Bounding Box
我们将条件类别概率与单个框的置信度预测相乘。条件概率*条件本身发生的概率=全概率
- 左边:首先计算在预测框中包含目标对象的条件下,该对象属于类别 i 的概率(条件类别概率),然后乘以预测框中包含目标对象的置信度(Pr(Object))和预测框的准确性(IOUpredtruth)。
- 右边:直接给出了在考虑预测框准确性的情况下,预测框属于类别 i 的概率。
第二个Bounding Box
这里B=2,所以每个cell有两个预测框。
一个竖条是一个box产生,每一列通常表示每个box他的类别概率,这里是772=98个竖条。
先看第一行dog类:
先设置一个阈值<0.2就是0,再排序。第一行弄出来看:
计算图中前两个box的IOU如果大于一个阈值(0.5)就说明是识别同一个物体,将小的概率弄为0。
在算法中,这是一个循环,第一个 和 一以后所有比,然后第二个和 二以后所有比
最后每一个box取最大的类别。
参考