| #!/bin/bash |
| source /root/miniconda3/etc/profile.d/conda.sh |
| ROOT=/root/autodl-tmp/SplatAtlas |
| ITER=30000 |
|
|
| |
| declare -A ENV_MAP CODE_MAP |
| ENV_MAP[coadaptgs]="/root/autodl-tmp/envs/co_adaptation_3dgs" |
| CODE_MAP[coadaptgs]="/root/autodl-tmp/CoAdaptGS" |
| ENV_MAP[lod_gs]="/root/autodl-tmp/envs/lod_gs" |
| CODE_MAP[lod_gs]="/root/autodl-tmp/LOD_GS" |
|
|
| |
| get_dataset_path() { |
| case "$1" in |
| auditorium|ballroom|barn|caterpillar|courtroom|lighthouse|museum|palace|playground|temple|train|truck) |
| echo "/root/autodl-tmp/dataset/tnt/$1" ;; |
| bicycle|flowers|garden|stump|treehill) |
| echo "/root/autodl-tmp/dataset/360/$1" ;; |
| bonsai|counter|kitchen|room) |
| echo "/root/autodl-tmp/dataset/360/$1" ;; |
| Chair|Drums|Ficus|Hotdog|Lego|Materials|Mic|Ship) |
| echo "/root/autodl-tmp/dataset/Synthetic_NeRF_Verified/Synthetic_NeRF/$1" ;; |
| DrJohnson|Playroom) |
| echo "/root/autodl-tmp/dataset/deepblending_clean/$1" ;; |
| *) echo "" ;; |
| esac |
| } |
|
|
| |
| CELLS=( |
| "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" |
| ) |
|
|
| printf "%-18s %-20s %8s %8s %8s\n" "Method" "Scene" "PSNR" "SSIM" "LPIPS" |
| echo "--------------------------------------------------------------------" |
|
|
| for entry in "${CELLS[@]}"; do |
| read -r method scene <<< "$entry" |
| env_path="${ENV_MAP[$method]}" |
| code_path="${CODE_MAP[$method]}" |
| if [ -z "$env_path" ] || [ -z "$code_path" ]; then |
| echo "Skipping $method/$scene (no env/code)" |
| continue |
| fi |
|
|
| model_path="$ROOT/outputs/${method}_${scene}" |
| renders_dir="$model_path/renders_test_${ITER}" |
| gt_dir="$model_path/gt_test_${ITER}" |
| ply_path="$model_path/point_cloud/iteration_${ITER}/point_cloud.ply" |
| metrics_json="$model_path/metrics_test_iter${ITER}.json" |
| colmap_dir=$(get_dataset_path "$scene") |
|
|
| |
| if [ ! -d "$renders_dir" ] || [ $(ls "$renders_dir"/*.png 2>/dev/null | wc -l) -eq 0 ]; then |
| printf "%-18s %-20s %8s %8s %8s\n" "$method" "$scene" "NO_RENDER" "" "" |
| continue |
| fi |
|
|
| |
| conda activate "$env_path" |
| export PYTHONPATH="${code_path}:${ROOT}:${PYTHONPATH}" |
|
|
| |
| if [ ! -f "$metrics_json" ]; then |
| python "$ROOT/ufd_evalkit/run_eval.py" \ |
| --method "$method" \ |
| --scene "$scene" \ |
| --render_dir "$renders_dir" \ |
| --gt_dir "$gt_dir" \ |
| --ply_path "$ply_path" \ |
| --output_json "$metrics_json" \ |
| --colmap_dir "$colmap_dir" 2>/dev/null |
| fi |
|
|
| |
| if [ -f "$metrics_json" ]; then |
| read -r psnr ssim lpips < <( |
| python -c " |
| import json |
| with open('$metrics_json') as f: |
| d = json.load(f) |
| psnr = d['photometric'].get('PSNR', float('nan')) |
| ssim = d['photometric'].get('SSIM', float('nan')) |
| lpips = d['photometric'].get('LPIPS', float('nan')) |
| print(f'{psnr:.4f} {ssim:.4f} {lpips:.4f}') |
| " |
| ) |
| printf "%-18s %-20s %8s %8s %8s\n" "$method" "$scene" "$psnr" "$ssim" "$lpips" |
| else |
| printf "%-18s %-20s %8s %8s %8s\n" "$method" "$scene" "FAILED" "" "" |
| fi |
|
|
| conda deactivate |
| done |
|
|