Files
depth_edges_annotate_worlduav/CLAUDE.md
pikaliov 75502b481e Docs: clarify dense tensor maps format and training usage
All modalities are stored as dense spatial tensor maps (not RGB renders):
- depth/edge/chm: [1,H,W] float16 continuous values
- segm: [1,H,W] uint8 dense class ID map (0-16)

Add training code examples: one-hot encoding, per-class embedding,
aux-encoder injection. Document why tensors over RGB renders (70% info
loss + OOD for DINOv3).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-18 04:10:57 +03:00

4.3 KiB
Raw Blame History

CLAUDE.md

Что это за проект

Пайплайн автоматической генерации 4 вспомогательных модальностей (depth, edges, segmentation, canopy height) из RGB-изображений аэрофотоснимков. Используется для подготовки обучающих данных для NADEZHDA — системы cross-view geolocalization (БПЛА ↔ спутник).

Быстрый старт

# World-UAV (973K images, основной датасет)
python -m src.main

# UAV_VisLoc (81K images)
python scripts/run_uav_visloc.py

# GTA-UAV-LR (48K images, synthetic GTA V)
python scripts/run_gta_uav.py

# Тесты (149 шт, без GPU)
python -m pytest src/tests/ -v

Поддерживаемые датасеты

Датасет Изображения Тип Скрипт
World-UAV 973K Реальные аэрофото, 27 terrain, 11 стран python -m src.main
UAV_VisLoc 81K Реальные, 11 сцен, DB + drone python scripts/run_uav_visloc.py
GTA-UAV-LR 48K Синтетика GTA V, 6 высот полёта python scripts/run_gta_uav.py

Ключевые решения

  • Формат выхода: SafeTensors с dense tensor maps (zero-copy mmap, ~0.1ms). Все модальности — прямые тензоры (float16/uint8), не RGB-рендеры.
  • Структура директорий: модальность = папка (depth/, edge/, segm/, chm/, safetensors/), не суффикс файла.
  • Стадии последовательно — одна модель в GPU за раз (экономия VRAM).
  • Сегментация: SegEarth-OV3 (SAM 3.1 + open-vocabulary prompts). 17 unified классов для всех датасетов (единые ID для transfer learning).
  • Post-processing: два правила после SegEarth — dark water fix (mean<0.24, std<0.18 → water; satellite bg 57%→5%) и wetland reclassify (GTA-UAV: ложный wetland 14%→0%).
  • CHMv2 только FP32 — в FP16 NaN.

Структура кода

src/main.py              — точка входа, оркестрация стадий
src/augmentor/inference.py — инференс + postprocess_segmentation()
src/augmentor/io_utils.py  — I/O, SafeTensors, палитра 17 классов
src/augmentor/dataset.py   — discovery, filtering (DB/query/drone/satellite)
src/conf/                  — gin-configurable dataclasses
src/nn/                    — вендорированные DA3 + SegEarth-OV3
scripts/seg_classes.py     — UNIFIED_PROMPTS (17 классов, единый источник)
scripts/run_*.py           — скрипты запуска для каждого датасета
in/config_files/           — gin-конфиги
docs/                      — документация

Конфигурация

Все параметры через gin. CLI override: --gin "PipelineConfig.source = 'db'".

Для нового датасета — создать скрипт в scripts/ (пример: run_gta_uav.py).

Ключевые флаги pipeline:

  • seg_fix_dark_water=True — автоматически исправлять тёмную воду (по умолчанию вкл.)
  • seg_reclassify_wetland=False — переклассификация wetland в vegetation/bare soil (вкл. для GTA-UAV)

Что НЕ делать

  • Не менять порядок/ID классов в scripts/seg_classes.py — все датасеты зависят от фиксированных ID.
  • Не использовать .pt (torch.save) для хранения тензоров — pickle, медленно.
  • Не рендерить depth/seg в RGB colormap для обучения — OOD для DINOv3, потеря ~70% информации. Использовать dense tensor maps из SafeTensors.
  • Не снижать threshold ниже 0.1 — увеличивает false positives без значимого улучшения recall.
  • Не менять dark_water_std_thr (0.18) — калибровано на GTA-UAV ocean (std 0.10-0.15). Ниже — не ловит, выше — false positives на normal images.