Files
fuze_task/reports/1.1 Подготовительный этап (Конспект).md

315 lines
20 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
tags:
- task
- CVGL
- ЛИСАД/ВЛМ
---
[[Base-Terms]], [[ЭТАПЫ]], [[01_required]],
[[Основной пакет]], [[02_fusion_core_общий]], [[02_fusion_core_персональный]],
**Изучение постановки и контекста проекта:**
- README.md;
- docs/00_project/06_MERIDIAN_CONTEXT.md (включая §5 — требование корректного поведения при отсутствии модальности);
- docs/01_tasks/00_MASTER_ASSIGNMENT.md;
- 01_INPUT_OUTPUT_CONTRACT.md;
- 02_TEAM_WORKFLOW.md;
- 03_EXPERIMENT_PROTOCOL_GTA_UAV.md
# MERIDIAN CONTEXT
## 1. MERIDIAN — асимметричная TeacherStudent система
MERIDIAN — асимметричная TeacherStudent система кросс-видовой геолокализации БПЛА (UAV ↔ satellite) с привилегированными модальностями (LUPI/KD) и лёгким edge-инференсом.
**Цель:** сравнение методов объединения и выбор по обозначенным критериям
## 2. Teacher
Имеет 8 входных потоков.
|#|Поток|View|Источник|Природа сигнала|
|---|---|---|---|---|
|1|RGB satellite|sat|датасет|основной визуальный якорь|
|2|Text caption satellite|sat|VLM (Qwen3-VL)|глобальная семантика сцены|
|3|CHM satellite|sat|CHMv2|высота растительности/структура|
|4|Segmentation satellite|sat|SegFormer, 17 классов|land-cover semantics|
|5|RGB UAV|uav|датасет|основной визуальный якорь|
|6|Text caption UAV|uav|VLM (Qwen3-VL)|глобальная семантика сцены|
|7|Relative depth UAV|uav|Depth Anything|геометрия/структура сцены|
|8|Segmentation UAV|uav|SegFormer, 17 классов|spatial semantics|
## 3. Цель
Прямой перебор fusion-архитектур на полном Teacher (DINOv3-L, ~300M+ params) слишком дорог: один полный прогон занимает часы и съедает всю VRAM. Поэтому архитектурный поиск выполняется на **быстром прокси**:
Прокси сохраняет главное: frozen visual anchor + лёгкие обучаемые модули, те же модальности, тот же retrieval-протокол. Вывод «какой класс fusion-операторов выигрывает и за счёт чего» переносится; конкретные гиперпараметры — нет, и это нормально.
## 4. Назначение результата
1. Победившее семейство (primary) + fallback фиксируются в decision record.
2. Primary-механизм переносится на Teacher DINOv3 (адаптация: CNN stage maps → ViT token maps) и входит в спецификацию fusion MERIDIAN.
3. Fused-эмбеддинг Teacher становится KD-таргетом для RGB-only Student.
4. Ваши diagnostics (вклад модальностей, gate statistics) станут инструментами анализа Teacher.
## 5. Устойчивость к modality-dropout
В production Teacher модальности могут отсутствовать или быть деградированными (нет caption у ~55% satellite tiles уже сейчас; depth/CHM могут быть зашумлены). Кроме того, на следующем этапе MERIDIAN планируется обучение с **modality dropout** (стохастическое отключение модальностей) — ==оно НЕ входит в ваше задание==, но накладывает требование на архитектуру:
| Класс | Поведение при отсутствии модальности | Вердикт |
| -------------------------------------------------- | -------------------------------------------- | ------------------------------ |
| Cross-attention над пулом модальных токенов | softmax перенормируется на оставшиеся токены | **безопасен by construction** |
| FiLM / gating с zero-init (identity-at-init) | выпавшая модальность даёт identity | **безопасен при корректной init** |
| Gated additive residual | residual = 0 → чистый RGB-путь | **безопасен при корректной init** |
| Чисто multiplicative gating (выход = RGB × f(aux)) | near-zero aux уничтожает RGB-сигнал | опасен, требует additive-ветки |
| Differential conditioning (f(Xi  Xj)) | теряет смысл при отсутствии одного из Xi | опасен |
| SSM/Mamba cross-state fusion | состояние дестабилизируется | research-arm, не primary |
==Практическое следствие для всех трёх треков: тест «отключи модальность через validity mask и проверь, что descriptor конечен и близок к RGB-only» входит в обязательные unit-тесты, а поведение при missing modality — в decision table финального сравнения.==
## 6. В проекте отсутствует
- Никакого modality dropout в training loop (это следующий этап MERIDIAN, отдельная задача).
- Никакой дистилляции в Student (KD-мост строится после выбора fusion).
- Никакой замены StripNet или обучения собственных моделей depth/seg/CHM/captions.
- Никакого использования GPS, координат, имён локаций и paired-view признаков.
# MASTER ASSIGMENT
## 1. Исполнители
| Сотрудник | Архитектурный трек | Общая ответственность |
| -------------------------- | --------------------------------------- | ---------------------------------------------------- |
| **Павленко Богдан Викторович** | **Condition-Aware RGB-Anchored Fusion** | **общий fusion API и architecture consistency** |
| Близно Максим Витальевич | Token/Bottleneck Full-Modal Aggregation | benchmark, metrics, run registry и статистика |
| Мороз Егор Сергеевич | Role-Aware Hierarchical Fusion | dataset contract, preprocessing и quality validation |
## 2. Что требуется решить
Нужно разработать алгоритм объединения модальностей для cross-view geo-localization. Для каждой view-ветки доступен свой набор:
- img
- text
- geom
- segm
Один shared `StripNet-small` кодирует RGB.
### 2.1. Зачем это нужно
Для архитектурного отбора fusion-механизма для Teacher системы MERIDIAN на быстром прокси (StripNet + GTA-UAV вместо DINOv3 + production-данных).
Отсюда два следствия:
1. Нас интересует **класс механизма и причина его успеха**, а не выжатые гиперпараметрами проценты.
2. Вторичный критерий отбора — **корректное поведение при отсутствии модальности** (validity mask = 0): выход конечен, RGB-путь не искажён
### 2.2. Заметки о данных
|Факт|Значение|Следствие|
|---|---|---|
|Satellite RGB|14,640 PNG 256×256, **RGBA**|alpha-канал проверить и отбросить осознанно|
|UAV RGB|33,763 PNG 512×384, высоты 100600 м|resize к 256×256 фиксируется единообразно|
|Captions UAV|33,411 из 33,763 (~99%)|почти полное покрытие|
|Captions satellite|**6,546 из 14,640 (~44.7%)**|text_valid mask обязателен; пустой caption ≠ нулевой текст|
|Auxiliary maps|48,403 изображений: segm/depth/edge/chm (+SafeTensors)|edges в primary input не входят|
|Segmentation|17 unified classes|канон классов — `vendor_reference/depth_edges_annotate_worlduav/scripts/seg_classes.py`|
|Seg-filter|37,498 из 48,403 прошли фильтр (≥90% background+water исключены)|фильтр применяется одинаково ко всем вариантам|
|Расположение данных|Linux-сервер: `/home/servml/Документы/datasets/GTA-UAV-LR{,-captions,-aug}/`|фактические пути фиксируются в gin и ENVIRONMENT_AUDIT|
## 3. Входные и выходные данные
[[#IO CONTRACT]]
### 3.1. Satellite branch
```
RGB satellite [B, 3, 256, 256]
Caption satellite list[str] / tokenized text
CHM [B, 1, 256, 256]
Segmentation [B, 1, 256, 256] IDs или [B, 17, 256, 256]
Validity masks geometry + segmentation
```
### 3.2. Satellite branch
```
RGB UAV [B, 3, 256, 256]
Caption UAV list[str] / tokenized text
Relative depth [B, 1, 256, 256]
Segmentation [B, 1, 256, 256] IDs или [B, 17, 256, 256]
Validity masks geometry + segmentation
```
### 3.3. Выходные данные
```
descriptor [B, 1024], L2 normalized
rgb_descriptor [B, 1024]
modality_contributions
diagnostics
```
Далее вычисляется similarity matrix UAV-to-satellite. Fusion-модуль не получает features противоположной view.
## 4. Цель экспериментов
Проверить, может ли full-modal representation улучшить cross-area retrieval относительно StripNet RGB-only и какой класс fusion делает это наиболее надёжно.
Primary metric: cross-area UAV-to-satellite R@1.
Secondary:
- R@5, R@10, MRR, AP;
- satellite-to-UAV retrieval;
- mean и std по seed 42/123/456;
- peak VRAM, latency, trainable params;
- вклад text, segmentation и geometry;
- отсутствие modality collapse.
## 5. Архитектурный кандидат
RGB остаётся anchor. Auxiliary encoders строят residual corrections, а controller определяет их вклад в зависимости от content и качества входов.
# IO CONTRACT
Одна обучающая запись содержит UAV-снимок запрос (query) и один положительный satellite кандидат (1 к 1). На eval может быть 1 к * (несколько допустимых sat matches)
## 1. Sat view
|Поле|Форма|Dtype|Нормализация|Назначение|
|---|---|---|---|---|
|`rgb`|`[B, 3, 256, 256]`|`float32`|ImageNet mean/std|вход StripNet|
|`text`|`list[str]` или tokens|string/int|согласно text encoder|описание сцены без location leakage|
|`geometry`|`[B, 1, 256, 256]`|`float32`|robust per-frame CHM normalization|высотная структура|
|`segmentation`|`[B, 1, 256, 256]` class IDs или `[B, 17, 256, 256]` probabilities|`uint8`/`float32`|IDs `0..16` или probabilities|land-cover semantics|
|`geometry_valid`|`[B, 1, 256, 256]`|`bool`|нет|валидные CHM pixels|
|`segmentation_valid`|`[B, 1, 256, 256]`|`bool`|нет|валидные segmentation pixels|
|`sample_id`|`[B]`|string|нет|только логирование, не feature|
## 2. UAV view
|Поле|Форма|Dtype|Нормализация|Назначение|
|---|---|---|---|---|
|`rgb`|`[B, 3, 256, 256]`|`float32`|ImageNet mean/std|вход StripNet|
|`text`|`list[str]` или tokens|string/int|согласно text encoder|описание сцены без location leakage|
|`geometry`|`[B, 1, 256, 256]`|`float32`|relative depth normalization|структура и масштабные признаки|
|`segmentation`|`[B, 1, 256, 256]` class IDs или `[B, 17, 256, 256]` probabilities|`uint8`/`float32`|IDs `0..16` или probabilities|spatial semantics|
|`geometry_valid`|`[B, 1, 256, 256]`|`bool`|нет|валидные depth pixels|
|`segmentation_valid`|`[B, 1, 256, 256]`|`bool`|нет|валидные segmentation pixels|
|`sample_id`|`[B]`|string|нет|только логирование, не feature|
## 3. StripNet
|Stage|Tensor|Spatial stride|Разрешённое использование|
|--:|---|--:|---|
|1|`[B, 64, 64, 64]`|4|преимущественно RGB low-level; auxiliary fusion только после отдельного обоснования|
|2|`[B, 128, 32, 32]`|8|dense segmentation/geometry кандидаты|
|3|`[B, 320, 16, 16]`|16|основной mid-level fusion|
|4|`[B, 512, 8, 8]`|32|high-level fusion и readout|
|GAP|`[B, 512]`|global|RGB anchor descriptor|
|Projection|`[B, 1024]`|global|retrieval descriptor до L2 normalization|
## 4. Fusion output
Каждый `encode_view` возвращает:
|Поле|Форма|Требование|
|---|---|---|
|`descriptor`|`[B, 1024]`|finite, L2 norm `1 +/- 1e-4`|
|`rgb_descriptor`|`[B, 1024]`|RGB anchor для диагностики|
|`modality_contributions`|`[B, 3]` или dict|text, segmentation, geometry|
|`diagnostics`|dict tensors/scalars|gates, attention mass, norms, entropy|
Диагностика не должна менять descriptor в eval mode.
## 5. Парный forward
satellite batch -> encode_view(view="satellite") -> z_sat [B, 1024]
UAV batch -> encode_view(view="uav") -> z_uav [B, 1024]
similarity = z_uav @ z_sat.T / temperature
## 6. Text contrat
- Поддержать L1, L2, L3 или выбранную объединённую схему.
- Пустой satellite caption обрабатывается через explicit validity mask.
- Пустая строка не должна кодироваться как полноценный semantic signal.
- Caption не должен содержать координаты, названия районов, file names и прямые match identifiers.
- Text encoder и token budget фиксируются для честного сравнения fusion variants.
## 8. Geometry contract
- CHM и depth имеют общий ключ `geometry`, но разные preprocessing и projector parameters.
- Нельзя считать численные значения depth и CHM сопоставимыми до view-specific normalization.
- PNG допускается только для визуальной проверки. Для обучения использовать dense tensors/SafeTensors.
- Любая производная карта, например depth gradient, считается внутри documented preprocessing block.
## 9. Segmentation contract
- Канонический набор: 17 unified classes.
- Primary representation определяется командой на interface-freeze: class IDs + embedding или probabilities/logits.
- Hard RGB palette images не используются как model input.
- Редкие и отсутствующие классы не должны приводить к NaN при mask pooling.
## 10. Запрещённые признаки
- GPS и координаты.
- Название карты, района или локации.
- Индекс paired image как embedding.
- Features второй view-ветки внутри текущего encoder.
- Evaluation labels внутри preprocessing.
# Регламент совместной работы
У команды три архитектурных трека, но одна кодовая и экспериментальная система.
| Область | Driver | Обязательные reviewers |
| ---------------------------------- | ------------ | ---------------------- |
| **Fusion API и registry** | **Павленко** | Близно, Мороз |
| Dataset и modality validation | Мороз | **Павленко**, Близно |
| Training/eval benchmark | Близно | **Павленко**, Мороз |
| **Condition-aware module** | **Павленко** | Мороз |
| Token/bottleneck module | Близно | **Павленко** |
| Role-aware module | Мороз | Близно |
| Общая experiment matrix | Близно | все |
| **Финальная архитектурная оценка** | **все** | **все** |
## Этапы
### Gate 0. Environment audit
- Проверить локальные пути двух внешних проектов.
- Зафиксировать путь GTA-UAV RGB, captions, pair JSON и annotations.
- Проверить checkpoint StripNet.
- Выполнить чтение обязательного пакета.
- Создать `reports/joint/ENVIRONMENT_AUDIT.md`.
### Gate 1. Interface freeze
До реализации архитектур команда совместно утверждает:
1. Формат segmentation: IDs/embedding или probabilities.
2. Формат CHM/depth и normalization.
3. Text encoder, уровни captions и output dimension.
4. `FusionModelBase` API.
5. Common diagnostics keys.
6. Baseline config и output directory convention.
Результат: `reports/joint/INTERFACE_DECISION.md`. Изменения после freeze требуют записи причины и влияния на все три варианта.
### Gate 2. RGB-only baseline
- Один общий StripNet-only run.
- Один общий dataloader.
- Один общий evaluation script.
- Smoke run на малом subset.
- Полный baseline минимум на seed 42, затем финальный baseline на 42/123/456.
Без подтверждённого baseline реализация fusion не переходит к полным запускам.
### Gate 3. Independent implementation behind common API
Каждый сотрудник реализует свой модуль в отдельной feature branch. Разрешены разные внутренние операторы, но входы, выходы, loss и logging одинаковы.
### Gate 4. Pair review
Reviewer проверяет:
- shape contract;
- отсутствие cross-view leakage;
- корректность masks;
- identity/residual path;
- вычислительную сложность;
- диагностируемость вклада модальностей;
- тесты и gin config.
### Gate 5. Smoke comparison
Все три модуля запускаются:
- на одном subset;
- с одним seed;
- на одинаковом числе batches;
- с одинаковым optimizer/loss;
- с logging peak VRAM и latency.
Цель: найти ошибки интеграции, а не выбрать победителя.
### Gate 6. Full experiment matrix
После smoke comparison выполняются primary runs и выбранные ablations по общему protocol.
### Gate 7. Joint decision
Команда совместно заполняет decision table. Архитектура не выбирается по одному лучшему run. Учитываются mean, variance, compute, стабильность и интерпретируемость вклада модальностей.