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

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

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

相关文章

Java中JSON格式反序列化为Map且保证存取顺序一致的问题

《Java中JSON格式反序列化为Map且保证存取顺序一致的问题》:本文主要介绍Java中JSON格式反序列化为Map且保证存取顺序一致的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录背景问题解决方法总结背景做项目涉及两个微服务之间传数据时,需要提供方将Map类型的数据序列化为co

Java计算经纬度距离的示例代码

《Java计算经纬度距离的示例代码》在Java中计算两个经纬度之间的距离,可以使用多种方法(代码示例均返回米为单位),文中整理了常用的5种方法,感兴趣的小伙伴可以了解一下... 目录1. Haversine公式(中等精度,推荐通用场景)2. 球面余弦定理(简单但精度较低)3. Vincenty公式(高精度,

Java使用Stream流的Lambda语法进行List转Map的操作方式

《Java使用Stream流的Lambda语法进行List转Map的操作方式》:本文主要介绍Java使用Stream流的Lambda语法进行List转Map的操作方式,具有很好的参考价值,希望对大... 目录背景Stream流的Lambda语法应用实例1、定义要操作的UserDto2、ListChina编程转成M

windows和Linux使用命令行计算文件的MD5值

《windows和Linux使用命令行计算文件的MD5值》在Windows和Linux系统中,您可以使用命令行(终端或命令提示符)来计算文件的MD5值,文章介绍了在Windows和Linux/macO... 目录在Windows上:在linux或MACOS上:总结在Windows上:可以使用certuti

SpringBoot如何通过Map实现策略模式

《SpringBoot如何通过Map实现策略模式》策略模式是一种行为设计模式,它允许在运行时选择算法的行为,在Spring框架中,我们可以利用@Resource注解和Map集合来优雅地实现策略模式,这... 目录前言底层机制解析Spring的集合类型自动装配@Resource注解的行为实现原理使用直接使用M

C++ 各种map特点对比分析

《C++各种map特点对比分析》文章比较了C++中不同类型的map(如std::map,std::unordered_map,std::multimap,std::unordered_multima... 目录特点比较C++ 示例代码 ​​​​​​代码解释特点比较1. std::map底层实现:基于红黑

JavaScript中的Map用法完全指南

《JavaScript中的Map用法完全指南》:本文主要介绍JavaScript中Map用法的相关资料,通过实例讲解了Map的创建、常用方法和迭代方式,还探讨了Map与对象的区别,并通过一个例子展... 目录引言1. 创建 Map2. Map 和对象的对比3. Map 的常用方法3.1 set(key, v

Golang中map缩容的实现

《Golang中map缩容的实现》本文主要介绍了Go语言中map的扩缩容机制,包括grow和hashGrow方法的处理,具有一定的参考价值,感兴趣的可以了解一下... 目录基本分析带来的隐患为什么不支持缩容基本分析在 Go 底层源码 src/runtime/map.go 中,扩缩容的处理方法是 grow

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

Go语言利用泛型封装常见的Map操作

《Go语言利用泛型封装常见的Map操作》Go语言在1.18版本中引入了泛型,这是Go语言发展的一个重要里程碑,它极大地增强了语言的表达能力和灵活性,本文将通过泛型实现封装常见的Map操作,感... 目录什么是泛型泛型解决了什么问题Go泛型基于泛型的常见Map操作代码合集总结什么是泛型泛型是一种编程范式,允