Point Tracking
포인트 트래킹은 비디오에서 선택한 포인트를 추적하고 각 포인트의 프레임별 위치와 가시 여부를 알려줍니다. 방법, 모델 및 활용 사례를 살펴봅니다.
포인트 추적은 비디오에서 개별 포인트를 추적하는 컴퓨터 비전 작업입니다. 한 프레임의 질의 포인트(예: 소매의 한 지점이나 창문 모서리)가 주어지면 추적기는 모든 다른 프레임에서 같은 물리적 포인트가 나타나는 위치와 가시 여부를 추정합니다. 최근 연구에서는 사전 정의된 키포인트가 아니라 모든 픽셀을 질의 포인트로 사용할 수 있으므로 이를 임의 포인트 추적(TAP)이라고 부릅니다. 포인트 추적은 가림 현상 중에도 여러 프레임에 걸쳐 희소한 포인트 집합을 추적합니다. 이는 ID가 있는 바운딩 박스로 전체 객체를 추적하는 객체 추적, 그리고 연속된 두 프레임 사이 모든 픽셀의 움직임을 추정하는 광학 흐름과 구별됩니다.
포인트 추적 작동 방식#
고전적인 Kanade-Lucas-Tomasi(KLT) 추적기는 두 방향으로 강한 텍스처를 가진 코너, 즉 Shi-Tomasi의 “추적하기 좋은 특징”을 선택합니다. 그런 다음 이미지 피라미드를 사용해 더 큰 움직임을 처리하면서, 해당 패치와 가장 잘 정렬되는 작은 이동량을 계산해 다음 프레임에서 각 코너를 찾습니다. OpenCV는 두 단계를 모두 구현합니다.
import cv2
import numpy as np
# Read an overhead clip of people walking and pick 300 corners in its first frame
cap = cv2.VideoCapture("https://github.com/ultralytics/assets/releases/download/v0.0.0/solutions_ci_demo.mp4")
prev = cv2.cvtColor(cap.read()[1], cv2.COLOR_BGR2GRAY)
points = cv2.goodFeaturesToTrack(prev, maxCorners=300, qualityLevel=0.01, minDistance=5)
start = points.copy()
# Follow every point frame to frame with pyramidal Lucas-Kanade optical flow
while (frame := cap.read()[1]) is not None:
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
points, status, _ = cv2.calcOpticalFlowPyrLK(prev, gray, points, None)
found = status.ravel() == 1 # keep only the points found again
points, start, prev = points[found], start[found], gray
distance = np.linalg.norm(points - start, axis=-1)
print(f"{len(points)} of 300 points tracked to the last frame, median shift {np.median(distance):.1f} px")출력은 292 of 300 points tracked to the last frame, median shift 28.7 px입니다. 62프레임 클립을 추적하는 동안 포인트 8개를 놓쳤으며, 나머지 포인트는 시작 위치에서 중앙값 28.7픽셀 떨어진 곳에 도달했습니다. KLT는 연속된 프레임만 비교하므로 작은 오차가 누적되며, 가림 현상에 대한 개념이 없습니다. 지나가는 사람에게 가려진 바닥의 포인트는 사람 위로 미끄러질 수 있지만 계속 추적되는 것으로 보고됩니다.
학습 기반 포인트 추적기#
딥러닝 추적기는 여러 프레임을 한꺼번에 분석하여 모든 프레임의 위치와 가시성 플래그를 예측합니다. TAP-Vid 벤치마크는 사람이 직접 레이블링한 포인트 궤적이 포함된 실제 비디오를 사용해 2022년에 이 작업을 정의했습니다. PIPs(2022)는 짧은 가림 현상을 넘길 수 있도록 프레임 윈도우에 걸쳐 포인트 궤적을 개선합니다. TAPIR(2023)은 먼저 모든 프레임에서 질의 포인트의 특징을 매칭한 다음 시간적 맥락을 활용해 추적 결과를 개선합니다. Meta의 CoTracker는 트랜스포머를 사용해 여러 포인트를 함께 추적하므로, 같은 객체에 있는 포인트는 그중 하나가 가려졌을 때 서로를 보완합니다. 실제 비디오의 레이블링된 궤적은 드물기 때문에 CoTracker3(2024)은 합성 비디오로 학습한 뒤 다른 추적기가 의사 레이블링한 실제 비디오로 학습합니다. 데이터가 1,000배 더 많은 기존 추적기보다 나은 결과를 보고합니다.
실제 적용 사례#
Ultralytics 추적 모드는 다중 객체 추적에서 포인트 추적을 사용해 카메라 움직임을 상쇄합니다. 기본 TrackTrack 추적기와 BoT-SORT는 프레임마다 최대 400개의 코너를 선택하고 피라미드 Lucas-Kanade 흐름으로 추적합니다. 이어서 RANSAC(gmc_method: sparseOptFlow)으로 회전, 스케일, 이동을 추정한 다음 모든 트랙의 예측 박스를 이동시켜 새로운 YOLO26 감지 결과와 매칭합니다.










