Очень легко принимать многое вокруг себя как должное, особенно когда живешь в большом городе. В частности, инфраструктура, которая связывает людей, быстро отходит на второй план в нашей повседневной жизни. Конечно, общественный транспорт, тротуары, велосипедные дорожки и многие другие удобства, облегчающие нашу жизнь, не появились из ниоткуда. Мы просто к ним привыкли, поэтому не особо обращаем на них внимание.
Я часто ловлю себя на том, что двигаюсь в каком‑то органическом режиме автопилота, когда еду в знакомые места. Вы, вероятно, знаете это чувство, когда вы выходите из дома и телепортируетесь в свой офис, едва замечая, что произошло на пути, по которому вы непрерывно шли пару лет. Обычные вещи, скажете вы.
Главная цель этой статьи — понять различные пространственные перспективы и исследовать, как их можно выразить с помощью машинного обучения.
Цель
Прежде чем углубиться в базовую технологию, давайте сначала опишем идею и задачу. Предположим, мы хотим рассчитать наилучший возможный путь для пешехода с учетом определенных требований к ширине тротуара, чтобы избежать мест, где движение затруднено или невозможно. Любой, кто когда‑либо толкал невероятно тяжелую коляску с малышом внутри, сразу это поймет. Для этого нам потребуется не только определить размеры тротуара, но и обозначить его контуры, используя доступные источники данных.
Посмотрите на изображения ниже.
Одно — ортофотоснимок моего родного города Лодзи.
Другое — снимок улицы с уровня земли, полученный с помощью Mapillary. Вы можете увидеть, как можно точно измерить тротуар, используя стандартные методы ГИС/
Задача также может быть полностью автоматизирована с помощью известных методов глубокого обучения, таких как семантическая сегментация.
Проблема в том, что не во всех местах мира доступны снимки дистанционного зондирования высокого разрешения, что затрудняет применение предлагаемого решения.

К счастью, снимки улиц становятся все более доступными. Как вы увидите далее, доступность данных достигается за счет сложности решения. Измерение объектов по изображениям, полученным одним кадром, — непростая задача.
Контекст задан — теперь давайте определим технические цели
Итак, нам необходимо создать инструмент компьютерного зрения, который измеряет горизонтальные поверхности (тротуары, полы и так далее) на изображениях Street View из таких источников, как мобильные телефоны, Mapillary или Panoramax. Минимально жизнеспособный продукт (MVP) — это рабочий прототип, но архитектура должна поддерживать возможные расширения.
Нет ограничений на модальности данных или алгоритмы — используем все, что дает результаты. Приоритет отдается моделям с открытым исходным кодом, современным моделям, которые работают на одном ноутбуке для разработки без высокопроизводительных вычислительных ресурсов (HPC). Быстро выявлять ошибки, если что‑то вычислительно затратно или слишком сложно на этапе проверки концепции (PoC).
Мы можем использовать как интерфейс командной строки, так и пользовательский интерфейс, чтобы можно было визуально продемонстрировать работу без углубления в технические детали. Реализация должна быть максимально универсальной, чтобы обеспечить легкое расширение для новых измерений или типов поверхностей. Код должен быть чистым и модульным — речь идет о быстром прототипировании на основе качественных данных, а не о спешной неразберихе.
Метод
Переход от одного изображения к оценке произвольной ширины поверхности — это многоэтапный процесс, сочетающий компьютерное зрение, геопространственный анализ и методы машинного обучения. Все необходимые компоненты уже существуют и являются результатом передовых исследований, проведенных многими признанными институтами и компаниями. Моя скромная задача заключалась в том, чтобы их объединить.

Этап I — Предварительная обработка изображений и извлечение признаков
A. Загрузка и нормализация изображений — загрузка входного изображения и преобразование его в формат RGB для обеспечения согласованности цветовых каналов для последующих моделей. Я предпочитаю использовать Pillow для таких задач, поскольку он легко интегрируется в сложные конвейеры обработки данных.
B. Монокулярная оценка глубины — применение оценщика глубины на основе глубокого обучения (DepthAnything) для создания плотной метрической карты глубины. Он предсказывает в метрах расстояние от камеры до каждого пикселя изображения, тем самым восстанавливая 3D‑структуру из одной 2D‑фотографии. Качество этого шага имеет решающее значение, поскольку оно напрямую влияет на оценку размеров.

C. Калибровка камеры и поля перспективы — извлечение из метаданных EXIF, если они недоступны, оценка с помощью GeoCalib внутренних параметров камеры (фокусное расстояние, главная точка) и внешних параметров (ориентация камеры, угол наклона). Этот шаг необходим для точной депроекции из 2D‑пиксельных координат в 3D‑мировые координаты. Кроме того, GeoCalib хорошо работает с искаженными и обрезанными изображениями.

D. Обнаружение объектов и семантическая сегментация — запуск модели компьютерного зрения на основе подсказок (SAM3) для идентификации и сегментации объектов, соответствующих предоставленным текстовым подсказкам, например, тротуар, пешеходная дорожка или пешеходная зона.
Каждому обнаруженному объекту присваивается бинарная маска, указывающая, какие пиксели к нему принадлежат, а также оценка достоверности. Использование текстовых подсказок полезно, поскольку позволяет модели адаптироваться к различным пространственным контекстам, корректируя подсказку или делая ее более конкретной.

