YoloV1模型

You Only Look Once

在这里插入图片描述
Yolov1直接采用网络特征输出,实现置信度预测、分类、边界框回归;
核心内容总结:

  1. 输入图像划分为 S × S 网格。如果对象的中心落入网格单元中,则该网格单元负责检测该对象;
  2. 每个网格单元预测 B 个边界框以及这些框的置信度分数,这些置信度分数反映了模型对盒子包含对象的置信度,以及模型认为盒子预测的准确性。
  3. 每个边界框由 5 个预测组成:x、y、w、h 和置信度。 (x, y) 坐标表示相对于网格单元边界的框中心。宽度和高度是相对于整个图像预测的。
  4. 置信度预测表示预测框与任何地面实况框之间的 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) * (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)
在这里插入图片描述
示例

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云朵不吃雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值