File size: 1,981 Bytes
8cf92b3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/usr/bin/env python3
"""Convert a source dataset into the unified clip format (mapgs.data.unified).

    # synthetic (runnable anywhere; verifies the pipeline)
    python scripts/convert.py --source synthetic --out data/unified/synth --split train --n 64

    # real data (needs the devkits + data)
    python scripts/convert.py --source waymo --data /data/waymo_v2 --out data/unified/waymo --split train
    python scripts/convert.py --source av2   --data /data/av2_sensor --out data/unified/av2 --split train

Then train jointly on the mix:
    python scripts/train.py --config configs/base.yaml \\
        --override data.name=unified data.root=data/unified/waymo,data/unified/av2
"""

import argparse

from mapgs.config import load_config
from mapgs.data.convert import convert_synthetic, convert_waymo, convert_argoverse2


def main():
    ap = argparse.ArgumentParser()
    ap.add_argument("--source", required=True, choices=["synthetic", "waymo", "av2", "argoverse2"])
    ap.add_argument("--config", default="configs/base.yaml")
    ap.add_argument("--override", nargs="*", default=[])
    ap.add_argument("--data", default=None, help="source data dir (real datasets)")
    ap.add_argument("--out", required=True, help="unified output root")
    ap.add_argument("--split", default="train")
    ap.add_argument("--n", type=int, default=64, help="synthetic: number of clips")
    ap.add_argument("--max", type=int, default=None, help="real: max segments/logs")
    args = ap.parse_args()

    cfg = load_config(args.config, args.override)
    if args.source == "synthetic":
        out = convert_synthetic(cfg, args.out, args.split, n_clips=args.n, device=cfg.device)
    elif args.source == "waymo":
        out = convert_waymo(args.data, args.out, cfg, args.split, max_segments=args.max)
    else:
        out = convert_argoverse2(args.data, args.out, cfg, args.split, max_logs=args.max)
    print(f"wrote unified clips to {out}")


if __name__ == "__main__":
    main()