E. Определение геопространственных координат — попытка извлечь координаты GPS из метаданных EXIF, если изображение получено из источников с геотегами, таких как Mapillary или Panoramax. Это позволяет геопривязать измерения и интегрировать их в пространственные базы данных или приложения маршрутизации.
Этап II: Реконструкция 3D‑облака точек
Генерация классифицированного облака точек — здесь 2D становится 3D. Для каждого пикселя изображения:
Используйте карту глубины, чтобы получить расстояние от камеры.
Используйте метаданные калибровки, чтобы депроецировать 2D‑координаты пикселя в 3D‑пространство.
Пометьте точку ее классом объекта из масок сегментации.
В результате получается 3D‑облако точек, где каждая точка знает свое пространственное положение (ширина по оси X, высота по оси Y, глубина по оси Z) и к какому объекту она принадлежит (CLS). Это эффективно создает разреженную 3D‑реконструкцию сцены, из которой мы можем извлечь только интересные поверхности.
Этап III: Измерение отдельных поверхностей
Разделение облака точек — извлечение только подмножества 3D‑точек, принадлежащих анализируемой поверхности, с фильтрацией по индексу класса. Это позволяет изолировать конкретный объект для измерения от остальной части сцены. Здесь мы также проводим интенсивную постобработку облака точек, упрощая его и удаляя выбросы.
Пространственная проекция и геометрический анализ — проецирование 3D‑точек на плоскость XZ (плоскость земли, предполагая, что Y — вертикальная).
Затем вычисляем некоторые полезные геометрические параметры и расстояния:
Альфа‑форма: вогнутая оболочка, содержащая все спроецированные точки, представляющая внешнюю границу поверхности. Здесь мы используем собственный эвристический алгоритм, а не классическую библиотеку AlphaShape, чтобы ускорить процесс.
Многоугольник коридора: упрощенное, проходимое представление площади поверхности. Создается с помощью простых операций с многоугольниками.
Центральная линия: путь, проходящий через середину поверхности, представляющий оптимальную траекторию движения.
Перпендикулярные расстояния: В нескольких точках вдоль осевой линии измерьте перпендикулярное расстояние до границ оболочки с обеих сторон. Эти расстояния представляют собой локальную ширину поверхности.

Геометрический анализ
Статистические показатели зазора — Из массива измерений перпендикулярных расстояний:
Средний зазор: Средняя ширина поверхности с удалением выбросов методом Isolation Forest с использованием параметра загрязнения (по умолчанию отфильтровывается 5% экстремальных значений). Это делает оценку более устойчивой к ошибкам сегментации.
Стандартное отклонение: Количественно оценивает изменчивость ширины — низкие значения указывают на постоянную ширину, высокие значения указывают на узкие места или неправильную форму.
Оценка качества — Оценка надежности измерений на основе геометрических свойств. Показатель качества помогает отфильтровать ненадежные измерения или отметить поверхности, требующие ручной проверки.
При этом учитываются такие факторы, как:
Насколько четко определена оболочка (разреженное или плотное покрытие точками).
Насколько прямая или изогнутая осевая линия (сложные пути могут иметь менее надежные измерения).
Соотношение сторон поверхности (очень вытянутые или неправильные формы могут быть проблематичными).
Плотность и распределение облака точек.
Итоговый результат — Каждая обнаруженная поверхность связана с набором данных, который включает маску сегментации, 3D‑облако точек, геометрические формы (оболочка, коридор, осевая линия) и ключевое измерение: clearance_mean ± clearance_std в метрах, представляющее собой оценочную ширину и ее неопределенность.

Пробный запуск
Каким бы был пространственный анализ, если бы не попытка запустить алгоритм на большей площади? Давайте попробуем на примере центра Лодзи.
На изображении ниже вы можете увидеть работу конвейера HeiMeterStick, запущенного на 80 000 изображениях, полученных с помощью Mapillary. В результате есть некоторые аномалии, но в целом он очень многообещающий.

Что дальше
Конвейер измерений все еще дорабатывается и тестируется на больших географических территориях. Цель состоит в создании всеобъемлющего набора данных измерений поверхности в разных странах и условиях.

Когда дорожные данные уже собраны, но превратить их в пригодную для анализа модель среды не получается, задачу приходится раскладывать на детекцию, оценку глубины и пространственную реконструкцию.
На бесплатных демо-уроках разберем, как компьютерное зрение формирует структурированное представление дорожной сцены и как детекторы развивались от YOLO до трансформеров реального времени.
Такой разбор помогает осознанно выбирать архитектуру под задачу и понимать, на каком этапе конвейера теряется точность.
12 августа в 20:00. «ИИ-зрение в действии: как из данных с дороги получить карту мира». Записаться
20 августа в 20:00. «ИИ против человеческих костылей: эволюция детекторов от YOLO до трансформеров реального времени». Записаться
Больше бесплатных уроков августа смотрите в дайджесте.
