# 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) — косинусный эффект широты, не разная высота съёмки.