指标(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_evaluator将RunnerState注入到 metric(可在保存/命名时使用 epoch/step 等信息);- 评估结果合并后通过
Evaluator.register_metrics写入registry.metric.*,供日志/回调使用。