我已经使用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
其中img_ids
是要计算的图像的列表res_dict
是初始为空的字典。
这样,推理应该只对整批图像运行一次,而对每个图像进行评估,并将结果保存在字典中
for循环的前两次迭代一切正常,但在第三次迭代时,出现以下错误
AssertionError: A prediction has category_id=4, which is not available in the dataset.
但是这些预测都是正确的,并且在正确的ID范围(0-3)内,我不明白4是从哪里来的。此外,如前所述,问题只出现在第三次迭代中,而且奇怪的是,它与图像无关(如果我交换列表中图像的顺序,同一图像在前两个位置上不会出现错误)。也许每次迭代时都必须以某种方式重置评估过程,但我找不到任何函数来重置(除非我也清除了预测)
关于如何对测试数据集的每个图像递归运行评估,有什么想法吗?谢谢大家!
目前没有回答
相关问题 更多 >
编程相关推荐