File size: 4,311 Bytes
d643072 |
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 |
#!/bin/bash
export PATH="$HOME/anaconda3/envs/geneval/bin:$PATH"
# ===================== hyper =================
geneval=true
np=8 # number of GPU to use
py=tools/metrics/geneval/evaluation/evaluate_images.py
default_sample_nums=533
report_to=wandb
default_log_suffix_label=''
# parser
img_path=$1
exp_names=$2
job_name=$(basename $(dirname "$img_path"))
for arg in "$@"
do
case $arg in
--sample_nums=*)
sample_nums="${arg#*=}"
shift
;;
--suffix_label=*)
suffix_label="${arg#*=}"
shift
;;
--log_geneval=*)
log_geneval="${arg#*=}"
shift
;;
*)
;;
esac
done
sample_nums=${sample_nums:-$default_sample_nums}
samples_per_gpu=$((sample_nums / np))
log_suffix_label=${suffix_label:-$default_log_suffix_label}
log_geneval=${log_geneval:-true}
echo "sample_nums: $sample_nums"
echo "log_geneval: $log_geneval"
mask2former_path=output/pretrained_models/geneval
if [ ! -d "$mask2former_path" ]; then
echo "Model path does not exist. Running download_models.sh..."
bash tools/metrics/geneval/evaluation/download_models.sh $mask2former_path
fi
if [ "$geneval" = true ]; then
# =============== compute GenEval from json ==================
echo "==================== computing geneval ===================="
cmd_template="python $py --img_path {img_path} --exp_name {exp_name} \
--model-path $mask2former_path \
--report_to $report_to --name {job_name} "
if [[ "$exp_names" != *.txt ]]; then
exp_name=$(basename "$exp_names")
cmd="${cmd_template//\{img_path\}/$img_path}"
cmd="${cmd//\{exp_name\}/$exp_name}"
cmd="${cmd//\{job_name\}/$job_name}"
cmd="${cmd//\{gpu_id\}/0}"
eval CUDA_VISIBLE_DEVICES=0 $cmd >> "${img_path}/${exp_name}_geneval_result.txt" 2>&1
cat "${img_path}/${exp_name}_geneval_result.txt"
else
if [ ! -f "$exp_names" ]; then
echo "Model paths file not found: $exp_names"
exit 1
fi
gpu_id=0
max_parallel_jobs=8
job_count=0
echo "" >> "$exp_names" # add a new line to the file avoid skipping last line dir
while IFS= read -r exp_name; do
echo $exp_name
if [ -n "$exp_name" ] && ! [[ $exp_name == \#* ]]; then
exp_name=$(basename "$exp_name")
cmd="${cmd_template//\{img_path\}/$img_path}"
cmd="${cmd//\{exp_name\}/$exp_name}"
cmd="${cmd//\{job_name\}/$job_name}"
echo "Running on GPU $gpu_id: $cmd"
eval CUDA_VISIBLE_DEVICES=$gpu_id $cmd >> "${img_path}/${exp_name}_geneval_result.txt" 2>&1 &
gpu_id=$(( (gpu_id + 1) % 8 ))
job_count=$((job_count + 1))
if [ $job_count -ge $max_parallel_jobs ]; then
wait
job_count=0
fi
fi
done < "$exp_names"
wait
# show the results
while IFS= read -r exp_name; do
if [ -n "$exp_name" ] && ! [[ $exp_name == \#* ]]; then
cat "${img_path}/${exp_name}_geneval_result.txt"
fi
done < "$exp_names"
fi
fi
# =============== log GenEval result online after the above result saving ==================
if [ "$log_geneval" = true ] && [ "$geneval" = true ]; then
echo "==================== logging onto $report_to ===================="
cmd_template="python $py --img_path {img_path} --exp_name {exp_name} \
--model-path $mask2former_path \
--report_to $report_to --name {job_name} "
if [ -n "${log_suffix_label}" ]; then
echo "log_suffix_label: $log_suffix_label"
cmd_template="${cmd_template} --suffix_label ${log_suffix_label}"
fi
if [[ "$exp_names" != *.txt ]]; then
exp_name=$(basename "$exp_names")
cmd="${cmd_template//\{img_path\}/$img_path}"
cmd="${cmd//\{exp_name\}/$exp_name}"
cmd="${cmd//\{job_name\}/$job_name}"
echo $cmd
eval $cmd --log_geneval
else
while IFS= read -r exp_name; do
if [ -n "$exp_name" ] && ! [[ $exp_name == \#* ]]; then
exp_name=$(basename "$exp_name")
cmd="${cmd_template//\{img_path\}/$img_path}"
cmd="${cmd//\{exp_name\}/$exp_name}"
cmd="${cmd//\{job_name\}/$job_name}"
eval $cmd --log_geneval
fi
done < "$exp_names"
wait
fi
fi
export PATH="$HOME/anaconda3/envs/sana/bin:$PATH"
echo GenEval finally done
|