Point Tracking
Отслеживание точек позволяет следить за выбранными точками в видео и определять положение каждой точки в каждом кадре, а также её видимость. Методы, модели и сферы применения.
Отслеживание точек — задача компьютерного зрения, в которой отдельные точки прослеживаются на протяжении видео: по заданной точке на одном кадре, например пятну на рукаве или углу окна, трекер оценивает положение той же физической точки на каждом другом кадре и определяет, видна ли она. В новых исследованиях эту задачу называют отслеживанием любой точки (TAP), поскольку в качестве запроса можно использовать любой пиксель, а не только заранее определённую ключевую точку. Отслеживание точек позволяет следить за разреженным набором точек на протяжении многих кадров, в том числе при перекрытиях. Этим оно отличается от отслеживания объектов, при котором целые объекты отслеживаются с помощью ограничивающих рамок с идентификаторами, и от оптического потока, оценивающего движение каждого пикселя между двумя последовательными кадрами.
Как работает отслеживание точек#
Классический трекер Канаде — Лукаса — Томаси (KLT) выбирает углы с выраженной текстурой в двух направлениях — «хорошие признаки для отслеживания» Ши — Томаси — и ищет каждый из них на следующем кадре, вычисляя небольшое смещение, которое лучше всего совмещает окружающий его фрагмент. Для обработки более крупных перемещений используется пирамида изображений. 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 сравнивает только последовательные кадры, поэтому небольшие ошибки накапливаются; кроме того, он не учитывает перекрытия. Точка на полу, закрытая прохожим, может сместиться на самого прохожего и продолжить отслеживаться.
Обучаемые трекеры точек#
Трекеры на основе глубокого обучения анализируют сразу множество кадров и предсказывают положение и флаг видимости для каждого кадра. В 2022 году бенчмарк TAP-Vid формализовал эту задачу на реальных видео с траекториями точек, размеченными вручную. PIPs (2022) уточняет траекторию точки в окнах кадров, чтобы отслеживать её при кратковременных перекрытиях, а TAPIR (2023) сначала сопоставляет признаки заданной точки с каждым кадром, а затем уточняет траекторию с учётом временного контекста. CoTracker от Meta совместно отслеживает множество точек с помощью трансформера, поэтому точки одного объекта помогают друг другу, когда одна из них скрыта. Размеченные траектории на реальных видео встречаются редко, поэтому CoTracker3 (2024) обучается на синтетических видео, а затем — на реальных видео, псевдоразмеченных другими трекерами. Авторы сообщают о лучших результатах, чем у предыдущих трекеров, обученных на в 1 000 раз большем объёме данных.
Примеры применения в реальных условиях#
В режиме track Ultralytics отслеживание точек используется для компенсации движения камеры при отслеживании нескольких объектов: трекеры TrackTrack по умолчанию и BoT-SORT выбирают до 400 углов на кадр, отслеживают их с помощью пирамидального потока Лукаса — Канаде, оценивают поворот, масштаб и перенос с помощью RANSAC (gmc_method: sparseOptFlow), а затем корректируют предсказанную рамку каждого трека перед сопоставлением с новыми детекциями YOLO26.
- Визуальные эффекты: При совмещении виртуальных объектов точки отслеживаются в сцене, чтобы вставленная графика оставалась привязанной к поверхностям, а стабилизация компенсирует движение камеры, выявленное по отслеживаемым точкам.
- Трёхмерная реконструкция: Методы восстановления структуры по движению и визуальная SLAM триангулируют точки, отслеживаемые на последовательных кадрах, чтобы восстановить положения камеры и геометрию сцены.
- Обучение роботов: Моделирование траекторий произвольных точек предсказывает перемещение точек в сцене во время выполнения задачи и преобразует полученные траектории в действия робота. В среднем этот подход превосходит базовые методы предварительного обучения на видео примерно на 80% более чем в 130 задачах.










