Scene Flow
장면 흐름이 프레임 간 3D 움직임을 추정하는 방법, 광학 흐름 및 깊이 추정과의 차이, 자율 주행·로보틱스·YOLO26 비전 워크플로 지원 방식을 알아보세요.
씬 플로우는 시간에 따라 변화하는 장면의 3차원 운동장입니다. 프레임 사이에서 보이는 점들이 실제 3D 공간에서 어떻게 이동하는지 설명하며, 좌우 및 수직 방향의 이동과 카메라에 가까워지거나 멀어지는 움직임을 포함합니다. 컴퓨터 비전에서 씬 플로우는 시스템이 이미지에서 무엇이 움직이는지뿐 아니라 주변 기하 구조가 실제로 어떻게 변하는지도 파악하는 데 도움이 됩니다.
씬 플로우가 3D 움직임을 표현하는 방식#
씬 플로우 추정은 관측된 각 장면 점에 3D 변위 또는 속도 벡터를 할당합니다. 예를 들어 보행자가 도로를 가로질러 걸으면서 카메라에 다가오면, 해당 벡터는 측면 이동과 카메라까지의 거리가 줄어드는 양상을 모두 나타냅니다.
이는 2차원 이미지 평면에서 픽셀의 겉보기 움직임을 표현하는 광학 흐름과 다릅니다. Carnegie Mellon 씬 플로우 프로젝트에서 설명하듯이, 광학 흐름은 3D 씬 플로우를 카메라 이미지에 투영한 결과로 이해할 수 있습니다. 따라서 두 점이 이미지에서 비슷하게 움직이는 것처럼 보여도 깊이 방향으로는 다르게 움직일 수 있습니다.
밀집 씬 플로우는 대부분의 가시 점에 대한 움직임을 추정하는 반면, 희소 씬 플로우는 선택된 특징점, 추적된 점 또는 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
# 장면의 픽셀별 3D 구조를 추정합니다.
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 변위를 추정할 수 있습니다. 실무에서는 전체 운동장을 평가하기 전에 각 구성 요소를 별도로 검증해야 하며, 특히 가림 및 깊이 경계 주변을 주의 깊게 살펴야 합니다.









