Ultralytics YOLO27: 대기자 명단에 등록하세요.
YOLO 라이선스 받기
Ultralytics 용어집으로 돌아가기

Optical Flow

광학 흐름은 두 비디오 프레임 사이에서 모든 픽셀이 어떻게 이동하는지 모션 벡터 필드로 추정합니다. 기존 및 딥러닝 방식, 활용 사례와 OpenCV 코드를 살펴봅니다.

옵티컬 플로우는 두 이미지, 보통 연속된 비디오 프레임 사이에서 밝기 패턴이 겉보기로 움직이는 현상입니다. 옵티컬 플로우 알고리즘은 첫 번째 프레임의 각 픽셀에 대해 해당 픽셀의 콘텐츠가 두 번째 프레임에서 나타나는 위치를 가리키는 2D 변위 벡터(dx, dy)를 추정합니다. 플로우 필드라고 하는 이 결과는 움직이는 객체와 카메라 자체에서 발생하는 움직임을 포착하므로, 컴퓨터 비전 시스템은 비디오 안정화, 자기 운동 추정, 프레임 보간, 동작 인식에 이를 활용합니다. 플로우는 실제 3D 움직임이 아니라 카메라가 보는 것을 측정합니다. 완벽하게 균일한 구체가 제자리에서 회전하면 플로우가 발생하지 않으며, 움직이는 그림자는 물리적인 움직임이 없는 곳에 플로우를 발생시킵니다.

옵티컬 플로우 추정 방법#

대부분의 방법은 밝기 일정성, 즉 한 점이 움직여도 같은 강도를 유지한다는 가정에서 시작합니다. 이를 선형화하면 픽셀마다 하나의 방정식이 만들어집니다. Ix·u + Iy·v + It = 0에서 Ix, Iy, It은 이미지의 x, y, 시간 방향 미분값이며, (u, v)는 미지의 플로우입니다. 방정식 하나로 미지수 두 개를 결정할 수 없는데, 이것이 조리개 문제입니다. 작은 창을 통해 직선 모서리를 보면 모서리에 수직인 움직임만 측정할 수 있습니다. 이를 해결하기 위해 고전적인 방법은 두 번째 가정을 추가합니다:

  • Lucas-Kanade 방법 (1981): 작은 창 안에서 플로우가 일정하다고 가정하고, 해당 창의 모든 픽셀 방정식을 최소제곱법으로 풉니다. 창에 모서리처럼 두 방향의 기울기가 포함된 곳에서 잘 작동하므로, 일반적으로 선택한 특징점에 대해 희소 플로우로 실행합니다.
  • Horn-Schunck 방법 (1981): 전체 이미지에서 플로우 필드가 매끄럽다고 가정하고 전역 최적화를 수행하여 모든 픽셀에 대해 밀집 플로우를 생성합니다.

두 가정 모두 큰 움직임에서는 성립하지 않으므로, 실제 방법은 이미지 피라미드에서 거친 수준부터 세밀한 수준으로 플로우를 추정합니다. 이때 전체 해상도에서 16픽셀인 움직임은 피라미드에서 세 단계 아래에서 2픽셀 움직임이 됩니다:

OpenCV는 희소 점에 대한 피라미드 Lucas-Kanade와 밀집 플로우를 위한 Gunnar Farnebäck의 2003년 다항식 확장 알고리즘을 구현합니다. 다음 코드는 무작위 텍스처를 알려진 거리만큼 이동한 뒤, 밀집 Farnebäck 플로우로 움직임을 복원합니다:

import cv2
import numpy as np

# A smooth random texture, then the same texture moved 3 px right and 2 px down
rng = np.random.default_rng(0)
texture = cv2.GaussianBlur(rng.random((240, 320)), (0, 0), 3)
frame1 = cv2.normalize(texture, None, 0, 255, cv2.NORM_MINMAX).astype(np.uint8)
frame2 = np.roll(frame1, shift=(2, 3), axis=(0, 1))

