Ours_S3GS_Waymo / scripts /render_waymo4_eval_images.sh
Dororo99's picture
Add files using upload-large-folder tool
6271832 verified
Raw
History Blame Contribute Delete
3.02 kB
#!/usr/bin/env bash
set -euo pipefail
# Render eval PNG frames from final phase2 checkpoints for the four Waymo scenes.
# Mapping:
# GPU 0 -> scene 103
# GPU 1 -> scene 016
# GPU 2 -> scene 013
# GPU 3 -> scene 002
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$ROOT_DIR"
CONDA_ENV="${CONDA_ENV:-s3gs}"
CONDA_BIN="${CONDA_BIN:-}"
if [[ -z "$CONDA_BIN" ]]; then
if command -v conda >/dev/null 2>&1; then
CONDA_BIN="$(command -v conda)"
elif [[ -x /workspace/miniconda3/bin/conda ]]; then
CONDA_BIN="/workspace/miniconda3/bin/conda"
elif [[ -x /opt/miniforge3/bin/conda ]]; then
CONDA_BIN="/opt/miniforge3/bin/conda"
else
echo "ERROR: conda executable not found. Set CONDA_BIN=/path/to/conda" >&2
exit 1
fi
fi
mkdir -p logs/render_waymo4_eval_images
echo "[$(date '+%F %T')] root: $ROOT_DIR"
echo "[$(date '+%F %T')] conda env: $CONDA_ENV"
echo "[$(date '+%F %T')] conda bin: $CONDA_BIN"
run_one() {
local gpu="$1"
local sid="$2"
local sid3
sid3=$(printf "%03d" "$((10#$sid))")
local src="data/processed/waymo_eccv_v1_10/training/${sid3}"
local model_path="work_dirs/waymo_eccv_v1_10/nvs/p2/${sid3}"
local ckpt="${model_path}/chkpnt_fine_50000.pth"
local log="logs/render_waymo4_eval_images/${sid3}_phase2_50000_gpu${gpu}.log"
if [[ ! -f "${src}/frame_info.json" ]]; then
echo "[GPU ${gpu}] ERROR: missing processed scene: ${src}" >&2
return 1
fi
if [[ ! -f "${ckpt}" ]]; then
echo "[GPU ${gpu}] ERROR: missing checkpoint: ${ckpt}" >&2
return 1
fi
: > "$log"
echo "[$(date '+%F %T')] [GPU ${gpu}] render eval images scene ${sid3} ckpt ${ckpt}" | tee -a "$log"
"$CONDA_BIN" run --no-capture-output -n "$CONDA_ENV" env \
PYTHONPATH="$PWD" \
CUDA_VISIBLE_DEVICES="${gpu}" \
python train.py \
-s "${src}" \
--expname waymo \
--configs arguments/stage2_nvs.py \
--model_path "${model_path}" \
--start_checkpoint "${ckpt}" \
--eval_only \
--eval_save_images \
>> "$log" 2>&1
echo "[$(date '+%F %T')] [GPU ${gpu}] done scene ${sid3}" | tee -a "$log"
}
declare -a PIDS=()
declare -a NAMES=()
cleanup() {
echo "[$(date '+%F %T')] interrupt received; stopping child jobs..." >&2
for pid in "${PIDS[@]:-}"; do
kill "$pid" 2>/dev/null || true
done
}
trap cleanup INT TERM
launch_one() {
local gpu="$1"
local sid="$2"
run_one "$gpu" "$sid" &
PIDS+=("$!")
NAMES+=("scene_${sid}_gpu_${gpu}")
}
launch_one 0 103
launch_one 1 016
launch_one 2 013
launch_one 3 002
status=0
for idx in "${!PIDS[@]}"; do
pid="${PIDS[$idx]}"
name="${NAMES[$idx]}"
if wait "$pid"; then
echo "[$(date '+%F %T')] ${name} finished successfully"
else
rc=$?
echo "[$(date '+%F %T')] ${name} failed with exit code ${rc}" >&2
status=$rc
fi
done
if [[ "$status" -eq 0 ]]; then
echo "[$(date '+%F %T')] all 4 eval-image render jobs finished"
else
echo "[$(date '+%F %T')] one or more eval-image render jobs failed" >&2
fi
exit "$status"