Add g2q eval metrics and asymmetric MONA-24 configs
- _evaluate: compute R@K + AP for both directions (q2g and g2q) via inverted ground truth; g2q denominator counts only sat-tiles with at least one positive drone in the (sub)sampled query set. Surfaces in train.csv, val.csv, train_recall.csv, W&B summary, and final log. - conf/gtauav_balanced_asym.gin: asymmetric WEB+SAT encoders, MONA in all 24 ViT blocks (~17.6M trainable / ~733M total). - conf/gtauav_baseline_asym.gin: same architecture, baseline_mode=True for Δ R@1 against balanced_asym. - CLAUDE.md / README.md: document new configs, clarify that g2q is now computed (was claimed but missing). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
29
README.md
29
README.md
@@ -355,8 +355,22 @@ Gradient checkpointing: DINOv3 (24 blocks) + DGTRS-CLIP (12 blocks)
|
||||
| logit_scale | 1 | 1 | learnable temperature |
|
||||
| **Total (shared)** | **432M** | **5.6M (1.30%)** | retrieval dim = 512 |
|
||||
|
||||
> **Asymmetric mode** (`--shared-encoder false`): uses separate DINOv3 WEB (drone) + DINOv3 SAT
|
||||
> **Asymmetric mode** (`shared_encoder=False`): separate DINOv3 WEB (drone) + DINOv3 SAT
|
||||
> (satellite) encoders with independent MONA adapters. Requires ~4-5 GB more VRAM.
|
||||
> Use `conf/gtauav_balanced_asym.gin` / `conf/gtauav_baseline_asym.gin` — these set
|
||||
> `shared_encoder=False` and `mona_last_n_blocks=24` for the full-capacity setup.
|
||||
|
||||
### Eval directions
|
||||
|
||||
`_evaluate` computes R@1/5/10 and AP (MRR) for both retrieval directions:
|
||||
|
||||
| Key | Direction | Notes |
|
||||
|-----|-----------|-------|
|
||||
| `r@K_q2g`, `ap_q2g` | drone → satellite (query → gallery) | Denominator: all queries (q2g convention) |
|
||||
| `r@K_g2q`, `ap_g2q` | satellite → drone (gallery → query) | Denominator: only sat-tiles with ≥1 positive drone in subsample |
|
||||
|
||||
g2q is computed via inverted ground truth: for each sat-tile, collect the drone indices
|
||||
that list it as a valid candidate. `n_scored_g2q` is reported in metrics for transparency.
|
||||
|
||||
## Experiments
|
||||
|
||||
@@ -385,8 +399,10 @@ Gallery: sat_img -> GeoRSCLIP -> gallery
|
||||
```
|
||||
caption-test/
|
||||
├── conf/ # Gin configs
|
||||
│ ├── gtauav_balanced.gin # GTA-UAV with text (10 epochs, v3)
|
||||
│ ├── gtauav_baseline.gin # GTA-UAV baseline, no text (v3)
|
||||
│ ├── gtauav_balanced.gin # GTA-UAV with text, shared encoder, MONA 12/24 (v3)
|
||||
│ ├── gtauav_baseline.gin # GTA-UAV baseline, shared, MONA 12/24, no text (v3)
|
||||
│ ├── gtauav_balanced_asym.gin # GTA-UAV with text, asymmetric WEB+SAT, MONA 24/24
|
||||
│ ├── gtauav_baseline_asym.gin # GTA-UAV baseline, asymmetric, MONA 24/24, no text
|
||||
│ ├── gtauav_text_heavy.gin # GTA-UAV text-heavy gate=0.3 (v3)
|
||||
│ ├── gtauav_image_heavy.gin # GTA-UAV image-heavy gate=0.9 (v3)
|
||||
│ ├── balanced.gin # UAV-GeoLoc with text (v2)
|
||||
@@ -485,6 +501,13 @@ python -m src.training.train_gtauav --config conf/gtauav_text_heavy.gin \
|
||||
# Image-heavy (gate=0.9, 10% text weight)
|
||||
python -m src.training.train_gtauav --config conf/gtauav_image_heavy.gin \
|
||||
--filter-meta meta/seg_filter.json --batch-size 48 --epochs 30
|
||||
|
||||
# Asymmetric variants: separate WEB (drone) + SAT (satellite) encoders, MONA in all 24 blocks
|
||||
# Higher capacity (~733M total / ~17.6M trainable), larger VRAM footprint.
|
||||
python -m src.training.train_gtauav --config conf/gtauav_balanced_asym.gin \
|
||||
--filter-meta meta/seg_filter.json
|
||||
python -m src.training.train_gtauav --config conf/gtauav_baseline_asym.gin \
|
||||
--filter-meta meta/seg_filter.json
|
||||
```
|
||||
|
||||
### 3. Train without gin (CLI-only)
|
||||
|
||||
Reference in New Issue
Block a user