| # Optional portable retraining entry point. Inference does not require this. | |
| set -euo pipefail | |
| DATASET_CSV="${1:?Usage: $0 DATASET_CSV OUTPUT_DIR [GPU]}" | |
| OUTPUT_DIR="${2:?Usage: $0 DATASET_CSV OUTPUT_DIR [GPU]}" | |
| GPU="${3:-0}" | |
| SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" | |
| BUNDLE="$(cd "${SCRIPT_DIR}/.." && pwd)" | |
| PYTHON="${PYTHON:-python}" | |
| SAM3_CKPT="${SAM3_CHECKPOINT:-${BUNDLE}/model/sam3_base.pt}" | |
| CUDA_VISIBLE_DEVICES="${GPU}" PYTHONNOUSERSITE=1 "${PYTHON}" -u \ | |
| "${SCRIPT_DIR}/train_sam3_decoder_segmentation.py" \ | |
| --dataset_csv "${DATASET_CSV}" \ | |
| --protocol all_public_indomain \ | |
| --output_dir "${OUTPUT_DIR}" \ | |
| --sam3_checkpoint "${SAM3_CKPT}" \ | |
| --decoder sam3_native \ | |
| --prompt_type semantic_text \ | |
| --prompt_text "${PROMPT_TEXT:-breast lesion}" \ | |
| --encoder_trainable lora \ | |
| --lora_rank 8 \ | |
| --lora_alpha 16 \ | |
| --batch_size "${BATCH_SIZE:-8}" \ | |
| --epochs "${EPOCHS:-50}" \ | |
| --patience "${PATIENCE:-10}" \ | |
| --lr 1e-4 \ | |
| --encoder_lr 1e-5 \ | |
| --use_amp \ | |
| --resume | |