fuse_proj: Initial operational package for 3 researchers (Pavlenko/Blizno/Moroz)

Multimodal fusion research on StripNet+GTA-UAV proxy:
- 3 independent fusion tracks: condition-aware (A), token/bottleneck (B), role-aware (C)
- Shared interfaces, protocol, dataset audit, baseline benchmarks
- Canonical version-chain references to vault (SPEC, ANALYSIS, TRIAGE)
- Personalized task plans and decision tables for each researcher
- 3 generated DOCX task assignment files with milestones and DoD checklist
- Full modality dropout diagnostics and missing-modality robustness requirements
- Data contract, benchmark registry, experiment tracking infrastructure

Operational documents:
- docs/00_project/: MERIDIAN context, protocol, repository reuse guide, experiment specification
- docs/01_tasks/: Master assignment + 3 individual researcher tracks + joint integration
- docs/02_references/: Core literature, version-chain bases, code maps
- docs/03_codebase_guides/: Existing code snapshots from vault
- scripts/: gen_task_plans.js (DOCX generation), placeholder infrastructure
- vendor_reference/: Snapshots of caption_test, depth_edges_annotate, existing SOFIA/SegModel code
- reports/, results/, experiments/: Shared output structure for all 3 researchers

3 DOCX files generated from gen_task_plans.js (Times New Roman 14pt, GOST format):
- План_заданий_Павленко_БВ.docx (Condition-Aware track, fusion API owner)
- План_заданий_Близно_МВ.docx (Token/Bottleneck track, benchmark owner)
- План_заданий_Мороз_ЕС.docx (Role-Aware track, data contract owner)

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
Pikaliov
2026-06-11 17:16:57 +03:00
commit 2c6a00a4ca
155 changed files with 39765 additions and 0 deletions

View File

