Skip to main content

Evaluator

Evaluator(wall_e/eval/evaluator.py) 组合多个 BaseMetric 实例,完成评估流程。

构造与状态

wall_e/eval/evaluator.py (L11–29)
class Evaluator:
def __init__(self, metrics: Union[dict, BaseMetric, Sequence]): ...
def setup_state(self, state): ... # 将 RunnerState 注入到各 metric

要点:

  • metrics 可为单个/序列/字典配置;若为字典,将通过注册表获取 metric 类并实例化。
  • setup_state(state) 由 Runner 调用,将 RunnerState 注入每个 metric(用于获取 epoch/step 等)。

数据集元信息

wall_e/eval/evaluator.py (L34–45)
@property def dataset_meta(self) -> Optional[dict]; @dataset_meta.setter ...

批处理与评估

wall_e/eval/evaluator.py (L46–99)
def process(self, data_samples, data_batch: Optional[Any] = None): ...  # 转发到每个 metric
def evaluate(self, size: int) -> dict: ... # 聚合所有 metric 的 evaluate,并注册到 registry.metric.*

注意:

  • size 为验证集总样本数,用于分布式对齐(pad 去除)。
  • Metric 名冲突会报错,应通过不同 prefix 区分。

离线评估

wall_e/eval/evaluator.py (L101–169)
def offline_evaluate(self, data_samples: Sequence, data: Optional[Sequence] = None, chunk_size: int = 1): ...

要点:

  • 支持对持久化的预测/标签做离线评估;
  • pseudo_collate 将列表形式的数据聚合为批,分批 process 后再 evaluate