#!/bin/bash # ============================================================ # Band Selection Experiments — patches_v2 (clean Oct-Nov data) # ============================================================ # Bands ranked by Cohen's d separability on patches_v2: # Rank 1 band_25 SurfaceRoughness d=0.496 # Rank 2 band_18 Slope d=0.489 # Rank 3 band_22 TPI d=0.424 # Rank 4 band_23 TRI d=0.361 # Rank 5 band_10 NDVI d=0.304 # Rank 6 band_6 B12 d=0.275 # Rank 7 band_24 TWI d=0.261 # Rank 8 band_27 S1_VV d=0.237 # Rank 9 band_17 Elevation d=0.237 # Rank 10 band_11 NDWI d=0.234 # Rank 11 band_13 NDMI d=0.228 # Rank 12 band_14 BSI d=0.212 # Rank 13 band_4 B8A d=0.184 # Rank 14 band_3 B8 d=0.167 # Rank 15 band_9 RedEdge3 d=0.161 # Rank 16 band_26 Hillshade d=0.154 # Rank 17 band_8 RedEdge2 d=0.141 # Rank 18 band_5 B11 d=0.123 # Rank 19 band_15 Brightness_TC d=0.081 # Rank 20 band_7 RedEdge1 d=0.080 # Rank 21 band_19 Aspect d=0.077 # Rank 22 band_0 B2 d=0.076 # Rank 23 band_1 B3 d=0.064 # Rank 24 band_2 B4 d=0.051 # --- below this line d < 0.04 (noise) --- # Rank 25 band_12 NDSI d=0.031 # Rank 26 band_16 IronOxide d=0.008 # Rank 27 band_20 PlanCurvature d=0.008 # Rank 28 band_21 ProfileCurvature d=0.005 # ============================================================ set -e source /data1/nasiruddink/miniconda3/etc/profile.d/conda.sh conda activate brats export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data1/nasiruddink/miniconda3/envs/brats/lib:/data1/nasiruddink/miniconda3/envs/brats/lib/python3.10/site-packages/nvidia/cudnn/lib export TF_CPP_MIN_LOG_LEVEL=2 DATA="dataset/patches_v2" mkdir -p bandselection/logs # ── Band sets (cumulative by Cohen's d rank) ────────────────── # Top 8 (d > 0.23) — terrain + key spectral TOP8="band_25,band_18,band_22,band_23,band_10,band_6,band_24,band_27" # Top 12 (d > 0.18) TOP12="band_25,band_18,band_22,band_23,band_10,band_6,band_24,band_27,band_17,band_11,band_13,band_14" # Top 16 (d > 0.14) TOP16="band_25,band_18,band_22,band_23,band_10,band_6,band_24,band_27,band_17,band_11,band_13,band_14,band_4,band_3,band_9,band_26" # Top 20 (d > 0.07) TOP20="band_25,band_18,band_22,band_23,band_10,band_6,band_24,band_27,band_17,band_11,band_13,band_14,band_4,band_3,band_9,band_26,band_8,band_5,band_15,band_7" # Top 24 (d > 0.05) — exclude bottom 4 noise bands TOP24="band_25,band_18,band_22,band_23,band_10,band_6,band_24,band_27,band_17,band_11,band_13,band_14,band_4,band_3,band_9,band_26,band_8,band_5,band_15,band_7,band_19,band_0,band_1,band_2" # Terrain only — test if terrain alone is sufficient (10 bands) TERRAIN="band_25,band_18,band_22,band_23,band_24,band_17,band_26,band_19,band_20,band_21" # ============================================================== # BATCH 1 — GPU 0, 1, 2 in parallel # ============================================================== echo "Starting BATCH 1: top8 | top12 | top16 ..." CUDA_VISIBLE_DEVICES=0 MODEL_NAME="attention_unet" DATA_DIR=$DATA \ BAND_LIST=$TOP8 RUN_NAME="v2_top8" CKPT_DIR="bandselection/v2_top8" \ python3 train.py > bandselection/logs/v2_top8.log 2>&1 & PID1=$! CUDA_VISIBLE_DEVICES=1 MODEL_NAME="attention_unet" DATA_DIR=$DATA \ BAND_LIST=$TOP12 RUN_NAME="v2_top12" CKPT_DIR="bandselection/v2_top12" \ python3 train.py > bandselection/logs/v2_top12.log 2>&1 & PID2=$! CUDA_VISIBLE_DEVICES=2 MODEL_NAME="attention_unet" DATA_DIR=$DATA \ BAND_LIST=$TOP16 RUN_NAME="v2_top16" CKPT_DIR="bandselection/v2_top16" \ python3 train.py > bandselection/logs/v2_top16.log 2>&1 & PID3=$! echo " Waiting for batch 1 (PIDs $PID1 $PID2 $PID3) ..." wait $PID1 $PID2 $PID3 echo "Batch 1 done. Sleeping 60s ..." sleep 60 # ============================================================== # BATCH 2 — GPU 0, 1, 2 in parallel # ============================================================== echo "Starting BATCH 2: top20 | top24 | terrain_only ..." CUDA_VISIBLE_DEVICES=0 MODEL_NAME="attention_unet" DATA_DIR=$DATA \ BAND_LIST=$TOP20 RUN_NAME="v2_top20" CKPT_DIR="bandselection/v2_top20" \ python3 train.py > bandselection/logs/v2_top20.log 2>&1 & PID1=$! CUDA_VISIBLE_DEVICES=1 MODEL_NAME="attention_unet" DATA_DIR=$DATA \ BAND_LIST=$TOP24 RUN_NAME="v2_top24" CKPT_DIR="bandselection/v2_top24" \ python3 train.py > bandselection/logs/v2_top24.log 2>&1 & PID2=$! CUDA_VISIBLE_DEVICES=2 MODEL_NAME="attention_unet" DATA_DIR=$DATA \ BAND_LIST=$TERRAIN RUN_NAME="v2_terrain" CKPT_DIR="bandselection/v2_terrain" \ python3 train.py > bandselection/logs/v2_terrain.log 2>&1 & PID3=$! echo " Waiting for batch 2 (PIDs $PID1 $PID2 $PID3) ..." wait $PID1 $PID2 $PID3 echo "Batch 2 done." echo "" echo "ALL 6 EXPERIMENTS COMPLETE." echo "Results in: bandselection/v2_top{8,12,16,20,24}/ and bandselection/v2_terrain/"