Spaces:
Running on Zero
Running on Zero
File size: 6,574 Bytes
7b03942 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 | #!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
CONDA_SH="${CONDA_SH:-/media/home/smx/miniconda3/bin/conda}"
CONDA_ENV="${CONDA_ENV:-sharp}"
if [[ -x "${CONDA_SH}" ]]; then
eval "$("${CONDA_SH}" shell.bash hook)"
conda activate "${CONDA_ENV}"
fi
export PYTHONPATH="${REPO_ROOT}:${PYTHONPATH:-}"
export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION="${PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION:-python}"
CHECKPOINT="${CHECKPOINT:-${1:-}}"
if [[ -z "${CHECKPOINT}" || ! -f "${CHECKPOINT}" ]]; then
echo "ERROR: pass a checkpoint as arg1 or set CHECKPOINT=/path/to/step_XXXXXXX.pt" >&2
exit 1
fi
export OUT_ROOT="${OUT_ROOT:-${REPO_ROOT}/outputs/validation}"
export RUN_NAME="${RUN_NAME:-unisharp_validation_$(date +%Y%m%d_%H%M%S)}"
RUN_DIR="${OUT_ROOT}/${RUN_NAME}"
mkdir -p "${RUN_DIR}"
export GPU_IDS="${GPU_IDS:-0}"
export VALIDATION_JOBS_PER_GPU="${VALIDATION_JOBS_PER_GPU:-1}"
export VALIDATION_BATCH_SIZE="${VALIDATION_BATCH_SIZE:-1}"
export VALIDATION_FAST_METRICS="${VALIDATION_FAST_METRICS:-1}"
export VALIDATION_MAX_GROUPS="${VALIDATION_MAX_GROUPS:-0}"
export SEED="${SEED:-42}"
export MAX_INDEX_GAP="${MAX_INDEX_GAP:-10}"
export PAIR_MAX_TRANSLATION_M="${PAIR_MAX_TRANSLATION_M:-0.5}"
export PAIR_MIN_OVERLAP="${PAIR_MIN_OVERLAP:-0.6}"
export PANO_POSE_FLIP_CONVENTION="${PANO_POSE_FLIP_CONVENTION:-flip_yz_negate_rel_z}"
DEFAULT_VALIDATION_MANIFEST_DIR="${REPO_ROOT}/validation_manifests"
if [[ -d "${REPO_ROOT}/../validation_manifests" ]]; then
DEFAULT_VALIDATION_MANIFEST_DIR="${REPO_ROOT}/../validation_manifests"
fi
export VALIDATION_MANIFEST_DIR="${VALIDATION_MANIFEST_DIR:-${DEFAULT_VALIDATION_MANIFEST_DIR}}"
export VALIDATION_PSEUDO_DEPTH_ROOT="${VALIDATION_PSEUDO_DEPTH_ROOT:-/media/team_data/ML4_team/datasets/sharp/validation_unik3d_pseudo_depth}"
export RE10K_PSEUDO_DEPTH_ROOT="${RE10K_PSEUDO_DEPTH_ROOT:-/media/team_data/ML4_team/datasets/nopose/re10k_unik3d_pseudo_depth/test}"
export DATA_ROOT_RE10K="${DATA_ROOT_RE10K:-/media/team_data/ML4_team/datasets/nopose/re10k}"
export DATA_ROOT_DL3DV="${DATA_ROOT_DL3DV:-/media/team_data/ML4_team/datasets/sharp/DL3DV-ALL-960P}"
export DATA_ROOT_HM3D="${DATA_ROOT_HM3D:-/media/team_data/ML4_team/datasets/panogs}"
export DATA_ROOT_REPLICA="${DATA_ROOT_REPLICA:-/media/team_data/ML4_team/datasets/sharp/replica}"
export DATA_ROOT_SIM="${DATA_ROOT_SIM:-/media/team_data/ML4_team/datasets/smx_sim}"
export SIM_POSE_ROOT="${SIM_POSE_ROOT:-/media/team_data/ML4_team/datasets/smx_sim/30cm}"
DEFAULT_DATASET_MANIFEST_DIR="${REPO_ROOT}/dataset_manifests"
if [[ -d "${REPO_ROOT}/../dataset_manifests" ]]; then
DEFAULT_DATASET_MANIFEST_DIR="${REPO_ROOT}/../dataset_manifests"
fi
export WILD_ROOTS_FILE="${WILD_ROOTS_FILE:-${DEFAULT_DATASET_MANIFEST_DIR}/wildrgbd_roots.txt}"
export DATA_ROOT_SCANNETPP="${DATA_ROOT_SCANNETPP:-/media/home/songmeixi_insta360.com/sharpgs/scannetpp}"
export DATA_ROOT_SCANETPP_FISHEYE="${DATA_ROOT_SCANETPP_FISHEYE:-/media/team_data/ML4_team/datasets/scan}"
export DATA_ROOT_TAT="${DATA_ROOT_TAT:-/media/team_data/ML4_team/datasets/TAT/tanks_and_temples}"
DATASETS_CSV="${DATASETS:-re10k,dl3dv,hm3d,sim,wildrgbd}"
IFS=',' read -r -a DATASET_ARR <<< "${DATASETS_CSV}"
IFS=',' read -r -a GPU_ID_ARR <<< "${GPU_IDS}"
if [[ "${VALIDATION_JOBS_PER_GPU}" -lt 1 ]]; then
echo "ERROR: VALIDATION_JOBS_PER_GPU must be >= 1" >&2
exit 1
fi
data_root_for_dataset() {
case "$1" in
re10k) echo "${DATA_ROOT_RE10K}" ;;
dl3dv) echo "${DATA_ROOT_DL3DV}" ;;
hm3d)
if [[ -d "${DATA_ROOT_HM3D}/test" ]]; then
echo "${DATA_ROOT_HM3D}/test"
else
echo "${DATA_ROOT_HM3D}"
fi
;;
replica) echo "${DATA_ROOT_REPLICA}" ;;
sim) echo "${DATA_ROOT_SIM}" ;;
wildrgbd) echo "${WILD_ROOTS_FILE}" ;;
scannetpp) echo "${DATA_ROOT_SCANNETPP}" ;;
scanetpp_fisheye) echo "${DATA_ROOT_SCANETPP_FISHEYE}" ;;
smx_sim_fisheye) echo "${DATA_ROOT_SIM}" ;;
tat) echo "${DATA_ROOT_TAT}" ;;
*) echo "Unknown dataset: $1" >&2; return 1 ;;
esac
}
extra_args_for_dataset() {
case "$1" in
re10k) echo "--re10k-pseudo-depth-root ${RE10K_PSEUDO_DEPTH_ROOT}" ;;
sim) echo "--sim-pose-root ${SIM_POSE_ROOT}" ;;
*) echo "" ;;
esac
}
run_dataset() {
local gpu_id="$1"
local dataset="$2"
local data_root
local out_dir
local manifest
data_root="$(data_root_for_dataset "${dataset}")"
out_dir="${RUN_DIR}/${dataset}"
manifest="${VALIDATION_MANIFEST_DIR}/${dataset}.txt"
local cmd=(
python -m unisharp.validation.run_validation
--checkpoint "${CHECKPOINT}"
--dataset "${dataset}"
--data-root "${data_root}"
--device "cuda:0"
--out-dir "${out_dir}"
--validation-batch-size "${VALIDATION_BATCH_SIZE}"
--validation-pseudo-depth-root "${VALIDATION_PSEUDO_DEPTH_ROOT}"
--max-index-gap "${MAX_INDEX_GAP}"
--pair-max-translation-m "${PAIR_MAX_TRANSLATION_M}"
--pair-min-overlap "${PAIR_MIN_OVERLAP}"
--seed "${SEED}"
)
if [[ -f "${manifest}" ]]; then
cmd+=(--manifest-file "${manifest}")
fi
if [[ "${VALIDATION_MAX_GROUPS}" != "0" ]]; then
cmd+=(--manifest-max-groups "${VALIDATION_MAX_GROUPS}")
fi
if [[ "${VALIDATION_FAST_METRICS}" == "1" ]]; then
cmd+=(--fast-metrics)
fi
read -r -a extra_args <<< "$(extra_args_for_dataset "${dataset}")"
if [[ "${#extra_args[@]}" -gt 0 && -n "${extra_args[0]:-}" ]]; then
cmd+=("${extra_args[@]}")
fi
echo "Validating ${dataset} on GPU ${gpu_id}"
CUDA_VISIBLE_DEVICES="${gpu_id}" PANO_POSE_FLIP_CONVENTION="${PANO_POSE_FLIP_CONVENTION}" "${cmd[@]}"
}
worker() {
local worker_id="$1"
local gpu_index=$(( worker_id % ${#GPU_ID_ARR[@]} ))
local gpu_id="${GPU_ID_ARR[${gpu_index}]}"
local total_workers=$(( ${#GPU_ID_ARR[@]} * VALIDATION_JOBS_PER_GPU ))
local idx
for idx in "${!DATASET_ARR[@]}"; do
if (( idx % total_workers == worker_id )); then
run_dataset "${gpu_id}" "${DATASET_ARR[${idx}]}"
fi
done
}
echo "UniSharp validation"
echo " CHECKPOINT=${CHECKPOINT}"
echo " RUN_DIR=${RUN_DIR}"
echo " DATASETS=${DATASETS_CSV}"
echo " GPU_IDS=${GPU_IDS}"
TOTAL_WORKERS=$(( ${#GPU_ID_ARR[@]} * VALIDATION_JOBS_PER_GPU ))
PIDS=()
for worker_id in $(seq 0 $((TOTAL_WORKERS - 1))); do
worker "${worker_id}" &
PIDS+=("$!")
done
STATUS=0
for pid in "${PIDS[@]}"; do
wait "${pid}" || STATUS=1
done
if [[ "${STATUS}" -ne 0 ]]; then
echo "One or more validation workers failed." >&2
exit "${STATUS}"
fi
echo "Validation finished."
echo "Outputs: ${RUN_DIR}"
|