File size: 2,652 Bytes
057ec4b | 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 | #!/bin/bash
# U-Mamba finale: predict test sets (umamba env, both A100s) then score the 7
# framework metrics (seggen env, thread-capped). Mirrors the nnU-Net predict+eval
# flow but with results_umamba / preprocessed_umamba / trainer 100ep / arch=umamba.
set -u
cd /home/wzhang/LSC/Code/NPJ
source /opt/anaconda3/etc/profile.d/conda.sh
export CUDA_DEVICE_ORDER=PCI_BUS_ID
RAW=/home/wzhang/LSC/Code/NPJ/nnunet_workspace/raw
PRE=/home/wzhang/LSC/Code/NPJ/nnunet_workspace/preprocessed_umamba
RES=/home/wzhang/LSC/Code/NPJ/nnunet_workspace/results_umamba
PRED=/home/wzhang/LSC/Code/NPJ/nnunet_workspace/predTs_umamba
DATA_ROOT=/home/wzhang/LSC/Dataset/Segmentation/processed_unified
TR=nnUNetTrainerUMambaBot_100epochs
mkdir -p "$PRED"
dsname () { case $1 in
1) echo cvc_clinicdb official;; 2) echo kvasir_seg official;; 3) echo fives official;;
4) echo refuge2 official;; 5) echo busi fold01;; 6) echo idridd_segmentation fold01;;
7) echo acdc_png official;; 8) echo pannuke_semantic fold01;; 9) echo medsegdb_isic2018 holdout;;
10) echo medsegdb_kits19 fold01;;
esac; }
rawname () { printf "Dataset%03d_%s_%s" "$1" "$2" "$3"; }
# ---------- Phase 1: predict (umamba env), ids split across GPU4 / GPU5 ----------
conda activate umamba
export nnUNet_raw=$RAW nnUNet_preprocessed=$PRE nnUNet_results=$RES
export OMP_NUM_THREADS=4 MKL_NUM_THREADS=4
predict_ids () {
local gpu=$1; shift
for id in "$@"; do
read -r ds proto < <(dsname "$id"); dn=$(rawname "$id" "$ds" "$proto")
for f in 0 1 2; do
out=$PRED/d${id}_f${f}; mkdir -p "$out"
echo "[predict gpu$gpu] $dn f$f"
CUDA_VISIBLE_DEVICES=$gpu nnUNetv2_predict -i "$RAW/$dn/imagesTs" -o "$out" \
-d "$id" -c 2d -f "$f" -tr "$TR" --disable_tta > "$out/predict.log" 2>&1
done
done
}
predict_ids 4 1 2 3 4 5 &
predict_ids 5 6 7 8 9 10 &
wait
echo PREDICT_DONE
# ---------- Phase 2: eval (seggen env), parallel, thread-capped, max 10 ----------
conda deactivate; conda activate seggen
export OMP_NUM_THREADS=8 MKL_NUM_THREADS=8 OPENBLAS_NUM_THREADS=8 NUMEXPR_NUM_THREADS=8
for id in 1 2 3 4 5 6 7 8 9 10; do
read -r ds proto < <(dsname "$id")
for f in 0 1 2; do
while (( $(jobs -rp | wc -l) >= 10 )); do wait -n; done
(
python framework/nnunet_eval.py --data_root "$DATA_ROOT" \
--dataset "$ds" --protocol "$proto" --raw "$RAW" \
--dataset_id "$id" --fold "$f" --pred_dir "$PRED/d${id}_f${f}" \
--arch umamba --exp_name baselines > "$PRED/d${id}_f${f}/eval.log" 2>&1
echo "evaled d${id}_f${f}: $(tail -1 "$PRED/d${id}_f${f}/eval.log")"
) &
done
done
wait
echo EVAL_DONE
|