目标检测评价指标详解(mAP、AP、FPS)

目标检测问题,一般的常用评价指标有:

精度评价指标:map(mean Average Precision,平均准确度均值)平均正确率(AP),准确率 (Accuracy),精确率(Precision),召回率(Recall)。

速度评价指标:FPS(即每秒处理的图片数量或者处理每张图片所需的时间,在同一硬件条件下进行比较)

精度评价指标:

mAP: mean Average Precision, 即各类别AP的平均值,(针对整个数据集所有类别)

AP: Average Precision,PR曲线下面积,(针对数据集中单个类别)

PR曲线:Precision-Recall曲线(在不同Recall下,检测精度的平均值,可以综合反映检测器的准确率)

Precision: 准确率,计算方式TP / (TP + FP),所有预测框中正确预测目标的框的占比,反映的检测准确性。

Recall: 召回率,计算方式TP / (TP + FN),所有Ground Truth中,被正确预测到的占比,反映的是检测器的召回能力。

TP: IoU>=阈值的检测框数量(同一Ground Truth只计算一次)

FP: IoU<阈值的检测框数量,或者是检测到同一个GT的多余检测框的数量

FN: 没有检测到的GT的数量

注:因为IOU阈值设置会影响TP、FP和FN值,所以以上指标都是针对某个IOU阈值下来说的。比如IOU阈值为0.8时mAP是多少,为了更加全面的评估检测器的性能,有时候在不同IOU阈值下统计AP,比如COCO数据集,设定多个IOU阈值(0.5-0.95,0.05为步长),在每一个IOU阈值下都有某一类别的AP值,然后求不同IOU阈值下的AP平均,就是所求的最终的某类别的AP值。

AP计算举例

假设测试集是下面三张图片,其中绿框为Ground Truth,红色框为目标检测结果。现在要计算猫这个类别的AP。IOU阈值设置为0.5。

1)统计检测框检测情况。按照置信度降序排序预测框。检测框和真实框计算IOU,判断检测框是否检测到目标。

2)根据目标检测框统计结果绘制PR曲线。统计每种置信度下的Precision和Recall,得到如下左表。比如当置信度为0.98时,此时只有一个检测框,TP=1, FP=0,FN=6,  Precision=1,Recall=1/7=0.14。根据左表画出右图PR曲线。

3)计算PR曲线下面的面积,得到猫的平均准确率AP=0.6694

参考:

知乎目标检测评价指标: https://zhuanlan.zhihu.com/p/362851038

bilibili视频:目标检测mAP计算以及coco评价标准

### MapAp 的概念与用法 #### Map 函数 `map` 是一种高阶函数,在许多编程语言中都存在。它的主要功能是对一个集合(通常是列表或其他可迭代对象)中的每一个元素应用指定的函数,并返回一个新的集合,其中包含了原集合各元素经过该函数变换后的结果。 例如,在 Haskell 中可以这样使用 `map`: ```haskell let func = \x -> x + 1 let lst = [1..5] map func lst -- 结果为 [2,3,4,5,6] [^1] ``` 上述代码展示了如何利用匿名函数 `\x -> x + 1` 对 `[1,2,3,4,5]` 进行映射操作,最终得到新列表 `[2,3,4,5,6]`。 #### Ap 方法 `ap` 是另一种常见的函数式编程技术,通常出现在支持函子(Functor)、适用函子(Applicative Functor)以及单子(Monad)的语言中。其基本用途是从一个包含函数的应用程序结构中提取函数,并将其应用于另一个应用程序结构内的值。 假设我们有一个适用函子 `f` 包含函数 `(a -> b)` 和另一个适用函子 `g` 包含值 `a`,那么可以通过调用 `ap f g` 来获得一个适用函子,这个适用函子内部保存的是将前者所代表的函数作用于后者的结果。 在某些情况下,比如 Haskell 或 Scala 等语言里,你可以看到如下形式的操作: Haskell 示例: ```haskell import Control.Applicative ((<*>)) -- 假设我们有 Just (+3) 和 Just 9 Just (+3) <*> Just 9 -- 返回 Just 12 ``` 这里 `<*>` 实际上就是实现了 ap 功能的一个运算符版本;它从左侧取出加三的功能并施加给右侧数值九之上从而得出十二作为封装好的单一选项型态之下的成果。 两者对比来看的话,虽然都是关于转换或者处理容器内数据的方式,但是他们的侧重点有所不同——一个是单纯遍历执行特定逻辑(`map`) ,而另一方则更倾向于管理复杂嵌套情境下不同类型之间的交互关系 (`ap`) 。 #### 主要区别总结 | 特性 | Map | Ap | |---------------|---------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------| | 定义域 | 需要一个具体类型的集合 | 处理抽象层次上的适配器 | | 输入参数 | 单一函数和一组同质的数据 | 至少两个:第一个是一个包裹起来的函数 | | 输出结果 | 同样大小的新数组 | 新创建的对象 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值