You Only Look Once
文章目录
- You Only Look Once
- 置信度定义
- 类别条件概率
- NMS
- np.maxmium
- np.argsort()
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] #xminy1 = bboxes[:, 1] #yminx2 = bboxes[:, 2] #xmaxy2 = bboxes[:, 3] #ymax# 根据矩阵惩罚,计算每个bbox的面积areas = (x2 - x1) * (y2 - y1)order = scores.argsort()[::-1]# 将score进行倒序排列;scores.argsort() 方法用于对张量(tensor)scores中的元素进行排序,但它返回的不是排序后的张量值#,而是原始张量中元素位置的索引,这些索引表示了如果排序后它们将处于什么位置# 进行非非极大抑制keep = [] # while order.size > 0:# 首先选取score最高的i = order[0]keep.append(i)# 计算当前选定的边界框与其他边界框的IoU相交区域的坐标范围# compute iou,根据左上角的最大x1,y1与右下角的最小值x2,y2,计算相交区域的边界框的坐标xx1 = np.maximum(x1[i], x1[order[1:]])yy1 = np.maximum(y1[i], y1[order[1:]])xx2 = np.minimum(x2[i], x2[order[1:]])yy2 = np.minimum(y2[i], y2[order[1:]])# 计算交集面积,w = np.maximum(1e-10, xx2 - xx1)h = np.maximum(1e-10, yy2 - yy1)inter = w * h# IOU:交集与并集之比 = inter/(areas[i](选定区域)+area(其他区域)-inter(重叠区域的计算了两次))iou = inter / (areas[i] + areas[order[1:]] - inter + 1e-14)#保留iou小于该阈值的元素索引inds = np.where(iou <= nms_thresh)[0]order = order[inds + 1]return keep
np.maxmium
比较两个数组元素,并返回最大值
# 示例1:两个一维数组
a = np.array([1, 2, 3, 4])
b = np.array([2, 3, 1, 5])
result = np.maximum(a, b)
print(result) # 输出:[2 3 3 5]# 示例2:一维数组与标量
a = np.array([1, 2, 3, 4])
result = np.maximum(a, 3)
print(result) # 输出:[3 3 3 4]# 示例3:两个多维数组
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [2, 1]])
result = np.maximum(a, b)
print(result) # 输出:[[5 6] [3 4]]
np.minmium与之类似
np.argsort()
argsort()函数是NumPy库中的一个函数,用于返回数组元素排序后的索引值。它可以用于一维或多维数组。
numpy.argsort(a, axis=-1, kind=‘quicksort’, order=None)
示例