Add dataloaders (v1/v2), analysis scripts, and documentation for working with UAV-GeoLoc (World-UAV). Co-authored-by: Cursor <cursoragent@cursor.com>
112 lines
3.9 KiB
Markdown
112 lines
3.9 KiB
Markdown
# `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/диска.
|
||
|