评估¶
评估是一个将多个输入/输出对聚合在一起的过程。 你始终可以直接 使用模型 并手动解析其输入/输出以执行评估。 或者,评估在 detectron2 中使用 DatasetEvaluator 接口实现。
Detectron2 包括一些 DatasetEvaluator
,它们使用标准数据集特定 API(例如 COCO、LVIS)计算指标。 你还可以实现自己的 DatasetEvaluator
,它使用输入/输出对执行其他一些任务。 例如,要计算在验证集上检测到的实例数量
class Counter(DatasetEvaluator):
def reset(self):
self.count = 0
def process(self, inputs, outputs):
for output in outputs:
self.count += len(output["instances"])
def evaluate(self):
# save self.count somewhere, or print it, or return it.
return {"count": self.count}
使用评估器¶
要使用评估器的方法手动评估
def get_all_inputs_outputs():
for data in data_loader:
yield data, model(data)
evaluator.reset()
for inputs, outputs in get_all_inputs_outputs():
evaluator.process(inputs, outputs)
eval_results = evaluator.evaluate()
评估器也可以与 inference_on_dataset 一起使用。 例如,
eval_results = inference_on_dataset(
model,
data_loader,
DatasetEvaluators([COCOEvaluator(...), Counter()]))
这将在来自 data_loader
的所有输入上执行 model
,并调用评估器对其进行处理。
与使用模型手动运行评估相比,此函数的优点是评估器可以使用 DatasetEvaluators 合并在一起,所有评估都可以在对数据集的一次前向传递中完成。 此函数还为给定模型和数据集提供了准确的速度基准。
自定义数据集的评估器¶
detectron2 中的许多评估器都是为特定数据集而设计的,以便使用每个数据集的官方 API 获取分数。 除了这些,还有两个评估器能够评估任何遵循 detectron2 的 标准数据集格式 的通用数据集,因此它们可用于评估自定义数据集
COCOEvaluator 能够评估任何自定义数据集的框检测、实例分割、关键点检测的 AP(平均精度)。
SemSegEvaluator 能够评估任何自定义数据集的语义分割指标。