Files
World-UAV-ds/analyze/README.md
Pikaliov 4ff36ce188 Initial import: World-UAV prepro
Add dataloaders (v1/v2), analysis scripts, and documentation for working with UAV-GeoLoc (World-UAV).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-09 12:44:49 +03:00

112 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
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.
# `analyze/` — анализ структуры UAV-GeoLoc (World-UAV)
Папка содержит скрипты “dataset forensics”: они проверяют, что лежит в датасете, какие размеры/распределения, и как именно нарезаны спутниковые карты в `DB/img/`.
Все скрипты рассчитаны на локальный датасет и обычно требуют изменить путь к корню датасета в константах `ROOT`/`BASE`.
## Скрипты
### `terrain_stats.py`
**Задача:** собрать подробную статистику по **Terrain subset**:
- количество сцен по terrain-type
- количество DB кропов в сцене
- количество query вариантов и кадров
- размеры `merge.tif` и примерный размер кропа
- диапазоны GPS из `DB/db_postion.txt`
- статистика `positive.json` и `semi_positive.json`
- список всех обнаруженных `height*_rot*` вариантов
Запуск:
```bash
python analyze/terrain_stats.py
```
Перед запуском поменяй:
- `ROOT = ".../UAV-GeoLoc/Terrain"`
### `analyze_crop_scheme.py`
**Задача:** восстановить схему нарезки спутника (crop_size/stride/overlap) через попиксельное сравнение:
- подтверждает, что `crop_0_0.png == merge[0:crop, 0:crop]`
- находит `stride_x`, `stride_y` по сопоставлению `crop_1_0.png` и `crop_0_1.png`
- выводит `overlap = crop_size - stride`
Ключевой вывод (по docstring): `stride = crop_size // 2` (50% overlap).
Запуск:
```bash
python analyze/analyze_crop_scheme.py
```
Важно:
- скрипт использует `Image.MAX_IMAGE_PIXELS = None` из-за больших `merge.tif`
- по умолчанию ищет сцены относительно `base = dirname(__file__)` — это может не совпадать с реальным расположением датасета. Если нужно, перепиши `patterns` под свой датасет.
### `generate_charts.py`
**Задача:** сгенерировать “publication-quality” графики (png) по датасету:
- сцены по странам / по terrain-type
- распределение размеров кропов
- размеры train/val/test сплитов (по `Index/*.txt`, если доступны)
- распределение количества positives на query (по `Index/train_query.txt`)
- географическое покрытие (scatter по средним lat/lon сцен)
- размеры `merge.tif` (scatter)
- схема query вариантов (polar)
Запуск:
```bash
python analyze/generate_charts.py
```
Перед запуском поменяй:
- `BASE = "/.../UAV-GeoLoc"`
Выход:
- `CHARTS = <BASE>/charts/` (создаётся автоматически)
### `generate_sample_grids.py`
**Задача:** сгенерировать наглядные “grid” картинки:
- query vs positive DB crop
- сравнение высот (100/125/150)
- сравнение поворотов (0..315)
- визуализация tilingа на кусочке `merge.tif` (пример crop_size=200, stride=100)
- разнообразие terrain типов (подборка `crop_0_0.png`)
Запуск:
```bash
python analyze/generate_sample_grids.py
```
Перед запуском поменяй:
- `BASE = "/.../UAV-GeoLoc"`
Выход:
- `OUT = <BASE>/charts/`
## Зависимости
Типично нужны:
- `numpy`
- `Pillow`
- `matplotlib`
Дополнительно для чтения больших `merge.tif` может понадобиться достаточно RAM/диска.