gpt4 book ai didi

tensorflow - 了解COCO评估 "maximum detections"

转载 作者:行者123 更新时间:2023-12-02 22:53:45 34 4
gpt4 key购买 nike

我开始使用 cocoapi评估使用 Object Detection API 训练的模型。在阅读了解释平均精度 (mAP) 和召回率的各种来源后,我对 cocoapi 中使用的“最大检测”参数感到困惑。

根据我的理解(例如 hereherehere ),人们通过计算各种模型得分阈值的精度和召回率来计算 mAP。这给出了精确率-召回率曲线,并且 mAP 被计算为该曲线下面积的近似值。或者,以不同的方式表达,作为定义的召回范围 (0:0.1:1) 内最大精度的平均值。

但是,cocoapi 似乎会计算给定数量的最高分数的最大检测 (maxDet) 的精度和召回率。从那里得到 maxDets = 1, 10, 100 的精确召回曲线。为什么这是一个很好的指标,因为它显然与上述方法不同(它可能排除数据点)?

在我的示例中,每个图像有大约 3000 个对象。使用 cocoapi 评估结果的召回率很差,因为它将检测到的对象数量限制为 100。

出于测试目的,我将评估数据集作为基本事实和检测到的对象(带有一些人工评分)提供。我期望精确度和召回率都非常好,这实际上正在发生。但一旦输入超过 100 个物体,精确度和召回率就会随着“检测到的物体”数量的增加而下降。尽管他们都是“正确的”!这有什么意义?

最佳答案

您可以更改 maxDets 参数并定义新的 summarize() 实例方法。

让我们创建一个 COCOeval 对象:

cocoEval = COCOeval(cocoGt,cocoDt,annType)
cocoEval.params.maxDets = [200]
cocoEval.params.imgIds = imgIdsDt
cocoEval.evaluate()
cocoEval.accumulate()
cocoEval.summarize_2() # instead of calling cocoEval.summarize()

现在,按以下方式在 cocoeval.py 模块中定义 summarize_2() 方法:

def summarize_2(self):
# Copy everything from `summarize` method here except
# the function `_summarizeDets()`.
def _summarizeDets():
stats = np.zeros((12,))
stats[0] = _summarize(1, maxDets=self.params.maxDets[0])
stats[1] = _summarize(1, iouThr=.5, maxDets=self.params.maxDets[0])
stats[2] = _summarize(1, iouThr=.75, maxDets=self.params.maxDets[0])
stats[3] = _summarize(1, areaRng='small', maxDets=self.params.maxDets[0])
stats[4] = _summarize(1, areaRng='medium', maxDets=self.params.maxDets[0])
stats[5] = _summarize(1, areaRng='large', maxDets=self.params.maxDets[0])
stats[6] = _summarize(0, maxDets=self.params.maxDets[0])
stats[9] = _summarize(0, areaRng='small', maxDets=self.params.maxDets[0])
stats[10] = _summarize(0, areaRng='medium', maxDets=self.params.maxDets[0])
stats[11] = _summarize(0, areaRng='large', maxDets=self.params.maxDets[0])
return stats
# Copy other things which are left from `summarize()` here.

如果您在数据集上运行上述方法,您将得到类似于以下的输出:

 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=200 ] = 0.507
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=200 ] = 0.699
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=200 ] = 0.575
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=200 ] = 0.586
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=200 ] = 0.519
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=200 ] = 0.501
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=200 ] = 0.598
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=200 ] = 0.640
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=200 ] = 0.566
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=200 ] = 0.564

关于tensorflow - 了解COCO评估 "maximum detections",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52839368/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com