run_optimized_supervised.sh 3.3 KB

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