Rewrite: GatedFusion architecture + UAV-GeoLoc dataset

Architecture v2:
- Query branch: drone + text -> GatedFusion -> proj -> query_emb
- Gallery branch: satellite -> proj -> gallery_emb
- Single InfoNCE loss (asymmetric 0.6/0.4)
- GatedFusion: learnable gated addition (sigma(alpha)*img + (1-sigma(alpha))*text)
- Baseline mode: gate=1.0 (text ignored)

Dataset:
- UAV-GeoLoc loader with template captions from path metadata
- 27 terrain types with predefined features
- Random positive crop sampling per epoch

Configs: balanced (gate=0.7), baseline (no text), text_heavy (gate=0.3)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
pikaliov
2026-04-17 17:13:00 +03:00
parent 2ce4017ebd
commit abb3337f8d
12 changed files with 1077 additions and 781 deletions

View File

@@ -0,0 +1,378 @@
# АНАЛИЗ ДАТАСЕТА: UAV-VisLoc
**Дата анализа:** 2026-04-17
**Метод:** Эмпирический анализ данных на диске + статья arXiv:2405.11936 + GitHub-репозиторий авторов
**Путь к данным:** `/home/servml/Документы/datasets/UAV_VisLoc_dataset/`
---
## 1. МЕТАДАННЫЕ
| Поле | Значение |
|------|----------|
| Полное название | UAV-VisLoc: A Large-scale Dataset for UAV Visual Localization |
| Авторы | Wenjia Xu, Yaxuan Yao, Jiaqi Cao, Zhiwei Wei, Chunbo Liu, Jiuniu Wang, Mugen Peng (BUPT + CAS + CityU HK) |
| Год, Venue | 2024, arXiv:2405.11936 [cs.CV] |
| Код | https://github.com/IntelliSensing/UAV-VisLoc (только README + ссылки) |
| Данные | Google Drive / Baidu Net Disk (16.4 GB) |
| Общий объём на диске | ~16.4 GB |
---
## 2. ОБЩАЯ СТАТИСТИКА
### 2.1. Сводка
| Параметр | Значение |
|----------|----------|
| Drone-изображений | **6 774** |
| Спутниковых карт | **11** (+ маршрут 09 разбит на 4 тайла) |
| Маршрутов (flights) | 11 |
| Регионов (Китай) | 7 провинций/районов |
| Типов БПЛА | 2 (multi-rotor + fixed-wing) |
| Сезоны съёмки | 2 (лето, осень) |
| Временной охват | 20162023 |
### 2.2. Разбиение train / test
| Split | Изображений | Доля |
|-------|-------------|------|
| Train | 5 080 | 75.0% |
| Test | 1 694 | 25.0% |
| **Итого** | **6 774** | 100% |
Разбиение — **случайное по изображениям** внутри каждого маршрута (не по маршрутам!):
| Маршрут | Всего | Train | Test | Train% |
|---------|-------|-------|------|--------|
| 01 | 817 | 620 | 197 | 75.9% |
| 02 | 1 071 | 829 | 242 | 77.4% |
| 03 | 768 | 566 | 202 | 73.7% |
| 04 | 738 | 543 | 195 | 73.6% |
| 05 | 473 | 345 | 128 | 72.9% |
| 06 | 344 | 261 | 83 | 75.9% |
| 07 | 30 | 20 | 10 | 66.7% |
| 08 | 1 033 | 796 | 237 | 77.1% |
| 09 | 766 | 551 | 215 | 71.9% |
| 10 | 144 | 99 | 45 | 68.8% |
| 11 | 590 | 450 | 140 | 76.3% |
---
## 3. МАРШРУТЫ (FLIGHTS)
### 3.1. Детализация по маршрутам
| Маршрут | Регион | Тип БПЛА | Drone (px) | Высота (м) | Heading (Phi) | Спутник (px) | Дата drone | Дата sat |
|---------|--------|----------|------------|------------|---------------|-------------|------------|----------|
| 01 | Changjiang-20 | multi-rotor | 3976x2652 | ~405 | 165° | 9774x26762 | 2018-09 | 2023-11 |
| 02 | Changjiang-23 | multi-rotor | 3976x2652 | ~405 | 5° | 11482x34291 | 2018-09 | 2022-09 |
| 03 | Taizhou-1 | multi-rotor | 3976x2652 | ~466 | -40° | 35092x24308 | 2018-10 | 2021-04 |
| 04 | Taizhou-6 | multi-rotor | 3976x2652 | ~542 | 170° | 18093x38408 | 2018-10 | 2023-03 |
| 05 | Yunnan | fixed-wing | 3000x2000 | ~2313 | 100° | 9394x6144 | 2016-06 | 2022-03 |
| 06 | Zhuxi | multi-rotor | 3976x2652 | ~840 | — | 8082x9780 | — | — |
| 07 | Donghuayuan | fixed-wing | 3000x2000 | ~688 | -1.5° | 3000x170 | 2018-07 | 2023-06 |
| 08 | Huzhou-3 | multi-rotor | 3976x2652 | ~551 | 100° | 43421x16294 | 2019-06 | 2023-07 |
| 09 | Huzhou-6 | multi-rotor | 3976x2652 | ~546 | -50° | 44800x33280* | 2019-06 | 2024-01 |
| 10 | Huailai | fixed-wing | 3000x2000 | ~772 | 170° | 6593x5077 | 2018-09 | 2023-06 |
| 11 | Shandan | multi-rotor | 3976x2652 | ~2572 | 90° | 29592x16582 | 2023-10 | 2021-03 |
\* Маршрут 09: спутник разбит на 4 тайла (satellite09_01-01.tif, 01-02, 02-01, 02-02). Суммарный размер: 44800x33280 px.
### 3.2. Географический охват
| Регион | Маршруты | Провинция | Ландшафт |
|--------|----------|-----------|----------|
| Changjiang | 01, 02 | Цзянси | Города, деревни, фермы, реки (долина Янцзы) |
| Taizhou | 03, 04 | Цзянсу | Города, фермы, каналы, реки |
| Yunnan | 05 | Юньнань | Горы, леса, холмы (высокогорье) |
| Zhuxi | 06 | Хубэй | Горы, леса, река |
| Donghuayuan | 07 | Хэбэй | Равнина (очень узкий маршрут) |
| Huzhou | 08, 09 | Чжэцзян | Города, озеро Тайху, фермы |
| Huailai | 10 | Хэбэй | Равнина, холмы |
| Shandan | 11 | Ганьсу | Пустыня, степь (коридор Хэси) |
**Координатный охват:**
- Широта: от 24.65°N (Юньнань) до 40.36°N (Хэбэй) — разброс ~15.7°
- Долгота: от 101.01°E (Ганьсу) до 120.25°E (Чжэцзян) — разброс ~19.2°
- Всё в пределах Китая, но с разнообразным ландшафтом
### 3.3. Типы БПЛА
| Тип | Маршруты | Разрешение | Высота полёта | Кол-во изображений |
|-----|----------|-----------|---------------|-------------------|
| Multi-rotor | 01, 02, 03, 04, 06, 08, 09, 11 | 3976x2652 | 4052572 м | 6 127 (90.4%) |
| Fixed-wing | 05, 07, 10 | 3000x2000 | 6882313 м | 647 (9.6%) |
---
## 4. ИСТОЧНИКИ ИЗОБРАЖЕНИЙ
### 4.1. Дроновые виды (query)
| Параметр | Значение |
|----------|----------|
| Платформа | **Реальные БПЛА** (не синтетика!) |
| Тип съёмки | RGB, ground-down view (камера вертикально вниз) |
| Разрешение кадров | 3976x2652 (multi-rotor) / 3000x2000 (fixed-wing) |
| GSD (drone) | 0.10.2 м/пиксель (из README); расчётное: 1597 см/px в зависимости от высоты |
| Высоты полёта | от 405 м до 2572 м |
| Heading angle | Phi1 (высокая уверенность), Phi2 (низкая уверенность) |
| Pose данные | Omega (pitch), Kappa (roll), Phi1/Phi2 (yaw) |
| Формат | JPEG |
### 4.2. Спутниковые карты (gallery / DB)
| Параметр | Значение |
|----------|----------|
| Платформа | Google Earth |
| Формат | GeoTIFF (.tif) |
| GSD (спутник) | **0.3 м/пиксель** (из статьи) |
| Размеры карт | от 3000x170 до 43421x38408 px |
| Кропы/патчи | **Отсутствуют** — авторы предоставляют только целые карты |
### 4.3. Временной разрыв drone/satellite
| Маршрут | Drone | Satellite | Разрыв |
|---------|-------|-----------|--------|
| 01 | 2018-09 | 2023-11 | **5 лет** |
| 03 | 2018-10 | 2021-04 | 2.5 года |
| 08 | 2019-06 | 2023-07 | 4 года |
| 11 | 2023-10 | 2021-03 | **-2.5 года** (спутник старше!) |
Временной разрыв создаёт дополнительную сложность (изменения застройки, сезонные различия).
---
## 5. ПАРАМЕТРЫ СЪЁМКИ ДРОНОВ
### 5.1. Высоты полёта
| Диапазон высот | Маршруты | Тип | Кол-во изображений |
|----------------|----------|-----|-------------------|
| 400410 м | 01, 02 | multi-rotor | 1 888 |
| 460550 м | 03, 04, 08, 09 | multi-rotor | 3 305 |
| 688840 м | 06, 07, 10 | mixed | 518 |
| 23002575 м | 05, 11 | mixed | 1 063 |
### 5.2. Наземное покрытие drone-кадра (оценка, FOV ~84°)
| Высота | Footprint (multi-rotor 3976x2652) | Footprint (fixed-wing 3000x2000) |
|--------|-----------------------------------|----------------------------------|
| ~405 м | ~608 x 405 м | — |
| ~466 м | ~699 x 466 м | — |
| ~551 м | ~826 x 551 м | — |
| ~688 м | — | ~1031 x 688 м |
| ~840 м | ~1260 x 840 м | — |
| ~2313 м | — | ~3469 x 2313 м |
| ~2572 м | ~3858 x 2572 м | — |
### 5.3. Расстояние между кадрами
| Маршрут | Avg spacing | Высота | Overlap (оценка) |
|---------|-------------|--------|------------------|
| 01 | 80.7 м | 405 м | ~87% (по ширине footprint) |
| 05 | 62.7 м | 2313 м | ~98% |
| 07 | 23.6 м | 688 м | ~98% |
| 08 | 99.7 м | 551 м | ~88% |
| 11 | 142.9 м | 2572 м | ~96% |
Высокий overlap (8798%) типичен для аэрофотосъёмки.
---
## 6. ПРОСТРАНСТВЕННАЯ НАРЕЗКА СПУТНИКОВЫХ ПАТЧЕЙ
### 6.1. Текущее состояние
**В оригинальном датасете кропы/патчи НЕ предоставлены.** Авторы дают только целые спутниковые карты. Задача определена как "найти координаты на большой карте", а не как retrieval по патчам.
### 6.2. Планируемая нарезка (по аналогии с UAV-GeoLoc)
Для совместимости с pipeline на основе UAV-GeoLoc, планируется нарезка спутниковых карт на патчи.
**Параметры нарезки:**
| Параметр | Значение | Обоснование |
|----------|----------|-------------|
| Размер кропа | **512x512 px** | ~154x154 м на земле (при GSD 0.3 м/px) |
| Stride | **256 px** | 50% overlap (как в UAV-GeoLoc) |
| Именование | `crop_X_Y.png` | X по ширине (col), Y по высоте (row) |
| Позиция в карте | `sat[Y*stride : Y*stride+crop, X*stride : X*stride+crop]` | — |
| Финальный размер (модель) | **256x256 px** | Resize для входа в модель |
### 6.3. Ожидаемое количество кропов
| Маршрут | Размер карты | Кропов (cols x rows) | Итого | Примечание |
|---------|-------------|---------------------|-------|------------|
| 01 | 9774x26762 | 37 x 103 | 3 811 | OK |
| 02 | 11482x34291 | 43 x 132 | 5 676 | OK |
| 03 | 35092x24308 | 136 x 93 | 12 648 | OK |
| 04 | 18093x38408 | 69 x 149 | 10 281 | OK |
| 05 | 9394x6144 | 35 x 23 | 805 | OK |
| 06 | 8082x9780 | 30 x 37 | 1 110 | OK |
| 07 | 3000x170 | — | — | **Исключён** (высота 170 px < 512) |
| 08 | 43421x16294 | 168 x 62 | 10 416 | OK |
| 09 | 44800x33280 | 174 x 129 | 22 446 | Нужна сшивка 4 тайлов |
| 10 | 6593x5077 | 24 x 18 | 432 | OK |
| 11 | 29592x16582 | 114 x 63 | 7 182 | OK |
| **Итого** | | | **~74 807** | Без маршрута 07 |
### 6.4. Наземное покрытие одного кропа
При GSD спутника = 0.3 м/px:
- **Кроп 512x512 px** покрывает **~154 x 154 м** на земле
- Это вписывается в footprint drone-кадра на любой высоте (405+ м)
- Stride 256 px = 76.8 м на земле
### 6.5. Проблемные маршруты
| Маршрут | Проблема | Решение |
|---------|----------|---------|
| 07 | Спутник 3000x170 px — слишком узкий | Исключить или кропы 170x170 |
| 09 | Спутник разбит на 4 тайла | Сшить в одну карту перед нарезкой |
---
## 7. АННОТАЦИИ И МЕТАДАННЫЕ
### 7.1. Файлы аннотаций
| Файл | Содержание | Формат |
|------|-----------|--------|
| `XX.csv` | GPS + pose каждого drone-кадра | CSV: num, filename, date, lat, lon, height, Omega, Kappa, Phi1, Phi2 |
| `satellite_ coordinates_range.csv` | GPS-bbox каждой спутниковой карты | CSV: mapname, LT_lat, LT_lon, RB_lat, RB_lon, region |
| `visloc_train.csv` | Train split | TSV: filename, height, Omega, Kappa, Phi1, Phi2 |
| `visloc_test.csv` | Test split | TSV: filename, height, Omega, Kappa, Phi1, Phi2 |
### 7.2. Типы аннотаций
| Тип аннотации | Наличие | Комментарий |
|---------------|---------|-------------|
| GPS-координаты (drone) | **Да** | Из бортового GNSS, точность ~1-3 м |
| GPS-bbox (satellite) | **Да** | Углы спутниковой карты |
| Высота полёта | **Да** | В метрах |
| Heading angle (yaw) | **Да** | Phi1 (надёжный) и Phi2 (менее надёжный) |
| Pitch / Roll | **Да** | Omega (pitch), Kappa (roll) |
| Дата съёмки | **Да** | Для drone-кадров |
| Positive/Semi-positive pairs | **Нет** | Отсутствуют — нужно генерировать |
| Кропы спутника (DB) | **Нет** | Отсутствуют — нужно нарезать |
| Depth maps | Нет | — |
| Segmentation masks | Нет | — |
| Bounding boxes | Нет | — |
| Семантические метки | Нет | Только implicit через регион |
---
## 8. СРАВНЕНИЕ С UAV-GeoLoc
| Параметр | UAV-VisLoc | UAV-GeoLoc |
|----------|-----------|-----------|
| Drone-изображения | **Реальные** БПЛА | **Синтетика** (Google Earth Studio 3D) |
| Кол-во drone | 6 774 | 652 744 |
| Кол-во спутниковых кропов | 0 (нужно генерировать) | 274 683 |
| Размер drone | 3976x2652 / 3000x2000 | 512x512 |
| GSD drone | 0.10.97 м/px (зависит от высоты) | ~0.5 м/px (синтетика) |
| GSD satellite | 0.3 м/px (Google Earth) | Варьируется |
| Высоты полёта | 4052572 м (реальные) | 100, 125, 150 м (синтетика) |
| Heading angles | Произвольные (реальный полёт) | Дискретные: 8 x 45° |
| Регионы | 7 провинций Китая | 11 стран, 6 континентов |
| Сцен | 11 маршрутов | 372 сцены |
| Train/test split | По изображениям (~75/25) | По сценам (140/40/20) |
| Positive pairs | Нет (нужно по GPS) | Есть (positive.json) |
| Semi-positive pairs | Нет | Есть (semi_positive.json) |
| Temporal gap | 25 лет | Нет (одновременно) |
| Лицензия | Не указана | CC BY-NC 4.0 |
### Ключевые отличия:
1. **Реальные vs синтетические** — UAV-VisLoc содержит реальные фотографии, что даёт реалистичные артефакты (освещение, шум, blur), но меньше контроля
2. **Масштаб** — UAV-GeoLoc на 2 порядка больше по количеству изображений
3. **Пары не предоставлены** — для UAV-VisLoc нужно самостоятельно сопоставить drone GPS с координатами кропов
4. **Вариативность высот** — гораздо шире (4002600 м vs 100150 м)
5. **Temporal gap** — drone и satellite сняты в разные годы, что усложняет matching
---
## 9. ПЛАН ГЕНЕРАЦИИ КРОПОВ И ПАР
### 9.1. Pipeline
```
satellite.tif + satellite_coordinates_range.csv
[1] Нарезка кропов (512x512, stride 256)
[2] Вычисление GPS центра каждого кропа
│ (из bbox карты + позиция кропа в grid)
[3] Для каждого drone-кадра:
│ — Найти кроп с минимальным GPS-расстоянием → positive
│ — Найти кропы в радиусе R → semi-positives
[4] Генерация positive.json, semi_positive.json, db_postion.txt
[5] Генерация Index файлов (train_query.txt, train_db.txt, ...)
[6] Resize drone → 256x256, кропов → 256x256
```
### 9.2. Matching drone → crop
GPS центр кропа `crop_X_Y.png` вычисляется как:
```
crop_center_lon = LT_lon + (X * stride + crop_size/2) * (RB_lon - LT_lon) / sat_width
crop_center_lat = LT_lat + (Y * stride + crop_size/2) * (RB_lat - LT_lat) / sat_height
```
Positive match: кроп с минимальным евклидовым расстоянием до GPS drone-кадра.
Semi-positive: все кропы в радиусе 1 stride (256 px = ~77 м) от positive.
---
## 10. ПОЛНАЯ СТРУКТУРА ДАННЫХ
```
UAV_VisLoc_dataset/ # ~16.4 GB
├── satellite_ coordinates_range.csv # GPS-bbox всех 11 карт
├── visloc_train.csv # 5080 train drone images (TSV)
├── visloc_test.csv # 1694 test drone images (TSV)
├── README_dataset.txt # Описание датасета
├── 01/ # Changjiang-20, multi-rotor, 817 imgs
│ ├── drone/
│ │ ├── 01_0001.JPG # 3976x2652
│ │ ├── 01_0002.JPG
│ │ └── ...
│ ├── satellite01.tif # 9774x26762
│ └── 01.csv # num,filename,date,lat,lon,height,...
├── 02/ ... 06/ # Аналогичная структура
├── 07/ # Donghuayuan, fixed-wing, 30 imgs
│ ├── drone/
│ │ └── 07_XXXX.JPG # 3000x2000
│ ├── satellite07.tif # 3000x170 (!)
│ └── 07.csv
├── 08/ # Huzhou-3, multi-rotor, 1033 imgs
├── 09/ # Huzhou-6, multi-rotor, 766 imgs
│ ├── drone/
│ ├── satellite09_01-01.tif # 25600x25600 ─┐
│ ├── satellite09_01-02.tif # 19200x25600 │ Суммарно:
│ ├── satellite09_02-01.tif # 25600x7680 │ 44800x33280
│ ├── satellite09_02-02.tif # 19200x7680 ─┘
│ └── 09.csv
├── 10/ # Huailai, fixed-wing, 144 imgs
└── 11/ # Shandan, multi-rotor, 590 imgs
├── drone/
│ └── 11_XXXX.JPG # 3976x2652
├── satellite11.tif # 29592x16582
└── 11.csv
```