run_optimized_supervised.sh 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #!/usr/bin/env bash
  2. set -euo pipefail
  3. ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
  4. cd "$ROOT_DIR"
  5. PYTHON="/opt/miniforge3/envs/xnet_mamba/bin/python"
  6. DATASET="${DATASET:-BUSI}"
  7. RUN_ALL="${RUN_ALL:-0}"
  8. SEED="${SEED:-42}"
  9. EXTRA_SET_ARGS="${EXTRA_SET_ARGS:-}"
  10. dataset_root() {
  11. case "$1" in
  12. "BUSI") echo "data/BUSI" ;;
  13. "BUS-UCLM") echo "data/BUS-UCLM" ;;
  14. "BUS-BRA") echo "data/BUS-BRA" ;;
  15. "BUS_UC") echo "data/BUS_UC" ;;
  16. "CCAUI") echo "data/CCAUI" ;;
  17. "DDTI") echo "data/DDTI" ;;
  18. "TN3K") echo "data/TN3K" ;;
  19. "TG3K") echo "data/TG3K" ;;
  20. "OTU_2d") echo "data/OTU_2d" ;;
  21. *) echo "Unsupported dataset: $1" >&2; exit 1 ;;
  22. esac
  23. }
  24. config_path() {
  25. case "$1" in
  26. "BUSI") echo "configs/segmentation/optimized/sup_busi_opt.yaml" ;;
  27. "BUS-UCLM") echo "configs/segmentation/optimized/sup_bus_uclm_opt.yaml" ;;
  28. "BUS-BRA") echo "configs/segmentation/optimized/sup_bus_bra_opt.yaml" ;;
  29. "BUS_UC") echo "configs/segmentation/optimized/sup_bus_uc_opt.yaml" ;;
  30. "CCAUI") echo "configs/segmentation/optimized/sup_ccaui_opt.yaml" ;;
  31. "DDTI") echo "configs/segmentation/optimized/sup_ddti_opt.yaml" ;;
  32. "TN3K") echo "configs/segmentation/optimized/sup_tn3k_opt.yaml" ;;
  33. "TG3K") echo "configs/segmentation/optimized/sup_tg3k_opt.yaml" ;;
  34. "OTU_2d") echo "configs/segmentation/optimized/sup_otu_2d_opt.yaml" ;;
  35. *) echo "Unsupported dataset: $1" >&2; exit 1 ;;
  36. esac
  37. }
  38. needs_project_split() {
  39. case "$1" in
  40. "BUSI"|"BUS-UCLM"|"BUS-BRA"|"BUS_UC"|"CCAUI"|"DDTI") return 0 ;;
  41. *) return 1 ;;
  42. esac
  43. }
  44. prepare_split() {
  45. local dataset="$1"
  46. local root
  47. root="$(dataset_root "$dataset")"
  48. if needs_project_split "$dataset"; then
  49. echo "[split] ${dataset}"
  50. "$PYTHON" scripts/generate_project_split.py --dataset "$dataset" --root "$root" --seed "$SEED"
  51. fi
  52. }
  53. run_one() {
  54. local dataset="$1"
  55. local config
  56. config="$(config_path "$dataset")"
  57. prepare_split "$dataset"
  58. "$PYTHON" - "$config" ${EXTRA_SET_ARGS} <<'PY'
  59. import sys
  60. from lib.utils.config import apply_dotlist_overrides, load_yaml_config
  61. config = sys.argv[1]
  62. overrides = sys.argv[2:]
  63. cfg = apply_dotlist_overrides(load_yaml_config(config), overrides)
  64. print("[config]", config)
  65. print(
  66. "[effective]",
  67. f"dataset={cfg['dataset']['dataset_name']}",
  68. f"root={cfg['dataset']['root']}",
  69. f"image_size={cfg['dataset']['image_size']}",
  70. f"batch_size={cfg['train']['batch_size']}",
  71. f"val_batch_size={cfg['train']['val_batch_size']}",
  72. f"amp={cfg['train']['amp']}",
  73. f"lr={cfg['optimizer']['lr']}",
  74. f"swanlab={cfg['logging']['use_swanlab']}",
  75. f"swanlab_mode={cfg['logging'].get('swanlab_mode')}",
  76. f"swanlab_logdir={cfg['logging'].get('swanlab_logdir', 'swanlog')}",
  77. f"experiment={cfg['logging']['experiment_name']}",
  78. )
  79. PY
  80. echo "[train] ${dataset} using ${config}"
  81. "$PYTHON" tools/train.py --config "$config" --set ${EXTRA_SET_ARGS}
  82. }
  83. if [[ "$RUN_ALL" == "1" ]]; then
  84. for dataset in BUSI BUS-UCLM BUS-BRA BUS_UC CCAUI DDTI TN3K TG3K OTU_2d; do
  85. run_one "$dataset"
  86. done
  87. else
  88. run_one "$DATASET"
  89. fi