You Only Look Once
Yolov1直接采用网络特征输出,实现置信度预测、分类、边界框回归;
核心内容总结:
- 输入图像划分为 S × S 网格。如果对象的中心落入网格单元中,则该网格单元负责检测该对象;
- 每个网格单元预测 B 个边界框以及这些框的置信度分数,这些置信度分数反映了模型对盒子包含对象的置信度,以及模型认为盒子预测的准确性。
- 每个边界框由 5 个预测组成:x、y、w、h 和置信度。 (x, y) 坐标表示相对于网格单元边界的框中心。宽度和高度是相对于整个图像预测的。
- 置信度预测表示预测框与任何地面实况框之间的 IOU。每个网格单元还预测 C 个条件类概率 Pr(Classi|Object)。这些概率以包含对象的网格单元为条件。无论框 B 的数量如何,我们仅预测每个网格单元的一组类概率。
在测试时,我们将条件类概率与单个框置信度预测相乘。
置信度定义
将图像划分S*S的规则格网,根据格网分别进行边界框-置信度预测以及格网类别的预测,置信度为类别概率与之边界框真实值与预测值的交并比;每个cell预测B个边界框与置信度。
类别条件概率
类别概率是每个cell的独立条件,与边界框数量无关;
NMS
def nms(bboxes, scores, nms_thresh):
""""Pure Python NMS."""
x1 = bboxes[:, 0] #xmin
y1 = bboxes[:, 1] #ymin
x2 = bboxes[:, 2] #xmax
y2 = bboxes[:, 3] #ymax
# 根据矩阵惩罚,计算每个bbox的面积
areas = (x2 - x1