SplatAtlas / tools /fix_all_missing_renders.sh
KCBtheone's picture
Upload SplatAtlas benchmark pipeline code
23e73f9 verified
Raw
History Blame Contribute Delete
4.31 kB
#!/bin/bash
set -e
source /root/miniconda3/etc/profile.d/conda.sh
ROOT=/root/autodl-tmp/SplatAtlas
ITER=30000
# 方法 -> 环境 + 源码根目录
declare -A ENV_MAP
declare -A CODE_MAP
ENV_MAP[lod_gs]="/root/autodl-tmp/envs/lod_gs"
CODE_MAP[lod_gs]="/root/autodl-tmp/LOD_GS"
ENV_MAP[coadaptgs]="/root/autodl-tmp/envs/co_adaptation_3dgs"
CODE_MAP[coadaptgs]="/root/autodl-tmp/CoAdaptGS"
get_source_res() {
case "$1" in
auditorium|ballroom|barn|caterpillar|courtroom|lighthouse|museum|palace|playground|temple|train|truck)
echo "/root/autodl-tmp/dataset/tnt/$1 2" ;;
bicycle|flowers|garden|stump|treehill)
echo "/root/autodl-tmp/dataset/360/$1 4" ;;
bonsai|counter|kitchen|room)
echo "/root/autodl-tmp/dataset/360/$1 2" ;;
Chair|Drums|Ficus|Hotdog|Lego|Materials|Mic|Ship)
echo "/root/autodl-tmp/dataset/Synthetic_NeRF_Verified/Synthetic_NeRF/$1 1" ;;
DrJohnson|Playroom)
echo "/root/autodl-tmp/dataset/deepblending_clean/$1 1" ;;
*)
echo ""; return 1 ;;
esac
}
MISSING=(
"coadaptgs auditorium"
"coadaptgs ballroom"
"coadaptgs barn"
"coadaptgs caterpillar"
"coadaptgs courtroom"
"coadaptgs lighthouse"
"coadaptgs museum"
"coadaptgs palace"
"coadaptgs playground"
"coadaptgs temple"
"coadaptgs train"
"coadaptgs truck"
"coadaptgs bicycle"
"coadaptgs bonsai"
"coadaptgs counter"
"coadaptgs flowers"
"coadaptgs garden"
"coadaptgs kitchen"
"coadaptgs room"
"coadaptgs stump"
"coadaptgs treehill"
"coadaptgs DrJohnson"
"coadaptgs Playroom"
"lod_gs Chair"
"lod_gs Drums"
"lod_gs Ficus"
"lod_gs Hotdog"
"lod_gs Lego"
"lod_gs Materials"
"lod_gs Mic"
"lod_gs Ship"
)
run_step() {
local name="$1"
local cmd="$2"
echo " [Step] $name ..."
if eval "$cmd"; then
echo " [OK]"
return 0
else
echo " [FAIL]"
return 1
fi
}
for entry in "${MISSING[@]}"; do
read -r method scene <<< "$entry"
env_path="${ENV_MAP[$method]}"
code_root="${CODE_MAP[$method]}"
if [ -z "$env_path" ] || [ -z "$code_root" ]; then
echo "Unknown method or code root for $method"; continue
fi
read -r source_path resolution < <(get_source_res "$scene")
if [ -z "$source_path" ]; then
echo "Skipping $method/$scene: unknown dataset"; continue
fi
model_path="$ROOT/outputs/${method}_${scene}"
ply_path="$model_path/point_cloud/iteration_${ITER}/point_cloud.ply"
if [ ! -f "$ply_path" ]; then
echo "Skipping $method/$scene: PLY not found"; continue
fi
render_dir="$model_path/renders_test_${ITER}"
gt_dir="$model_path/gt_test_${ITER}"
render_flag="$model_path/render_complete_${ITER}.flag"
png_count=$(find "$render_dir" -maxdepth 1 -name "*.png" 2>/dev/null | wc -l)
if [ "$png_count" -eq 0 ]; then
echo "=== $method / $scene (res=$resolution) - RENDER ==="
rm -rf "$render_dir" "$gt_dir"
else
echo "=== $method / $scene - renders exist ($png_count pngs) ==="
fi
conda activate "$env_path"
# 关键修复:把方法自己的源码根目录放在最前面
export PYTHONPATH="${code_root}:${ROOT}:${PYTHONPATH:+:$PYTHONPATH}"
if [ "$png_count" -eq 0 ]; then
run_step "Render" "
python $ROOT/scripts/main_render.py \
--method $method \
--source_path $source_path \
--model_path $model_path \
--iteration $ITER \
--resolution $resolution
" || continue
fi
metrics_json="$model_path/metrics_test_iter${ITER}.json"
if [ ! -f "$metrics_json" ]; then
run_step "Eval" "
python $ROOT/ufd_evalkit/run_eval.py \
--method $method \
--scene $scene \
--render_dir $render_dir \
--gt_dir $gt_dir \
--ply_path $ply_path \
--output_json $metrics_json \
--colmap_dir $source_path
" || continue
else
echo " [Metrics json already exists]"
fi
conda deactivate
done
echo "All done. Now re-run fix_phase5a_table.py to update the CSV."