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。