logo资料库

coco数据集评价标准的详细计算过程.docx

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
首先说一下关于 coco 数据集评价指标中的一些定义,为了方便解释,假设是在二分类的前 提下,类别 a 和类别 b: TP:在识别的 a 类别样本中真正属于 a 类的样本数; FP:在识别的 a 类别样本中真实类别不属于 a 类,也就是属于 b 类的样本数, FN:在未识别的样本中真实 a 类的样本数目; TN:在未识别的样本中不属于 a 类的样本数目,即真实类别 b 的样本数 接下了借用别人的一张图来解释: TP,FP,FN,TN 在上图中都有对应,由上图解释一下什么是 precision 和 recall Precision 等于 TP/(TP+FP),也就是识别出来的真实 a 类的样本所占的识别出来的样本的比例, 我称为准确率; Recall 等于 TP/(TP+FN),也就是识别出来的真实 a 类的样本占所有真实 a 类样本的比例;它 被称为召回率,可以理解为对所有真实 a 的 m 个样本进行识别,但最后只识别也就是召回 TP 对应的 n 个样本数,m-n 的样本数我们可以理解为丢失了,recall 也称为置信度; 概念讲完了,接下来具体说说在目标检测中的评价指标,还是以二分类为例: 在上图中整个方形假设是我们检测的一张图片,在这图片里面有两类,实心点假设为 a 类, 空心点假设为 b 类,里面的实心点的个数是这幅图片中我们需要检测的 a 类的 gt_bbox 的数
目共 12 个,空心点也就是 b 类在检测 a 类时可以划分为背景,接下来就是计算了,设定在 iou 的阈值为 0.5 的前提下, 首先对上面所有的点进行预测,上面有 22 个点,则有 22 个 pred_bbox,然后按照 a 类 的 class score 按照从大到小进行排序,,对这 22 个 pred_bb 按 a 类的 class score 排序, 然后计算每一个 pred_bb 与a类对应的 12 个 gt_bb(也就是图左边的 12 个实心点)计 算出 12 个 iou 的值,然后将选取 iou 最大的 gt_bb,规定如果此 iou<0.5,则直接将这个 pred_bb 设定为 FP,且对应的这个 gt_bb 保留下来不分配给这个 pred_bb,如果 iou>0.5,且这个 gt_bb 没有分配给其他 pred_bb,就将它分配给这个 pred_bb,并将这个 pred_bb 设定为 TP, 迭代计算,将 22 个 pred_bb 都按上一步计算出 12 个 iou,注意这里计算 12 个 iou 并不 矛盾,因为如果某个 gt_bb 已经分配出去了,就选择 iou 值第二大的 gt_bbox 分配给这个 pred_bb,知道把所有的 gt_bbox 分配完; 原则上我们需要识别图中所有的 bbox,也就是当把图中所有的点分为 a 类的情况下, TP=12=gt_bb,而不论是否识别出图中所有的 bbox,a 类对应的 gt_bb 是不变的,也就是 12 个,这也正好是 TP+FN 的数目,也就是 recall 的分母,在此情况下,recall =12/12=1,而 precision=12/(12+10)=12/22,此时的召回率是最高的,而对应的准确率确实最低的,所谓二者 不可兼得,所以我们的目的是获得在召回率比较高的情况下,准确率也能达到一个很高水平, 为了更好的评价算法的性能,大神们提出了画 P-R 曲线图,然后通过识别整个过程的平均准 确率来评价算法性能好坏,具体就是通过改变阈值来获得不同的 precision 和 recall,注意这 个阈值指的是分类的阈值,而不是 iou 的阈值,在第一步我们已经获得了 a 类 class score 大 小顺序下所有的 pred_bb 是 TP 还是 FP,在这里通过改变分类的阈值,从而我们识别出来的 bbox 不再 22 个,而是从 1 到 22 的一个系列,分类阈值不一样,识别出来的 bbox 的数目也 就不一样,TP,FP 的值也就改变了,从而改变 recall 和 precision,但 recall 的分母是不变的, 还是等于 12 个,举例,假定分类阈值为 0.7 时,识别出 class score>0.7 的 bbox,设一共有 5 个,其中在第一步中被标注为 TP 的有第 1,3,5 共 3 个,则 FP 共 2 个,此时 recall=3/12,而 precision=3/5,说明 recall,precison 的值发生改变,不同的分类阈值得到不同的 recall 和 precision 值,以 recall 为横轴,以 precison 为纵轴,就可以画出 P-R 曲线了,下面是一个 P-R 曲线的例子,来自于 https://blog.csdn.net/hysteric314/article/details/54093734,并不是这个 例子的曲线,大家看看可以去上面的网址看详细介绍, 原则上 AP 就等于这个曲线下方的面积,即对这条曲线在 0 到 1 上求积分:
AP = 还有需要注意的是分类阈值的选取,原则上我们画曲线可以自己设定分类阈值得到不同 的 precision 和 recall,但在真正画图时,我们会首先设定一组阈值,通过分析我们知道其实 recall 的值就可以做分类的阈值,我们认为设定 recall 是[0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1] 这是 11 个值,从而在 recall 不同时,由 recall 反向求取TP,由 TP 就可以求取在此 TP 的条件 下 ,precision 的 值 , 注 意 同 一 个 TP 下 可 能 会 有 多 个 precision , 举 例 说 明 在 这 个 网 址 https://blog.csdn.net/zdh2010xyz/article/details/54293298 , 简 单 来 说 就 是 在 计 算 precison=TP/(TP+FP)时,由于 TP 已经由 recall 求出,即保持分子不变的情况下,分母的 FP 一直增加到 TP 改变的前一个 pred_bb 的数目,类似如下: 上图就是一次完整的识别对应的结果,改变 recall 得到的 P-R 曲线如下: 接下来就是 AP 的具体计算了,一共有三种方式: 第一种方式就是直接求积分,这个不说,用的也不多; 第一种方式叫 11-point interpolated average precision,用它近似代替 AP,这是大多数文章
目前使用的方法,即针对选取的 recall 的 11 个值,当 recall 大于所选取的那个值时,对应的 precision 会有一个最大值,我们依次得出 11 个对应 recall 阈值下的 precision,对这 11 个值 求 平 均 就 是 我 们 所 要 的 AP 值 , 如 上 图 中 的 对 应 11 个 值 分 别 为 1,1,1,1,0.58 , 0.58,0.58,0.45,0.45,0.38,0.38,AP=(1+1+1+1+0.58+0.58+0.58+0.45+0.45+0.38+0.38)/11 = 0.6728 第三种方法可以看成第二种方法的不同形式,只是将 recall 的阈值换成了从 1/M, 2/M...,M/M,其中 M 就是每一类对应的 gt_bb 的数目,也就是在识别一幅图片时 TP 的总数, 这样的话取 recall 的阈值要简单,也容易求 AP,如上图的 AP 用这种方法求就是 M 等于 6, 因此选取 recall 的阈值从 1/6,2/6,3/6,4/6,5/6,6/6,剩下的和第二种方法一样了,获得 6 个 precision , 再 求 平 均 值 就 是 我 们 要 的 AP , 这 里 AP= 0.6621, 具 体 细 节 请 看 https://blog.csdn.net/zdh2010xyz/article/details/54293298。 以上就是单独一个类的 AP 计算过程,而在 coco 的评价指标中,计算的是 MAP,称为平 均精度,具体就是 iou 选取 0.5:0.05:0.95 之间的 10 个值,再每一个 iou 下计算一共 80 类, 每一类的 AP,就跟上面的方法一样,先计算在这个 iou 下这 80 类的 AP 平均值,我称为 map1, 然后依次计算不同 iou 下的 map 值,一直求到 map10,再求平均,这就是 coco 的评价指标 AP,默认 AP 就是 MAP,大部分论文不会区分这个,具体是 AP 还是 MAP 依照情况而定,一 般情况下是多分类情况,所以一般所求的论文中的 AP 就是 MAP.
分享到:
收藏