Source: scripts/evaluate_dl3dv_benchmark.py · Plain text

scripts/evaluate_dl3dv_benchmark.py

"""Evaluate a dynamic checkpoint on the pinned DL3DV-140 benchmark."""

from __future__ import annotations

import argparse
import json
from pathlib import Path

from mcss.evaluation.dl3dv_report import evaluate_dl3dv_benchmark


def _parser() -> argparse.ArgumentParser:
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument("--metadata", required=True, type=Path)
    parser.add_argument("--checkpoint", required=True, type=Path)
    parser.add_argument("--output", required=True, type=Path)
    parser.add_argument("--mode", choices=("full", "ar"), default="full")
    parser.add_argument("--input-count", type=int, default=32)
    parser.add_argument("--device", default="cpu")
    parser.add_argument(
        "--policy",
        choices=("OFF", "FUSE", "COMPLETE", "ALL", "RESIDUAL_THRESHOLD", "LEARNED"),
        default="OFF",
    )
    parser.add_argument("--policy-checkpoint", type=Path)
    parser.add_argument("--residual-threshold", type=float, default=0.03)
    parser.add_argument("--max-units", type=float, default=1e12)
    parser.add_argument(
        "--max-scenes",
        type=int,
        help="diagnostic subset size; its output is explicitly partial",
    )
    parser.add_argument("--resume", action="store_true")
    parser.add_argument(
        "--without-lpips",
        action="store_true",
        help="omit the optional VGG-LPIPS metric for an explicitly reduced diagnostic run",
    )
    parser.add_argument("--data-hash")
    return parser


def main(argv: list[str] | None = None) -> int:
    args = _parser().parse_args(argv)
    report = evaluate_dl3dv_benchmark(
        args.metadata,
        args.checkpoint,
        args.output,
        mode=args.mode,
        input_count=args.input_count,
        device=args.device,
        policy=args.policy,
        policy_checkpoint=args.policy_checkpoint,
        residual_threshold=args.residual_threshold,
        max_units=args.max_units,
        max_scenes=args.max_scenes,
        resume=args.resume,
        include_lpips=not args.without_lpips,
        data_hash=args.data_hash,
    )
    print(
        json.dumps(
            {
                "status": report["status"],
                "benchmark_claim": report["benchmark_claim"],
                "output": str(args.output),
                "failure_counts": report["failure_counts"],
            },
            sort_keys=True,
        )
    )
    return 0


if __name__ == "__main__":
    raise SystemExit(main())