跳到主要内容

指标(Metrics)

BaseMetric(wall_e/eval/base_metric.py) 定义了评估指标的抽象。

抽象接口

wall_e/eval/base_metric.py (L17–59, L76–99)
class BaseMetric:
def process(self, data_batch: Any, data_samples: Sequence[dict]) -> None: ...
def compute_metrics(self, results: list) -> dict: ...

评估主流程

wall_e/eval/base_metric.py (L100–149)
def evaluate(self, size: int) -> dict: ...  # 分布式收集、to_cpu、compute_metrics、prefix 合成

要点:

  • self.results 在各批 process 中累积,evaluate 会在主进程聚合并清空;
  • collect_results 支持 'cpu'|'gpu'collect_dir 仅在 'cpu' 模式下使用;
  • prefix 可为指标名添加命名空间,避免冲突。

工具方法

wall_e/eval/base_metric.py (L151–163)
def to_cpu(self, data: Any) -> Any: ...  # 将嵌套结构中的 Tensor 迁移到 CPU

示例:持久化预测(DumpResults)

wall_e/eval/base_metric.py (L165–214)
@registry.register_metric("DumpResults")
class DumpResults(BaseMetric):
def process(self, data_batch, predictions): ...
def compute_metrics(self, results: list) -> dict: # 保存到 pkl,并根据 state 追加 epoch/step 后缀

与 Runner 的联动:

  • Runner.setup_evaluatorRunnerState 注入到 metric(可在保存/命名时使用 epoch/step 等信息);
  • 评估结果合并后通过 Evaluator.register_metrics 写入 registry.metric.*,供日志/回调使用。