Scene Flow
Узнай, как поток сцены оценивает 3D-движение между кадрами, чем отличается от оптического потока и оценки глубины и как применяется в автономном вождении, робототехнике и рабочих процессах компьютерного зрения YOLO26.
Поток движения сцены — это поле трёхмерного движения динамической сцены во времени. Оно описывает, как видимые точки перемещаются в реальном 3D-пространстве между кадрами, в том числе вбок, по вертикали и по направлению к камере или от неё. В компьютерном зрении поток движения сцены помогает системам понимать не только то, что движется на изображении, но и то, как на самом деле меняется окружающая геометрия.
Как поток движения сцены описывает 3D-движение#
Оценка потока движения сцены задаёт вектор трёхмерного смещения или скорости для каждой наблюдаемой точки сцены. Например, если пешеход идёт через дорогу и приближается к камере, соответствующие векторы описывают и боковое движение, и сокращение расстояния до камеры.
Это отличается от оптического потока, который отражает видимое перемещение пикселей в двумерной плоскости изображения. Как объясняется в проекте Carnegie Mellon по потоку движения сцены, оптический поток можно рассматривать как проекцию потока движения сцены на изображение с камеры. Поэтому две точки могут выглядеть движущимися одинаково, но по-разному перемещаться в глубину.
Плотная оценка потока движения сцены определяет движение большинства видимых точек, а разреженная охватывает выбранные признаки, отслеживаемые точки или измерения LiDAR. Плотный результат даёт более подробную геометрическую информацию, но требует больше вычислений и надёжного сопоставления между кадрами.
Поток движения сцены и связанные понятия компьютерного зрения#
Поток движения сцены объединяет пространственную структуру и движение во времени, связывая несколько смежных задач:
- Оценка оптического потока с помощью OpenCV: определяет горизонтальное и вертикальное смещение пикселей. Она не позволяет самостоятельно установить, двигался ли объект в глубину или видимое движение вызвано камерой.
- Оценка глубины: определяет расстояние от камеры до поверхностей, обычно для одного кадра. Поток движения сцены дополнительно описывает, как эти 3D-позиции меняются со временем.
- Стереозрение: использует соответствующие пиксели с синхронизированных камер для восстановления глубины. В описании процесса стереооценки глубины в OpenCV объясняется, как разность между изображениями с разных ракурсов помогает восстановить 3D-сцену.
- Отслеживание объектов: сохраняет идентификаторы объектов между кадрами, обычно используя ограничивающие рамки или маски. Поток движения сцены вместо этого оценивает движение на уровне точек или пикселей и может представлять разные движения внутри одного деформирующегося объекта.
- Движение облака точек: системы LiDAR и RGB-D могут напрямую оценивать поток движения сцены между наборами 3D-точек. В руководстве Open3D по облакам точек описано геометрическое представление, используемое во многих подобных конвейерах.
Поток движения сцены также зависит от геометрии камеры. Точная калибровка камеры с помощью OpenCV помогает отделить реальное движение сцены от изменений, вызванных поворотом камеры, её смещением или искажением объектива.
Примеры применения в реальных условиях#
-
Автономное вождение: система восприятия может оценить, перестраивается ли соседний автомобиль, быстро ли он приближается или движется вместе с потоком транспорта. В отличие от одного лишь 2D-движения, поток движения сцены позволяет рассуждать о времени до столкновения, поскольку учитывает перемещение вдоль оси глубины. Он может дополнять компоненты обнаружения, отслеживания и оценки глубины в решениях для компьютерного зрения в автомобилях. Набор тестов KITTI для потока движения сцены показывает, как оцениваются методы на дорожных сценах с движением камеры и независимо движущимися объектами, а рекомендации NHTSA по безопасности автоматизированных транспортных средств дают более широкий контекст для систем восприятия, ориентированных на безопасность.
-
Робототехника: мобильный робот может использовать поток движения сцены, чтобы отличать неподвижную полку от движущегося работника, оценивать 3D-траекторию препятствия и менять маршрут до столкновения. В решениях для компьютерного зрения в робототехнике эту информацию можно объединять с данными камер, датчиков глубины и LiDAR. В документации ROS по сообщениям датчиков определены стандартные интерфейсы для обмена изображениями, данными о камерах и облаками точек между компонентами роботов.
Сложности оценки и данные#
Поток движения сцены можно вычислять по стереовидео, данным RGB-D-камер, последовательностям LiDAR или монокулярному видео с использованием обученных признаков глубины и движения. Стереокамеры и активные датчики глубины дают более точные геометрические измерения, тогда как монокулярным системам приходится оценивать масштаб и разрешать неоднозначности на основе визуального контекста.
К распространённым причинам ошибок относятся перекрытия, смазывание при движении, отражающие поверхности, области без текстуры, тонкие структуры, изменение освещения и быстрое перемещение между кадрами. Движение камеры усложняет задачу, поскольку системе нужно отделить собственное движение камеры от движения независимых объектов. Ошибки могут привести к неверным 3D-траекториям, из-за чего системы навигации или прогнозирования столкновений неправильно оценят скорость и расстояние.
Обучающие данные могут включать RGB-кадры, глубину или карту диспаритета, оптический поток, сегментацию и параметры камеры. Наборы данных Freiburg по потоку движения сцены показывают, как эти взаимодополняющие аннотации позволяют совместно описывать геометрию и движение.
Практический процесс#
Ultralytics YOLO26 может предоставить компонент глубины для конвейера потока движения сцены благодаря описанной в документации задаче монокулярной оценки глубины. Следующий пример создаёт плотную карту глубины для одного кадра:
from ultralytics import YOLO
# Оцени трёхмерную структуру сцены для каждого пикселя.
model = YOLO("yolo26n-depth.pt")
results = model("https://ultralytics.com/images/bus.jpg")
result = results[0]
result.save(filename="depth_result.jpg")
print(result.depth.data.shape)Этот процесс с YOLO26 сам по себе не вычисляет поток движения сцены. Он предоставляет глубину для каждого пикселя, которую полноценный конвейер может объединить с последовательными кадрами, временными соответствиями и откалиброванными позами камеры для оценки 3D-смещения. На практике командам следует проверять каждый компонент отдельно, прежде чем оценивать полное поле движения, особенно в областях перекрытий и на границах глубины.









