# GTA-UAV Balanced: Asymmetric DINOv3 (WEB+SAT) with L1/L2/L3 captions. # Symmetric InfoNCE + MutuallyExclusiveSampler (no false negatives). # 10 epochs, MONA all 24 blocks, 1024-dim retrieval, hard negative bank. import src.losses.multi_infonce # ---- Training ---- TrainConfigGTAUAV.epochs = 10 TrainConfigGTAUAV.batch_size = 8 TrainConfigGTAUAV.num_workers = 4 TrainConfigGTAUAV.learning_rate = 1e-4 TrainConfigGTAUAV.text_lr_factor = 0.1 TrainConfigGTAUAV.weight_decay = 1e-4 TrainConfigGTAUAV.grad_clip = 1.0 TrainConfigGTAUAV.grad_accum_steps = 8 TrainConfigGTAUAV.use_amp = True TrainConfigGTAUAV.eval_every = 1 TrainConfigGTAUAV.warmup_epochs = 2 TrainConfigGTAUAV.seed = 42 TrainConfigGTAUAV.device = "cuda" # ---- Model ---- TrainConfigGTAUAV.init_gate = 0.7 TrainConfigGTAUAV.baseline_mode = False TrainConfigGTAUAV.shared_encoder = True # single DINOv3 WEB for both branches TrainConfigGTAUAV.mona_bottleneck = 64 TrainConfigGTAUAV.mona_last_n_blocks = 12 # inject MONA only in last 12/24 ViT blocks TrainConfigGTAUAV.gradient_checkpointing = True # ---- Loss ---- TrainConfigGTAUAV.loss_type = "symmetric" TrainConfigGTAUAV.tau_init = 0.07 TrainConfigGTAUAV.label_smoothing = 0.1 TrainConfigGTAUAV.learnable_temperature = True TrainConfigGTAUAV.weight_q2g = 0.6 TrainConfigGTAUAV.weight_g2q = 0.4 TrainConfigGTAUAV.neg_bank_size = 4096 # ---- Sampling ---- TrainConfigGTAUAV.sampler_type = "dss" # "dss" or "mutex" TrainConfigGTAUAV.dss_warmup_epochs = 1 # first N epochs use mutex-only (untrained embeds not useful) TrainConfigGTAUAV.dss_reembed_every = 1 TrainConfigGTAUAV.use_mutex_sampler = True # legacy flag, kept True unless disabling both samplers # ---- Output ---- TrainConfigGTAUAV.output_dir = "out/gtauav/with_text_exp_gate_SRGF" # ---- Tracking ---- TrainConfigGTAUAV.use_wandb = False TrainConfigGTAUAV.use_tb = True TrainConfigGTAUAV.use_gradcam = True TrainConfigGTAUAV.gradcam_every = 5 TrainConfigGTAUAV.use_profiler = False TrainConfigGTAUAV.log_grad_norms = True # ---- InfoNCELoss (gin-configurable) ---- InfoNCELoss.temperature_init = 0.07 InfoNCELoss.learnable_temperature = True InfoNCELoss.label_smoothing = 0.1 InfoNCELoss.weight_q2g = 0.6 InfoNCELoss.weight_g2q = 0.4 InfoNCELoss.tau_min = 0.01 InfoNCELoss.tau_max = 0.1 InfoNCELoss.hard_mining_k = 512 # 0 = use whole queue (disable mining)