Learn how the Extended Kalman Filter (EKF) handles non-linear systems for accurate object tracking and sensor fusion. Enhance your [YOLO26](https://docs.ultralytics.com/models/yolo26/) projects on the [Ultralytics Platform](https://platform.ultralytics.com).
확장 칼만 필터(EKF) 는 비선형적으로 동작하는 동적 시스템의 상태를 추정하기 위해 설계된 강력한 수학적 알고리즘입니다. 표준 칼만 필터(KF) 는 직선으로 이동하거나 단순한 선형 방정식을 따르는 시스템에 대해 최적의 해를 제공하지만, 실제 물리 현상은 그처럼 예측 가능한 경우가 거의 없습니다. 대부분의 물리적 대상, 예를 들어 바람 저항과 싸우는 드론이나 다중 축으로 회전하는 로봇 팔은 곡선형 또는 복잡한 경로를 따릅니다. EKF는 특정 시점에서 시스템의 선형 근사치를 생성함으로써 이러한 복잡성을 해결하여, 기본 역학이 복잡한 경우에도 엔지니어와 데이터 과학자가 예측 모델링 작업에 효율적인 필터링 기법을 적용할 수 있게 합니다.
복잡한 역학을 처리하기 위해 EKF는 선형화라는 수학적 과정을 활용하는데, 이는 본질적으로 현재 작동 지점에서 함수의 기울기를 추정합니다. 이는 종종 시스템이 짧은 간격 동안 어떻게 변화하는지 근사하기 위해 야코비 행렬을 계산하는 것을 수반합니다. 이 알고리즘은 예측과 업데이트라는 두 가지 주요 단계로 구성된 재귀적 루프에서 작동합니다. 예측 단계에서 필터는 운동의 물리적 모델을 사용하여 현재 상태를 앞으로 투영합니다. 업데이트 단계에서는 자이로스코프나 가속도계 같은 센서에서 얻은 새롭고 종종 잡음이 섞인 데이터를 활용하여 이 예측값을 수정합니다. 이러한 예측과 수정을 반복하는 지속적인 순환은 데이터 잡음을 줄이고, 단일 센서가 단독으로 제공할 수 있는 것보다 더 부드럽고 정확한 실제 상태 추정값을 제공합니다.
컴퓨터 비전(CV) 분야에서 확장 칼만 필터(EKF)는 움직이는 물체의 동일성을 유지하는 데 핵심적인 역할을 합니다. YOLO26과 같은 고급 모델은 단일 프레임 내 객체 탐지에 탁월하지만, 시간에 따른 움직임의 연속성을 본질적으로 이해하지 못합니다. EKF 또는 유사한 논리를 통합함으로써 객체 추적 시스템은 이전 속도와 궤적을 기반으로 다음 비디오 프레임에서 바운딩 박스가 나타날 위치를 예측할 수 있습니다. 이는 물체가 일시적으로 시야에서 차단되는 가림 현상 처리 시 특히 유용합니다. 필터는 물체가 다시 보일 때까지 위치를 추정하여 "track"를 유지하며, 이는 견고한 다중 물체 추적(MOT)에 필수적인 기술입니다.
EKF의 다용도성은 기계 학습(ML) 이 물리적 하드웨어와 교차하는 다양한 첨단 산업 분야에서 핵심 기술로 자리매김하게 합니다:
확장 칼만 필터의 특정한 유용성을 이해하기 위해서는 관련 필터링 방법과 구별하는 것이 도움이 됩니다:
에서 ultralytics 패키지, 추적 알고리즘은 내부적으로 칼만 필터링 개념을 활용하여 궤적을 평활화하고 프레임 간 탐지 결과를 연관시킵니다. 고급 도구를 사용할 때는 EKF 행렬 수학을 직접 코딩하지 않더라도, 이 기술이 추적기를 구동한다는 점을 이해하면 매개변수 설정에 도움이 됩니다.
Ultralytics 플랫폼.
YOLO 사용하여 트래커를 시작하는 방법은 다음과 같습니다. 이 모델은 상태 추정 시 다음과 같은 필터링 기법을 활용합니다:
from ultralytics import YOLO
# Load the latest YOLO26 model (nano version for speed)
model = YOLO("yolo26n.pt")
# Track objects in a video source
# Trackers like BoT-SORT or ByteTrack use Kalman filtering logic internally
results = model.track(source="https://ultralytics.com/images/bus.jpg", tracker="botsort.yaml")
# Print the ID of the tracked objects
for r in results:
if r.boxes.id is not None:
print(f"Track IDs: {r.boxes.id.numpy()}")