评估¶
评估是一个处理多个输入/输出对并将其汇总的过程。 您始终可以直接使用模型并手动解析其输入/输出来执行评估。 或者,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 能够在任何自定义数据集上评估语义分割指标。