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

2024-06-15 05:28
文章标签 coco map recall 插值 计算

本文主要是介绍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]`。

这篇关于coco如何计算map的,recall如何插值的的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1062543

相关文章

计算绕原点旋转某角度后的点的坐标

问题: A点(x, y)按顺时针旋转 theta 角度后点的坐标为A1点(x1,y1)  ,求x1 y1坐标用(x,y)和 theta 来表示 方法一: 设 OA 向量和x轴的角度为 alpha , 那么顺时针转过 theta后 ,OA1 向量和x轴的角度为 (alpha - theta) 。 使用圆的参数方程来表示点坐标。A的坐标可以表示为: \[\left\{ {\begin{ar

【云计算 复习】第1节 云计算概述和 GFS + chunk

一、云计算概述 1.云计算的商业模式 (1)软件即服务(SaaS) 有些景区给游客提供烧烤场地,游客需要自己挖坑或者砌烧烤台,然后买肉、串串、烧烤。 (2)平台即服务(PaaS) 有些景区给游客提供烧烤场地,同时搭建好烧烤台,游客只需要自己带食材和调料、串串、烧烤。 (3)基础设施即服务(IaaS) 有些景区给游客提供烧烤场地,同时搭建好烧烤台,还有专门的厨师来烧烤,用户不需要关心前面的所有

Java compiler level does not match the version of the installed Java project facet. map解决方法

右键项目“Properties”,在弹出的“Properties”窗口左侧,单击“Project Facets”,打开“Project Facets”页面。 在页面中的“Java”下拉列表中,选择相应版本就OK了。

算法13—Bit Map算法简介

1. Bit Map算法简介          来自于《编程珠玑》。所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。 2、 Bit Map的基本思想         我们先来看一个具体的例子,假设我们要对0-7内的5个元素(4,7,2,5,3)排

什么是dB?dBm、dBc、dBi、dBd怎么计算,有什么区别?

什么是dB?dBm、dBc、dBi、dBd怎么计算,有什么区别? 引言 在电子工程、通信和音频领域,dB(分贝)是一个常见的术语。许多人刚接触时可能会感到困惑,因为它不仅仅是一个简单的单位,还有多种不同的形式,如dBm、dBc、dBi和dBd。这篇文章将详细解释这些概念,并介绍如何计算它们,帮助初学者更好地理解和应用。 什么是dB? dB,即分贝,是一种表示两个数值比值的对数单位。分贝的基

玩转Web之Json(四)---json与(Object/List/Map)的相互转化

在做web应用时,经常需要将json转化成Object/list/map或者将Object/List/map转化成json,通过简单封装可以在写代码是减轻很多负担。本文将给出json转化的一系列方法。 闲话不 多说,直接上代码: 先是Object /List /Map转化为Json /* 功能 :将一个对象转成json数组* 参数 :object对象* retu

【C++11 之新增容器 array、foward_list、tuple、unordered_(multi)map/set】应知应会

C++11 标准中新增了多个容器,这些容器为 C++ 程序员提供了更多的选择,以满足不同的编程需求。以下是对这些新容器的介绍和使用案例: std::array 介绍: std::array 是一个固定大小的数组容器,它在栈上分配内存,并提供了类似于标准库容器的接口。它提供了更好的类型安全性和范围检查,同时保持了与原生数组相似的性能。std::array 的大小必须在编译时确定,并且不能更改。

双层嵌套json字符串(即json对象内嵌json数组)解析为Map

无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。 之前我层写过一篇文章,介绍了json与map的相互转化,但当时只涉及到单一的json对象或json数组,对json对象内嵌套这json数组的json字符串无法处理,这篇文章主要解决这个问题。 之前的那篇文章址:http://blo

php字符串计算汉字、中英文数字个数

$str = '123abcDEF测试的事发地点';$length = strlen(preg_replace('/[\x00-\x7F]/', '', $str));$arr['en'] = strlen( $str) - $length; //(非中文)$arr['cn'] = intval($length / 3); // 编码GBK,除以2 (中文)print_r($

C++ 关联容器使用 map, unordered_map, set, unordered_set, multiset, unordered_multiset

关联容器是否有序是否关联值是否可重复访问时间set是否否对数map是是否对数multiset是否是对数multimap是是是对数unordered_map否是否常数unordered_set否否否常数unordered_multiset否否是常数unordered_multimap否是是常数 #include <map>#include <set>#i