Extended Kalman Filter (EKF)
Explora el Filtro de Kalman Extendido (EKF) para la estimación de estados no lineales. Aprende cómo mejora el seguimiento de objetos en Ultralytics YOLO26 y en sistemas autónomos.
El Filtro de Kalman extendido (EKF) es un algoritmo matemático robusto diseñado para estimar el estado de un sistema dinámico que se comporta de manera no lineal. Aunque el Filtro de Kalman (KF) estándar proporciona una solución óptima para sistemas que se mueven en línea recta o siguen ecuaciones lineales simples, la física del mundo real rara vez es tan predecible. La mayoría de los objetos físicos, como un dron que lucha contra la resistencia del viento o un brazo robótico que gira sobre múltiples ejes, siguen trayectorias curvas o complejas. El EKF aborda esta complejidad creando una aproximación lineal del sistema en un punto específico en el tiempo, permitiendo a los ingenieros y científicos de datos aplicar técnicas de filtrado eficientes a tareas de modelado predictivo, incluso cuando los mecanismos subyacentes son complicados.
Link to this sectionMecanismo y linealización#
Para manejar dinámicas complejas, el EKF emplea un proceso matemático llamado linealización, que esencialmente estima la pendiente de una función en el punto de operación actual. Esto suele implicar el cálculo de una matriz jacobiana para aproximar cómo cambia el sistema en intervalos cortos. El algoritmo opera en un bucle recursivo que consta de dos fases principales: predicción y actualización. En la fase de predicción, el filtro proyecta el estado actual hacia adelante utilizando un modelo físico de movimiento. En la fase de actualización, corrige esta proyección usando datos nuevos, a menudo ruidosos, de sensores como giroscopios o acelerómetros. Este ciclo continuo de predicción y corrección ayuda a reducir el ruido de datos y proporciona una estimación más fluida y precisa del estado real de la que cualquier sensor individual podría ofrecer por sí solo.
Link to this sectionRelevancia en visión artificial#
En el ámbito de la visión artificial (CV), el Filtro de Kalman extendido desempeña un papel fundamental en el mantenimiento de la identidad de elementos en movimiento. Modelos avanzados como YOLO26 son excepcionales detectando objetos en fotogramas individuales, pero no entienden intrínsecamente la continuidad del movimiento a lo largo del tiempo. Al integrar un EKF o una lógica similar, un sistema de seguimiento de objetos puede predecir dónde debería aparecer un bbox en el siguiente fotograma de vídeo basándose en su velocidad y trayectoria previas. Esto es particularmente útil para manejar oclusiones, donde un objeto queda temporalmente oculto a la vista; el filtro mantiene el "seguimiento" vivo estimando la posición del objeto hasta que vuelve a ser visible, una técnica esencial para un seguimiento de múltiples objetos (MOT) robusto.
Link to this sectionAplicaciones en el mundo real#
La versatilidad del EKF lo convierte en una tecnología fundamental en diversas industrias de alta tecnología donde el aprendizaje automático (ML) se cruza con el hardware físico:
- Vehículos autónomos: Los coches autónomos dependen de la fusión de sensores para navegar de forma segura. Un EKF combina flujos de datos distintos de los Sistemas de Posicionamiento Global (GPS), LiDAR y radar para calcular la posición y orientación precisas del vehículo en la carretera, compensando caídas de señal o ruido ambiental.
- Robótica: Los robots que operan en entornos no estructurados utilizan algoritmos de Localización y Mapeo Simultáneos (SLAM). El EKF ayuda a un robot a construir un mapa de una habitación mientras determina simultáneamente su propia ubicación dentro de ese mapa, corrigiendo el deslizamiento de las ruedas o la deriva de los sensores para garantizar un movimiento preciso.
- Estimación de pose: En aplicaciones como la realidad virtual o el análisis deportivo, el seguimiento de articulaciones humanas requiere suavizar los puntos clave inestables. Los algoritmos EKF refinan la salida de los modelos de aprendizaje profundo para crear animaciones de movimiento fluidas y naturales para sistemas de reconocimiento de acciones.
Link to this sectionComparación con conceptos relacionados#
Es útil distinguir el Filtro de Kalman extendido de otros métodos de filtrado relacionados para comprender su utilidad específica:
- EKF frente a Filtro de Kalman (KF): El KF estándar es matemáticamente óptimo y computacionalmente más barato, pero falla cuando los sistemas son altamente no lineales. El EKF extiende el KF para trabajar con sistemas no lineales mediante aproximación.
- EKF frente a Filtro de partículas: Un Filtro de partículas gestiona muy bien la no linealidad y el ruido no gaussiano utilizando muchas muestras aleatorias (partículas) para representar la probabilidad. Sin embargo, requiere mucha más potencia computacional, lo que convierte al EKF en una opción preferida para sistemas embebidos con recursos limitados.
- EKF frente a Filtro de Kalman sin aroma (UKF): El Filtro de Kalman sin aroma ofrece un punto intermedio, utilizando puntos de muestreo deterministas para manejar la no linealidad sin el cálculo complejo requerido por el EKF, aunque el EKF sigue siendo un estándar de la industria para muchos sistemas de control.
Link to this sectionEjemplo de implementación#
En el paquete ultralytics, los algoritmos de seguimiento utilizan conceptos de filtrado de Kalman internamente para suavizar trayectorias y asociar detecciones entre fotogramas. Aunque no codifiques manualmente los cálculos matriciales del EKF al usar herramientas de alto nivel, comprender que este potencia el rastreador ayuda a configurar los parámetros para la Plataforma Ultralytics.
A continuación te mostramos cómo iniciar un rastreador con un modelo YOLO, el cual utiliza estas técnicas de filtrado para la estimación de estado:
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()}")





