Dataset preparation script with documentation

- Satellite crop generation (512x512, stride 256, resize 256x256)
- Route 09 tile stitching (4 tiles -> 44800x33280)
- GPS matching drone->crop via vectorized haversine
- Index files in UAV-GeoLoc format (train/test query + DB)
- positive.json / semi_positive.json / db_postion.txt per route
- Route 07 excluded (satellite too narrow)
- Fixed: full gallery in DB files, db_postion.txt format, frame_id keys
- Fixed: file handle leaks in image processing loops

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
pikaliov
2026-04-17 17:12:43 +03:00
commit fd014a3155
3 changed files with 731 additions and 0 deletions

40
CLAUDE.md Normal file
View File

@@ -0,0 +1,40 @@
# UAV-VisLoc Dataset Preparation
## Пути
- **Исходный датасет:** `/home/servml/Документы/datasets/UAV_VisLoc_dataset/`
- **Обработанный датасет:** `/home/servml/Документы/datasets/UAV_VisLoc_processed/`
- **Скрипт:** `scripts/prepare_dataset.py`
- **Статус:** выполнен, данные готовы (2026-04-17)
## Результаты обработки
- Drone: 6,744 изображений resized 256x256
- Satellite кропов: 74,807 (512x512 -> 256x256)
- Train queries: 5,060 / Test queries: 1,684
- Gallery: 74,807 кропов (одинаковая для train и test)
- Median distance drone->crop: 25.9m, P99: 45.7m
## Формат данных
### Разделение positive / semi-positive / negative
В формате UAV-GeoLoc нет явного списка negative — negatives определяются неявно:
- **Positive** (1 на drone): ближайший crop по GPS. Хранится в `positive.json` и как ПЕРВЫЙ crop в строке `train_query.txt`
- **Semi-positive** (8 на drone): +-1 соседи positive crop в grid. Хранятся в `semi_positive.json` и как crops 2-9 в строке `train_query.txt`
- **Negative** (implicit): ВСЕ остальные кропы в gallery (~74K). Не хранятся отдельно — при contrastive learning in-batch negatives формируются из других пар в batch
### Как это используется в train_query.txt
```
01/drone/01_0001.JPG 0 01/DB/img/crop_5_18.png 01/DB/img/crop_4_17.png 01/DB/img/crop_4_18.png ...
^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
label 1 positive + 8 semi-positives (все считаются positive matches)
```
Все 9 кропов в строке — positives для данного query. Всё что НЕ в этом списке — negatives.
## Известные проблемы
- Маршрут 07 исключён (спутник 3000x170, слишком узкий)
- 6 drone в маршруте 06 (06_0093-06_0098) за пределами спутниковой карты (distance >1000m)
- Нет val split (только train/test как в оригинальном UAV-VisLoc)
## GSD спутника
~0.30 м/px (единый zoom level). Вариации GSD по долготе (0.23-0.27 м/px) — косинусный эффект широты, не разная высота съёмки.