0

我已经使用Detectron2训练了一个自定义图像分割模型,并且我已经成功地对一批图像进行了推理和模型评估,主要是按照创建者提供的Colab Notebook中的指南进行的。

现在,我还想为测试数据集中的每个图像而不是整个批次收集评估指标(AP 或 mAP)。为此,我修改了inference_on_dataset函数,将原始代码的最后一位从

results = evaluator.evaluate()

进入

for img_id in img_ids:
    result = evaluator.evaluate(img_ids = [img_id,])
    res_dict[img_id] = result

Whereimg_ids是要评估的图像列表,res_dict最初是空字典。这样做,推理应该只对整批图像运行一次,而对每个图像进行评估,将结果保存在字典中。

for循环的前两次迭代一切正常,但在第三次迭代时,出现以下错误

AssertionError: A prediction has category_id=4, which is not available in the dataset.

但是预测都是正确的,并且在正确的 ID 范围(0-3)内,我不明白 4 是从哪里来的。此外,如前所述,问题仅出现在第三次迭代中,而且奇怪的是,它独立于图像(如果我交换列表中图像的顺序,如果它在第一次迭代中,相同的图像不会出错两个位置)。也许每次迭代都必须以某种方式重置评估过程,但我找不到任何函数可以这样做(除非我也清除了预测)。

关于如何在测试数据集的每个图像上递归运行评估的任何想法?谢谢!

4

0 回答 0