mapvggt / scripts /waymo_restore.py
ChenmingWu's picture
Upload folder using huggingface_hub
8cf92b3 verified
Raw
History Blame Contribute Delete
2.32 kB
#!/usr/bin/env python3
"""Stream-restore 1/3 of Waymo v1.4.3 training: each worker downloads a tfrecord from
GCS (ADC token), converts to JPEG@640 unified clips, deletes the tfrecord. Disk-frugal."""
import argparse, os, sys, time, traceback
sys.path.insert(0, "/tmp/wproto")
from mapgs.config import load_config
from mapgs.data.convert.waymo_to_unified import convert_waymo
import scripts.gcs_waymo as gcs
def main():
ap = argparse.ArgumentParser()
ap.add_argument("--workers", type=int, default=4)
ap.add_argument("--worker-id", type=int, default=0)
ap.add_argument("--n-seg", type=int, default=266) # 1/3 of 798
ap.add_argument("--longside", type=int, default=640)
ap.add_argument("--out", default="/mnt/william/data/unified/waymo")
args = ap.parse_args()
cfg = load_config()
tok = gcs.access_token(); t_tok = time.time()
segs = gcs.list_training_tfrecords(tok)[: args.n_seg]
mine = segs[args.worker_id :: args.workers]
tmp = f"/mnt/william/_waymo_stream/w{args.worker_id}"
os.makedirs(tmp, exist_ok=True)
print(f"[w{args.worker_id}] {len(mine)} segments", flush=True)
done = 0
for name in mine:
base = os.path.basename(name)
sid = base.split("segment-")[-1][:12]
# skip if already converted (idempotent restart)
if os.path.isdir(os.path.join(args.out, "train")) and \
any(d.startswith(f"train_{sid}") for d in os.listdir(os.path.join(args.out, "train"))):
done += 1; continue
if time.time() - t_tok > 2400: # refresh token every 40 min
tok = gcs.access_token(); t_tok = time.time()
dst = os.path.join(tmp, base)
try:
gcs.download(tok, name, dst)
convert_waymo(tmp, args.out, cfg, only_segments=[base],
store_longside=args.longside, image_ext="jpg")
except Exception:
print(f"[w{args.worker_id}] FAIL {base}", flush=True); traceback.print_exc()
finally:
if os.path.exists(dst):
os.remove(dst)
done += 1
if done % 5 == 0:
print(f"[w{args.worker_id}] {done}/{len(mine)}", flush=True)
print(f"[w{args.worker_id}] DONE {done}/{len(mine)}", flush=True)
if __name__ == "__main__":
main()