| #!/usr/bin/env bash |
| set -euo pipefail |
|
|
| CONFIG=${1:-configs/train_1gpu_debug.yaml} |
| PYTHON_BIN=${PYTHON:-python3} |
|
|
| "$PYTHON_BIN" - <<'PY' "$CONFIG" |
| import sys, yaml, pathlib |
| cfg = yaml.safe_load(pathlib.Path(sys.argv[1]).read_text()) |
| num_gpus = int(cfg.get("num_gpus", 1)) |
| out = pathlib.Path(cfg.get("output_dir", "outputs/train")) |
| out.mkdir(parents=True, exist_ok=True) |
| print(f"config={sys.argv[1]}") |
| print(f"num_gpus={num_gpus}") |
| print(f"output_dir={out}") |
| print("This public wrapper records the intended WiSER alternating schedule.") |
| print("Run the phase scripts directly for production training after filling checkpoint paths.") |
| PY |
|
|
| cat <<'EOF' |
|
|
| WiSER training schedule used by the paper: |
| P0 radiomap warmup |
| P1 CIR restore with frozen scene encoder / radiomap head |
| P2 radiomap refinement |
| P3-P8 alternating CIR and radiomap refinement |
| P9 final radiomap refinement |
|
|
| Public phase scripts: |
| scripts/train_phase_radiomap.py |
| scripts/train_phase_cir.py |
| scripts/evaluate_dual.py |
|
|
| This wrapper is intentionally conservative: it does not launch a long training |
| job until users fill the data manifests and warm-start checkpoint paths in a |
| local run script. |
| EOF |
|
|