# Dense Farneback optical flow: one (dx, dy) displacement vector for every pixel
flow = cv2.calcOpticalFlowFarneback(
    frame1, frame2, None, pyr_scale=0.5, levels=3, winsize=15, iterations=3, poly_n=5, poly_sigma=1.2, flags=0
)
print(f"flow field shape: {flow.shape}")
print(f"median motion: dx={np.median(flow[..., 0]):.2f}, dy={np.median(flow[..., 1]):.2f} pixels")

출력은 flow field shape: (240, 320, 2) 및 median motion: dx=3.00, dy=2.00 pixels입니다. 76,800개 픽셀 각각에 대해 2개 성분으로 이루어진 벡터 하나를 표시하며, 가로 3픽셀 및 세로 2픽셀 이동을 복원합니다.

딥러닝 방법#

FlowNet은 실제 비디오에는 정답 플로우가 제공되는 경우가 드물기 때문에, 합성 학습 데이터로 합성곱 신경망이 플로우를 엔드투엔드로 학습할 수 있음을 2015년에 보여주었습니다. PWC-Net은 고전적인 방법의 피라미드, 워핑, 비용 볼륨 아이디어를 소형 네트워크에 구현했습니다. ECCV 2020 최우수 논문상을 받은 RAFT는 상관 볼륨에서 첫 번째 프레임의 모든 픽셀을 두 번째 프레임의 모든 픽셀과 비교하고, 반복적인 순환 업데이트를 통해 하나의 고해상도 플로우 필드를 정교화합니다. 학습 기반 방법은 고전적인 방법보다 큰 변위, 모션 블러, 텍스처가 없는 영역을 훨씬 잘 처리하며, torchvision은 사전 학습된 RAFT 모델을 제공합니다. 정확도는 MPI Sintel, KITTI 2015 등의 벤치마크에서 예측 플로우 벡터와 실제 플로우 벡터 간 픽셀 단위 평균 거리인 종점 오차(EPE)로 보고합니다.

  • 객체 추적: 여러 프레임에 걸쳐 지속적인 ID로 전체 객체를 추적하는 반면, 옵티컬 플로우는 두 프레임 사이의 픽셀별 움직임을 설명하며 객체에 대해서는 알지 못합니다. 추적기는 플로우를 단서로 활용합니다. Ultralytics YOLO의 추적 모드에서는 기본 TrackTrack 추적기와 BoT-SORT가 희소 Lucas-Kanade 플로우(gmc_method: sparseOptFlow)로 카메라 움직임을 추정합니다. 이들은 절반 해상도 프레임에서 최대 400개의 모서리를 추적하고, RANSAC으로 해당 모서리에 회전, 스케일, 평행 이동을 맞춘 뒤, 새 검출과 매칭하기 전에 예측된 모든 추적 박스를 해당 움직임만큼 이동시킵니다.
  • 점 추적: 두 프레임 사이의 모든 픽셀에 대한 움직임을 추정하는 대신, 가려진 상황을 포함해 긴 비디오에서 선택된 점을 추적합니다.
  • 장면 플로우: 스테레오 또는 깊이 데이터에서 추정한 공간상 점들의 3D 움직임입니다. 옵티컬 플로우는 이를 이미지 평면에 투영한 결과입니다.
  • 비디오 코덱 모션 벡터: H.264, HEVC, AV1 인코더는 프레임 인코딩에 필요한 비트 수를 최소화하도록 선택한 모션 벡터를 블록마다 저장하므로, 이 벡터는 실제 움직임과 다른 경우가 많습니다.

실제 적용 사례#

  • 비디오 안정화: 프레임 전반의 주된 플로우는 카메라 흔들림을 나타내며, 소프트웨어는 각 프레임을 반대 방향으로 워핑하여 이를 상쇄합니다.
  • 프레임 보간: 슬로 모션과 프레임 레이트 변환은 픽셀을 플로우 벡터를 따라 일부 이동시켜 중간 프레임을 생성합니다.
  • 자율주행차 및 드론: 플로우는 시각적 주행 거리 측정을 지원하며, 객체의 플로우가 확장되는 속도는 충돌이 다가오고 있음을 경고합니다.
  • 동작 인식: 2014년의 투 스트림 네트워크는 단일 프레임의 공간 스트림과 연속된 옵티컬 플로우 필드 10개를 쌓아 입력하는 시간 스트림을 이용해 동작을 분류했습니다.

