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