Система визуально-инерциальной SLAM на основе глубокого обучения для восстановления пути движения по видеопотоку и картам дорог. Задача состояла в восстановлении траектории движения, имея только видеопоследовательность изображений KITTI, карты дорог и начальную точку - других датчиков в системе не используется.
DeepVO - это система для оценки визуальной одометрии, которая объединяет:
- CNN для извлечения признаков на основе предобученной FlowNet
- RNN (LSTM) для временного моделирования движения камеры
- GTSAM для оптимизации графа для улучшения траектории
- Привязку к карте дорог для коррекции траектории
- ✅ Обучение с нуля и fine-tuning предобученных моделей
- ✅ Поддержка различных стратегий для разных последовательностей KITTI
- ✅ Интеграция с картами дорог OpenStreetMap
- ✅ Визуализация результатов в интерактивных картах
- ✅ Полная оценка качества траекторий
Проект можно запустить двумя способами: через интерактивный веб-интерфейс (рекомендуется для демонстрации) или через Docker (рекомендуется для установки).
Проект включает веб-приложение на базе Streamlit (app.py), которое позволяет запускать SLAM-пайплайн в удобном интерфейсе без использования командной строки.
Запуск:
# Убедитесь, что вы находитесь в среде с установленными зависимостями
streamlit run app.pyИнтерфейс позволяет загрузить ZIP-архив с изображениями, файл карты .graphml, выбрать стратегию и получить результат на интерактивной карте мира.
Docker полностью автоматизирует сложную установку зависимостей, таких как GTSAM, и гарантирует запуск в идентичной среде.
Требования:
- Установленный Docker Desktop.
Инструкция:
- Соберите Docker-образ:
команда создаст образ с именем
deepvo-slam-app. Первая сборка займет 20-30 минут.docker build -t deepvo-slam-app . - Запустите контейнер:
эта команда запустит веб-приложение. Также для демонстрации на реальной карте нужен бесплтаный API ключ с mapbox.com, который нужно указать в secrets.toml
docker run -p 8501:8501 --rm -v "$(pwd)/.streamlit:/app/.streamlit" deepvo-slam-app - Откройте приложение: перейдите в браузере по адресу http://localhost:8501.
DeepVO/
├── deepvo/ # Основной пакет Python (SLAM, модели, утилиты)
├── configs/ # Конфигурационные файлы
├── dataset/ # Данные KITTI: poses/ (gt и npy), sequences/ (изображения)
├── map_graphs/ # Графы дорог для map-matching (используются SLAM)
├── ground_truth_generated/ # Сгенерированные ground truth траектории для сравнения
├── experiments/ # Веса моделей и логи обучения
├── notebooks/ # Jupyter ноутбук с обучением
├── fig/ # Примеры визуализации результатов (png, html)
├── tools/ # Вспомогательные утилиты (трансформации, оценка поз)
├── utils/ # Препроцессинг, утилиты для данных
├── scripts/ # Скрипты для запуска отдельных этапов
├── examples/ # Примеры запуска SLAM
├── tests/ # Тесты
├── FINAL_SLAM_FULL.py # Главный SLAM модуль (основной файл)
├── app.py # Стримлинт
├── train.py # Скрипт обучения
├── requirements.txt # Зависимости проекта
├── pyproject.toml # Современная конфигурация Python проекта
├── setup.py # Классический setup файл
└── README.md # Документация
map_graphs/— содержит .graphml файлы для каждой последовательности KITTI, используется для map-matching (привязка траектории к карте дорог).ground_truth_generated/— содержит txt-файлы с эталонными траекториями для оценки качества.notebooks/— обучение модели.fig/— PNG/HTML с примерами финальных траекторий и визуализаций.experiments/— веса моделей и логи (большие файлы не хранить в git, только структура).
Перед обучением необходимо подготовить относительные позы:
python utils/preprocess.pypip install -r requirements.txt# Обучение с нуля
python train.py
# Fine-tuning предобученной модели
python train.py --fine_tune# Запуск для последовательности 04 (по умолчанию)
python FINAL_SLAM_FULL.py
# Запуск для конкретной последовательности
python FINAL_SLAM_FULL.py --sequence 06
python FINAL_SLAM_FULL.py -s 07
python FINAL_SLAM_FULL.py -s 10В папке fig/ содержатся примеры визуализации финальных траекторий для разных последовательностей:
- map_04_final_solution_strategy.png
- map_06_final_solution_strategy.png
- map_07_final_solution_strategy.png
- map_10_final_solution_strategy.png
Система протестирована и оптимизирована для последовательностей:
- 04 - базовая последовательность (по умолчанию)
- 06 - сложные повороты (специальная стратегия)
- 07 - агрессивная стратегия с фильтрацией дорог
- 10 - генерация пути со сложной графовой логикой
Каждая последовательность использует индивидуально настроенную стратегию оптимизации.
- Python 3.7+
- PyTorch 1.8+
- GTSAM 4.0+ (см. GTSAM_INSTALL.md)
- OpenCV
- NetworkX
- Shapely
- Folium
pyproject.toml - это современный стандарт конфигурации Python проектов (PEP 518/621), который заменяет классический setup.py. Он содержит:
- Метаданные проекта (название, версия, авторы)
- Зависимости и их версии
- Настройки инструментов разработки (black, pytest, mypy)
- Конфигурацию сборки пакета
Этот файл позволяет легко устанавливать проект командой pip install . и публиковать в PyPI.
Проект использует датасет KITTI Odometry:
- Обучение: 00, 02, 08, 09
- Валидация: 03, 05
- Тестирование: 04, 06, 07, 10 ← Только эти последовательности поддерживаются
- Скачайте датасет KITTI Odometry (см. ниже).
- Скачайте pre-trained модель FlowNetS: flownets_bn_EPE2.459.pth и поместите в папку
models/. - Скачайте модель DeepVO: t00020809_v030405060710_im192x640_s7_b12_finetuned.model.latest и поместите в папку
experiments/kitti_finetuned/models/.
Датасет KITTI не включен в репозиторий из-за большого размера (~66GB). Для работы с проектом:
-
Скачайте KITTI Odometry dataset с официального сайта:
Перейдите на официальную страницу KITTI Odometry: https://www.cvlibs.net/datasets/kitti/eval\_odometry.php
Загрузите следующие файлы:
- Color images (65 GB) - цветные изображения для одометрии
- Ground truth poses (4 MB) - данные истинной траектории
- Calibration files (1 MB) - файлы калибровки камер
-
Распакуйте в папку
dataset/:# Создайте структуру папок mkdir -p dataset/sequences dataset/poses # Распакуйте данные в соответствующие папки unzip data_odometry_color.zip -d dataset/ unzip data_odometry_poses.zip -d dataset/ unzip data_odometry_calib.zip -d dataset/
-
Структура должна быть:
dataset/ ├── sequences/ │ ├── 00/ │ ├── 01/ │ └── ... └── poses/ ├── 00.txt ├── 01.txt └── ...
Система достигает высокой точности на тестовых последовательностях KITTI благодаря:
- Индивидуальным стратегиям для каждой последовательности
- Оптимизации графа факторов GTSAM
- Привязке к картам дорог OpenStreetMap
@misc{deepvo2025,
title={DeepVO: Visual-Inertial SLAM System},
author={Andrew Korchemkin},
year={2025},
url={https://github.com/aak204/deepvo-slam.git},
note={KITTI-optimized SLAM implementation}
}MIT License - см. файл LICENSE для подробностей.