@@ -0,0 +1,210 @@
# Единый экспериментальный protocol GTA-UAV
## 1. Dataset
Primary dataset: GTA-UAV-LR.
| Компонент | Ожидаемый источник |
|---|---|
| UAV RGB | `drone/images/`, 33,763 изображений, исходно 512x384 |
| Satellite RGB | `satellite/`, 14,640 изображений, 256x256 |
| Pair labels | `cross-area-drone2sate-{train,test}.json` |
| Captions | GTA-UAV-LR-captions для UAV и satellite |
| Auxiliary maps | GTA-UAV-LR-aug SafeTensors |
| Split snapshots | `caption-test/meta/train_80.json`, `test_20.json` |
| Segmentation filter | `caption-test/meta/seg_filter.json` |
Фактические пути задаются через gin и записываются в run manifest.
## 2. Split
- Primary: cross-area.
- Same-area: только sanity check.
- Train/test split не пересоздаётся для разных fusion variants.
- Evaluation учитывает несколько допустимых satellite matches для одной UAV query.
- Диагональная оценка одного match на query считается некорректной для GTA-UAV.
### 2.1. Обязательная верификация split (Gate 0)
Унаследованные снапшоты `caption-test/meta/train_80.json` / `test_20.json` создавались скриптом `make_split.py --ratio 0.8 --seed 42`. До baseline команда обязана установить и записать в `ENVIRONMENT_AUDIT.md`:
1. К какому множеству пар применялся 80/20: ко всем парам или внутри официального `cross-area-drone2sate-train.json`.
2. Если 80/20 — случайный split по всем парам, он не эквивалентен официальному cross-area протоколу (train и test делят область → задача проще). В этом случае:
- примary-сравнение допускается на унаследованном split (главное — одинаковость для всех вариантов);
- финалисты дополнительно оцениваются на официальном `cross-area-drone2sate-test.json` без дообучения;
- в отчётах оба числа маркируются явно: `split=inherited-80/20` и `split=official-cross-area`.
3. Количества пар train/test и размер satellite gallery фиксируются в manifest каждого run.
### 2.2. Числа датасета (для контроля аудита)
| Компонент | Ожидаемое значение |
|---|---|
| UAV RGB | 33,763 PNG, 512×384 |
| Satellite RGB | 14,640 PNG, 256×256, RGBA |
| Captions UAV / satellite | 33,411 / 6,546 (покрытие ~99% / ~44.7%) |
| Auxiliary maps | 48,403 (segm, depth, edge, chm) |
| Seg-filter passed | 37,498 из 48,403 (исключение ≥90% background+water) |
| Унаследованный split | train 26,966 → 24,891 после seg-filter; test 6,742 → 6,252 |
| Test gallery | ~2,684 unique satellite tiles в test_20 |
Расхождение фактических чисел с таблицей — находка data audit, а не повод молча продолжить.
## 3. Common model settings
| Параметр | Значение |
|---|---|
| Backbone | StripNet-small |
| Input size | 256x256 |
| Backbone sharing | shared satellite/UAV |
| Primary backbone state | frozen |
| Optional adaptation | одинаковые Conv-MONA stages 3-4 |
| Descriptor dim | 1024 |
| Descriptor norm | L2 |
| Segmentation classes | 17 |
| Text encoder | фиксируется на Gate 1 |
## 4. Retrieval objective
Primary objective: symmetric contrastive retrieval loss.
```math
L = w_{q2g} CE(z_{uav} z_{sat}^{T} / tau, y)
+ w_{g2q} CE(z_{sat} z_{uav}^{T} / tau, y)
```
Начальная конфигурация:
| Параметр | Значение |
|---|---:|
| `w_q2g` | 0.6 |
| `w_g2q` | 0.4 |
| `tau_init` | 0.07 |
| temperature | learnable, bounded |
| label smoothing | 0.1 |
| sampler | mutually exclusive для снижения false negatives |
Hard-negative strategy должна быть общей для всех вариантов. Нельзя включить memory bank только для одного fusion family в primary comparison.
## 5. Baselines
| ID | Конфигурация | Назначение |
|---|---|---|
| B0 | StripNet RGB-only | обязательная точка отсчёта |
| B1 | Late concat pooled auxiliary embeddings | простой multimodal baseline |
| B2 | Static additive residual | контроль против dynamic fusion |
| B3 | Multi-FiLM + additive merge | сильный общий baseline |
| A-primary | Condition-aware | трек Павленко |
| B-primary | Token/bottleneck | трек Близно |
| C-primary | Role-aware | трек Мороза |
## 6. Общие аблации
Оценочные аблации выполняются без изменения основного training protocol.
| ID | Вариант |
|---|---|
| G-AB1 | full multimodal |
| G-AB2 | без text на evaluation |
| G-AB3 | без segmentation на evaluation |
| G-AB4 | без geometry на evaluation |
| G-AB5 | RGB + text |
| G-AB6 | RGB + segmentation |
| G-AB7 | RGB + geometry |
| G-AB8 | late-only fusion |
| G-AB9 | multi-stage fusion |
| G-AB10 | frozen StripNet |
| G-AB11 | StripNet + одинаковая Conv-MONA adaptation |
| G-AB12 | shared vs view-specific auxiliary projectors |
Стохастическое отключение входных модальностей в training loop не входит в protocol.
## 7. Primary metrics
| Группа | Метрики |
|---|---|
| Retrieval | R@1, R@5, R@10, MRR, AP |
| Directions | UAV-to-satellite и satellite-to-UAV |
| Generalization | cross-area primary, same-area sanity |
| Improvement | delta к B0 по каждому seed и mean delta |
| Stability | mean, std, 95% bootstrap CI |
| Efficiency | params, trainable params, peak VRAM, latency, throughput |
| Fusion health | contribution, gate/attention entropy, descriptor variance |
## 8. Diagnostic metrics
- L2 norm descriptor.
- Per-dimension descriptor standard deviation.
- Cosine similarity между RGB-only и fused descriptor.
- Gradient norm по modality projectors и fusion core.
- Contribution каждого auxiliary path.
- Attention mass или gate statistics по модальностям.
- CKA/cosine redundancy между modality representations.
- Доля NaN/Inf и invalid auxiliary pixels.
## 9. Seeds
| Фаза | Seeds |
|---|---|
| Smoke | 42 |
| Development | 42 |
| Final primary comparison | 42, 123, 456 |
| Expensive secondary ablations | 42, если primary effect подтверждён |
## 10. Run artifacts
Каждый run сохраняет:
```text
out/<experiment_id>/
├── config/ # копии всех gin-файлов
├── manifest.json # commit, seed, paths, hardware, timestamp
├── metrics.csv # epoch metrics
├── eval_report.json # final retrieval metrics
├── diagnostics.json # gates, attention, norms, contributions
├── model_best.safetensors # если нужен checkpoint
├── model_last.safetensors
└── logs/
```
## 11. Предварительные decision rules
Fusion candidate допускается к финальным трём seed, если:
1. Не хуже B0 более чем на 0.5 п.п. R@1 в smoke/full seed 42.
2. Не содержит NaN/Inf.
3. Дополнительный peak VRAM не превышает 6 GB относительно B0 на согласованном batch.
4. Latency не превышает B0 более чем в 2 раза без доказанного accuracy gain.
5. Хотя бы одна дополнительная модальность имеет измеримый положительный contribution.
Primary promotion:
- mean cross-area R@1 выше B0 минимум на 1.0 п.п.;
- улучшение положительно минимум на двух из трёх seed;
- 95% bootstrap CI для парного delta не пересекает существенное отрицательное значение;
- нет критического modality collapse;
- compute укладывается в RTX 4090 24 GB.
Если thresholds не достигнуты, команда выбирает самый информативный отрицательный результат и формулирует, какая fusion hypothesis опровергнута.
## 12. Внешние ориентиры (не targets)
Из предыдущих экспериментов на GTA-UAV (другой протокол: полное обучение backbone, 100 epochs, batch 64, без auxiliary модальностей):
| Конфигурация | R@1 | Комментарий |
|---|---:|---|
| StripNet, полный fine-tuning + ImageNet pretrain | ~0.775 | верхний ориентир возможностей backbone на этих данных |
| Лучший компактный экспериментальный backbone | ~0.665 | средний диапазон |
В этом проекте StripNet заморожен (адаптация только Conv-MONA stages 3-4), поэтому B0 будет заметно ниже верхнего ориентира — это ожидаемо и нормально. Ориентиры используются только для sanity-контроля порядка величин: B0 с R@1 около нуля или выше 0.8 — признак ошибки протокола, а не выдающегося результата.
## 13. Поведение при missing modality (оценочное требование)
Для каждого primary-варианта в финальном отчёте обязательна таблица: descriptor при validity=0 для каждой auxiliary модальности по очереди (eval-time, без переобучения).
| Режим | Требование |
|---|---|
| full-modal | базовое качество варианта |
| без text / без seg / без geometry (по одному) | descriptor конечен; деградация плавная, без обвала ниже B0 более чем на оговорённый командой порог |
| только RGB (все aux отключены) | descriptor близок к RGB-якорю; cosine(fused, rgb_descriptor) фиксируется |
Это не modality-dropout-обучение, а проверка well-posedness архитектуры (см. `06_MERIDIAN_CONTEXT.md` §5); результат входит в decision table.