20 KiB
tags
| tags | |||
|---|---|---|---|
|
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 — асимметричная Teacher–Student система
MERIDIAN — асимметричная Teacher–Student система кросс-видовой геолокализации БПЛА (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. Назначение результата
- Победившее семейство (primary) + fallback фиксируются в decision record.
- Primary-механизм переносится на Teacher DINOv3 (адаптация: CNN stage maps → ViT token maps) и входит в спецификацию fusion MERIDIAN.
- Fused-эмбеддинг Teacher становится KD-таргетом для RGB-only Student.
- Ваши 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-данных).
Отсюда два следствия:
- Нас интересует класс механизма и причина его успеха, а не выжатые гиперпараметрами проценты.
- Вторичный критерий отбора — корректное поведение при отсутствии модальности (validity mask = 0): выход конечен, RGB-путь не искажён
2.2. Заметки о данных
| Факт | Значение | Следствие |
|---|---|---|
| Satellite RGB | 14,640 PNG 256×256, RGBA | alpha-канал проверить и отбросить осознанно |
| UAV RGB | 33,763 PNG 512×384, высоты 100–600 м | 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. Входные и выходные данные
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
До реализации архитектур команда совместно утверждает:
- Формат segmentation: IDs/embedding или probabilities.
- Формат CHM/depth и normalization.
- Text encoder, уровни captions и output dimension.
FusionModelBaseAPI.- Common diagnostics keys.
- 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, стабильность и интерпретируемость вклада модальностей.