Fix gin config loading + source filter, docs updates

- config_loader: add base_gin_files() to exclude dataset-specific
  pipeline_*.gin variants from default `python -m src.main` load
  (pipeline_uav_visloc.gin was overriding pipeline.gin)
- main.py: use base_gin_files() in the --gin override branch too
- pipeline.gin: source None (both DB + query) — was 'query',
  which silently dropped all DB satellite crops from discovery
- README/CLAUDE/docs: sync source default, tensor format spec

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
pikaliov
2026-07-11 17:27:51 +03:00
parent 75502b481e
commit 95f41a4401
10 changed files with 377 additions and 35 deletions

View File

@@ -118,7 +118,7 @@ SegConfig.default_resolution = 1008
|---|---|
| `snow and ice` | SegEarth-OV3 классифицирует лёд/снег как `water` при виде сверху — промпт не работает. Проверено на Glacier (Athabasca) |
| `beach` / `sand` | Покрыт `sand and gravel ground` |
| `bridge` | Слишком редко, перекрывается с `road` |
| `bridge` | Слишком редко, перекрывается с `road`. Мосты уже покрываются комбинацией `road` (2) + `water` (4) — для cross-view geolocation достаточно. Open-vocabulary SAM конфликтует между `bridge` и `road` на одних пикселях (нестабильные предсказания). Доли процента площади в аэрофото — near-zero representation, шум без вклада в loss. Добавление 18-го класса потребует перегенерации SafeTensors для всех датасетов (~1.1M изображений). Комбинация road + water на depth map — достаточно уникальная сигнатура моста |
| `grassland` / `lawn` | Перекрывается с `vegetation` |
| `river` / `sea` / `lake` | Всё покрыто единым `water` |
| `sports field` | Слишком редко на полном датасете |
@@ -333,6 +333,72 @@ SegConfig(threshold=0.15, prompts=UNIFIED_PROMPTS)
---
## Анализ текущего набора 17 классов (2026-04-18)
### Покрытие по датасетам
| ID | Класс | World-UAV | UAV_VisLoc | GTA-UAV | Примечания |
|:--:|:---|:--:|:--:|:--:|:---|
| 0 | background | + | + | + | Catch-all |
| 1 | building | + | + | + | Универсальный |
| 2 | road | + | + | + | Универсальный |
| 3 | vegetation | + | + | + | Универсальный |
| 4 | water | + | + | + | + лёд/снег (ограничение модели) |
| 5 | sand and gravel ground | + | + | + | Desert, Busan, пляжи |
| 6 | rocky terrain | + | — | + | Volcano, Karst, Gorge |
| 7 | farmland | + | + | + | Terrace, Plain, с/х сцены |
| 8 | railway | + | + | — | Munich, Sydney, городские сцены |
| 9 | parking lot | + | + | + | Городские сцены |
| 10 | sidewalk | + | + | + | Городские сцены |
| 11 | bare soil and plowed field | + | + | + | Главная потеря bg в UAV_VisLoc (~15-20%) |
| 12 | roof and rooftop | + | + | + | Дополняет building для вида сверху |
| 13 | sports field and playground | — | + | — | Уникальная геометрия, landmark |
| 14 | muddy ground and wetland | + | + | **reclassify** | В GTA-UAV 14% false positives → 0% |
| 15 | embankment and levee | — | + | — | Прибрежные сцены UAV_VisLoc |
| 16 | swimming pool | — | — | + | Пригороды GTA V (Vinewood/Rockford) |
### Известные перекрытия между классами
| Пара классов | Проблема | Критичность |
|:---|:---|:---|
| `farmland` (7) ↔ `bare soil` (11) | Поле без всходов — bare soil, с всходами — farmland. Граница размытая, SAM колеблется. | Низкая — оба покрывают «землю», для CVGL matching семантически близки |
| `sidewalk` (10) ↔ `embankment` (15) | Набережная = тротуар или дамба? Промпты конкурируют. | Низкая — embankment активен только в UAV_VisLoc |
| `building` (1) ↔ `roof` (12) | Фасад vs крыша сверху. При наклонном виде граница нечёткая. | Низкая — при виде строго сверху roof доминирует, при наклоне — building |
| `sand and gravel` (5) ↔ `bare soil` (11) | Песчаная почва — sand или soil? Зависит от контекста. | Низкая — оба покрывают грунт без растительности |
### Проблемные классы
1. **`muddy ground and wetland` (14)** — наиболее нестабильный. В GTA-UAV полностью рекласcифицируется (14% ложных → 0%). В World-UAV Wetland (Danube) есть в terrain, но SAM плохо различает от vegetation + bare soil. Класс с наибольшим числом false positives среди всех.
2. **`rocky terrain` (6)** — нестабилен на красных скалах. Danxia/GrandCanyon плохо определяются как rocky terrain. Известное ограничение SegEarth-OV3, не решаемое сменой промпта.
3. **`water` (4)** — поглощает лёд/снег. Glacier = water. Промпт `snow and ice` не работает (проверено на Athabasca). Ограничение модели, не набора классов.
### Узкоспециализированные классы
- **`swimming pool` (16)** — актуален только для GTA-UAV. В реальных датасетах бассейнов почти нет. Не мешает (0 пикселей = 0 вклад в loss), но занимает слот.
- **`embankment` (15)** — актуален преимущественно для UAV_VisLoc (прибрежные сцены). В World-UAV роль минимальна.
- **`sports field` (13)** — актуален преимущественно для UAV_VisLoc. В GTA-UAV стадионы закрыты сверху.
### Отклонённые кандидаты на добавление
| Класс | Причина отказа | Дата |
|:---|:---|:---|
| `bridge` | Покрывается комбинацией road (2) + water (4). SAM конфликтует bridge/road на одних пикселях. Доли % площади — near-zero representation. Потребовал бы перегенерации ~1.1M изображений. Комбинация road + water на depth map — достаточная сигнатура моста для CVGL. | 2026-04-18 |
| `snow and ice` | SegEarth-OV3 классифицирует лёд/снег как water при виде сверху — промпт не работает. Проверено на Glacier (Athabasca). | — |
| `highway` | Покрыт road — SegEarth не различает шоссе и обычную дорогу. | — |
| `beach` / `sand` | Покрыт sand and gravel ground. | — |
| `grassland` / `lawn` | Перекрывается с vegetation. | — |
| `courtyard` | Семантически = bare ground + building. | — |
| `fence` / `road marking` | Слишком мелкие объекты для SegEarth на 1008px. | — |
| `solar panel` | Редко, мелко, часть rooftop (12). | — |
### Вывод
Набор из 17 классов сбалансирован для задачи cross-view geolocation. Основные риски — перекрытия farmland/bare_soil и sidewalk/embankment, но они не критичны для matching. **Расширять набор не рекомендуется** — каждый новый класс замедляет инференс (~0.1-0.2x на промпт) и увеличивает конфликты между промптами SAM.
---
## Оценка влияния на производительность
- Инференс: ~1.82.2x медленнее (11 vs 5 text prompts)