coco如何计算map的,recall如何插值的

不同召回率阈值是通过将累积的真阳性数量除以所有正样本的数量来产生的。在代码中,召回率阈值 `recThrs` 是预定义的,是用于评估的标准参数。具体步骤如下:

1. **预定义召回率阈值:**
   - `recThrs` 是在参数 `p` 中预定义的,是一组固定的值,用于在评估过程中衡量不同的召回率水平。
   - 例如,`recThrs` 可能是一个从 0 到 1 的等间隔数组,用于表示从 0% 到 100% 的召回率。

2. **计算每个 IoU 阈值下的召回率:**
   - 对于每个 IoU 阈值 `t`,通过累积的真阳性 `tp_sum` 和假阳性 `fp_sum` 来计算召回率 `rc` 和精度 `pr`。
   - 具体计算如下:
     ```python
     rc = tp / npig  # 计算召回率
     pr = tp / (fp + tp + np.spacing(1))  # 计算精度
     ```

3. **将累积的召回率与预定义的召回率阈值匹配:**
   - 使用 `np.searchsorted` 函数将计算得到的召回率数组 `rc` 与预定义的召回率阈值 `recThrs` 进行匹配。
   - `np.searchsorted` 会返回 `rc` 中大于等于 `recThrs` 的位置索引。
     ```python
     inds = np.searchsorted(rc, p.recThrs, side='left')
     ```

4. **插值计算对应的精度值:**
   - 根据找到的索引 `inds`,从计算得到的精度数组 `pr` 中提取对应位置的精度值,并存储到 `precision` 数组中。
   - 如果索引超出范围,会捕获异常并继续处理。
     ```python
     try:
         for ri, pi in enumerate(inds):
             q[ri] = pr[pi]
             ss[ri] = dtScoresSorted[pi]
     except:
         pass
     ```

5. **存储结果:**
   - 将计算得到的精度和得分分别存储到 `precision[t, :, k, a, m]` 和 `scores[t, :, k, a, m]` 中。

以下是代码中相关部分的详细解释:

```python
for t, (tp, fp) in enumerate(zip(tp_sum, fp_sum)):
    tp = np.array(tp)
    fp = np.array(fp)
    nd = len(tp)
    rc = tp / npig  # 计算召回率
    pr = tp / (fp + tp + np.spacing(1))  # 计算精度
    q = np.zeros((R,))
    ss = np.zeros((R,))

    if nd:
        recall[t, k, a, m] = rc[-1]
    else:
        recall[t, k, a, m] = 0

    pr = pr.tolist()
    q = q.tolist()

    for i in range(nd - 1, 0, -1):
        if pr[i] > pr[i - 1]:
            pr[i - 1] = pr[i]

    inds = np.searchsorted(rc, p.recThrs, side='left')

    try:
        for ri, pi in enumerate(inds):
            q[ri] = pr[pi]
            ss[ri] = dtScoresSorted[pi]
    except:
        pass

    precision[t, :, k, a, m] = np.array(q)
    scores[t, :, k, a, m] = np.array(ss)
```

通过这些步骤,预定义的召回率阈值 `recThrs` 被用作基准,计算得到的召回率 `rc` 和精度 `pr` 被匹配和插值,最终得到不同召回率阈值下的精度值 `precision[t, :, k, a, m]`。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值