mapvggt / scripts /demo_train_eval_av2.py
ChenmingWu's picture
Upload folder using huggingface_hub
8cf92b3 verified
Raw
History Blame Contribute Delete
2.43 kB
#!/usr/bin/env python3
"""Real-data train->eval on the converted Argoverse 2 unified clips.
Trains on data/unified/av2/train (snapshot at launch) and evaluates on
data/unified/av2/val. Interpolation + lane consistency only (real logs have no
deviated GT; the synthetic-style extrapolation sweep needs a known world).
GPU-only training coexists with the CPU-bound conversion still running."""
import argparse, time
import torch
from mapgs.config import load_config
from mapgs.data import UnifiedClipDataset, collate_samples
from mapgs.eval import Evaluator
from mapgs.train import Trainer
def fmt(d): return {k: (round(v, 3) if isinstance(v, float) else v) for k, v in d.items()}
def main():
ap = argparse.ArgumentParser()
ap.add_argument("--iters", type=int, default=1200)
ap.add_argument("--root", default="/mnt/william/data/unified/av2")
args = ap.parse_args()
cfg = load_config("configs/base.yaml", [
"data.name=unified", f"data.root={args.root}", "data.num_frames=20",
"data.height=256", "data.width=384",
"model.embed_dim=512", "model.enc_depth=3", "model.dec_depth=6", "model.n_heads=8",
"model.tokens.gaussians_per_token=8", "model.feature_dim=32",
"train.amp=true", "train.batch_size=1", "train.num_workers=3", "train.grad_checkpoint=true",
"train.lr=1.0e-4", "train.warmup=100", f"train.iters={args.iters}",
"train.extrap_ramp_iter=100000", # off: deviated render less useful w/o lane-change GT here
"train.log_every=50", "train.ckpt_every=0", "train.out_dir=runs/mapgs_av2",
])
train_ds = UnifiedClipDataset(cfg, roots=args.root, split="train", n_sup_views=4)
val_ds = UnifiedClipDataset(cfg, roots=args.root, split="val", n_sup_views=6)
print(f"AV2 train clips: {len(train_ds)} | val clips: {len(val_ds)}")
trainer = Trainer(cfg)
ev = Evaluator(trainer.model, cfg, device="cuda")
print("BEFORE:", fmt(ev.interpolation(val_ds, max_scenes=40)))
t = time.time()
trainer.fit(train_ds, max_iters=args.iters)
print(f"trained {args.iters} iters in {time.time()-t:.0f}s")
trainer.model.eval()
after = ev.interpolation(val_ds, max_scenes=40)
lane = ev.lane_consistency(val_ds, max_scenes=30, shift=3.0, frame=cfg.data.num_frames // 2)
print("AFTER :", fmt(after))
print("LANE :", fmt(lane))
trainer.save("runs/mapgs_av2/ckpt_av2.pt")
if __name__ == "__main__":
main()