솔루션 살펴보기

스포츠 분야의 컴퓨터 비전

스포츠 분야의 컴퓨터 비전

Ultralytics YOLO가 선수 및 공 추적, 경기력 분석, 코칭 인사이트, 선수 재활을 통해 스포츠 비전을 구현하는 방법을 알아보세요.
자세히 알아보기
항공 이미지 컴퓨터 비전

항공 이미지 컴퓨터 비전

Ultralytics YOLO를 활용해 드론 및 항공 이미지를 농업, 양식업, 보전, 지리 공간 분석을 위한 실시간 인사이트로 전환하세요.
자세히 알아보기
항공우주 분야의 컴퓨터 비전

항공우주 분야의 컴퓨터 비전

Ultralytics YOLO를 활용해 항공기 검사, 활주로 FOD 감지, 공항 지상 운영, 복합재 결함 감지 등 항공우주 분야에 컴퓨터 비전을 적용하세요.
자세히 알아보기
보안 분야의 컴퓨터 비전

보안 분야의 컴퓨터 비전

Ultralytics YOLO 모델로 모든 시설을 보호하세요. Vision AI는 경계 모니터링, 위협 감지, 번호판 인식, 작업장 안전을 지원합니다.
자세히 알아보기
로보틱스 분야의 컴퓨터 비전

로보틱스 분야의 컴퓨터 비전

Ultralytics YOLO 모델로 더 스마트한 머신을 구현하세요. 로보틱스 분야의 Vision AI는 자율 주행, 인식, 객체 추적, 실시간 제어를 지원합니다.
자세히 알아보기
물류 분야의 컴퓨터 비전

물류 분야의 컴퓨터 비전

Ultralytics YOLO 모델로 물류를 간소화하세요. 비전 AI는 화물 검사, 분류, 차량 추적, 실시간 창고 안전 모니터링을 지원합니다.
자세히 알아보기
리테일 분야의 컴퓨터 비전

리테일 분야의 컴퓨터 비전

Ultralytics YOLO 모델로 리테일의 새로운 가능성을 열어 보세요. 비전 AI는 재고 추적, 선반 모니터링, 대기열 관리, 더욱 심층적인 고객 인사이트를 지원합니다.
자세히 알아보기
의료 분야의 컴퓨터 비전

의료 분야의 컴퓨터 비전

Ultralytics YOLO 모델로 의료 솔루션을 구축하세요. 의료 분야의 비전 AI는 의료 영상 판독을 가속화하고, 진단을 개선하며, 환자 모니터링을 지원합니다.
자세히 알아보기
제조 분야의 컴퓨터 비전

제조 분야의 컴퓨터 비전

Ultralytics YOLO 모델로 제조 공정을 최적화하세요. 비전 AI는 품질 관리, 결함 탐지, PPE 규정 준수, 조립 라인 자동화를 지원합니다.
자세히 알아보기
자동차 분야의 컴퓨터 비전

자동차 분야의 컴퓨터 비전

Ultralytics YOLO 모델로 자동차 분야에 컴퓨터 비전을 적용하세요. 비전 AI는 도로 안전, 운전자 지원, 차량 자동화를 개선해 더 스마트한 도로를 구현합니다.
자세히 알아보기
농업 분야의 컴퓨터 비전

농업 분야의 컴퓨터 비전

Ultralytics YOLO 모델로 스마트 농업에 비전 AI를 도입하세요. 작물 모니터링, 가축 추적, 정밀 농업을 지원하여 더 높은 수확량과 더 스마트한 농업을 실현합니다.
자세히 알아보기

함께 AI의 미래를 만들어 가세요!

머신러닝의 미래와 함께 여정을 시작하세요