Extended Kalman Filter (EKF)
Explore le filtre de Kalman étendu (EKF) pour l’estimation d’état non linéaire. Découvre comment il améliore le suivi des objets dans Ultralytics YOLO26 et les systèmes autonomes.
Le filtre de Kalman étendu (EKF) est un algorithme mathématique robuste conçu pour estimer l'état d'un système dynamique au comportement non linéaire. Alors que le filtre de Kalman (KF) standard fournit une solution optimale pour les systèmes se déplaçant en ligne droite ou suivant des équations linéaires simples, la physique du monde réel est rarement aussi prévisible. La plupart des objets physiques, comme un drone luttant contre la résistance du vent ou un bras robotique tournant sur plusieurs axes, suivent des trajectoires courbes ou complexes. L'EKF gère cette complexité en créant une approximation linéaire du système à un instant donné, ce qui permet aux ingénieurs et aux data scientists d'appliquer des techniques de filtrage efficaces à des tâches de modélisation prédictive, même lorsque les mécanismes sous-jacents sont complexes.
Mécanisme et linéarisation#
Pour gérer les dynamiques complexes, l'EKF utilise un processus mathématique appelé linéarisation, qui consiste essentiellement à estimer la pente d'une fonction au point de fonctionnement actuel. Cela implique souvent de calculer une matrice jacobienne afin d'approximer la manière dont le système évolue sur de courts intervalles. L'algorithme fonctionne selon une boucle récursive composée de deux phases principales : la prédiction et la mise à jour. Lors de la phase de prédiction, le filtre projette l'état actuel dans le futur à l'aide d'un modèle physique du mouvement. Lors de la phase de mise à jour, il corrige cette projection à l'aide de nouvelles données, souvent bruitées, provenant de capteurs tels que des gyroscopes ou des accéléromètres. Ce cycle continu de prédiction et de correction contribue à réduire le bruit des données et fournit une estimation plus lisse et plus précise de l'état réel qu'un capteur unique ne pourrait le faire à lui seul.
Pertinence en vision par ordinateur#
Dans le domaine de la vision par ordinateur (CV), le filtre de Kalman étendu joue un rôle essentiel dans la conservation de l'identité des objets en mouvement. Les modèles avancés comme YOLO26 sont particulièrement performants pour détecter des objets dans des images individuelles, mais ils ne comprennent pas intrinsèquement la continuité du mouvement au fil du temps. En intégrant un EKF ou une logique similaire, un système de suivi d'objets peut prédire l'emplacement d'une boîte englobante dans l'image vidéo suivante en fonction de la vitesse et de la trajectoire précédentes de l'objet. Cette approche est particulièrement utile pour gérer les occultations, lorsqu'un objet est temporairement masqué ; le filtre maintient la « piste » en vie en estimant la position de l'objet jusqu'à ce qu'il redevienne visible, une technique essentielle pour un suivi multi-objets (MOT) robuste.
Applications concrètes#
La polyvalence de l'EKF en fait une technologie fondamentale dans diverses industries de haute technologie où l'apprentissage automatique (ML) converge avec le matériel physique :
- Véhicules autonomes : Les voitures autonomes s'appuient sur la fusion de capteurs pour se déplacer en toute sécurité. Un EKF fusionne des flux de données distincts provenant de systèmes de positionnement global (GPS), du LiDAR et de radars afin de calculer la position et l'orientation précises du véhicule sur la route, en compensant les pertes de signal ou le bruit environnemental.
- Robotique : Les robots opérant dans des environnements non structurés utilisent des algorithmes de localisation et cartographie simultanées (SLAM). L'EKF aide un robot à construire la carte d'une pièce tout en déterminant simultanément sa propre position sur cette carte, en corrigeant le patinage des roues ou la dérive des capteurs afin de garantir des déplacements précis.
- Estimation de pose : Dans des applications comme la réalité virtuelle ou l'analyse sportive, le suivi des articulations humaines nécessite de lisser les points clés instables. Les algorithmes EKF affinent la sortie des modèles de deep learning afin de créer des animations de mouvements fluides et naturelles pour les systèmes de reconnaissance d'actions.
Comparaison avec des concepts associés#
Il est utile de distinguer le filtre de Kalman étendu des méthodes de filtrage associées afin de comprendre son utilité spécifique :
- EKF vs. filtre de Kalman (KF) : Le KF standard est mathématiquement optimal et moins coûteux en calcul, mais il échoue lorsque les systèmes sont fortement non linéaires. L'EKF étend le KF aux systèmes non linéaires grâce à une approximation.
- EKF vs. filtre particulaire : Un filtre particulaire gère très bien la non-linéarité et le bruit non gaussien en utilisant de nombreux échantillons aléatoires (particules) pour représenter les probabilités. Cependant, il nécessite une puissance de calcul nettement supérieure, ce qui fait de l'EKF un choix privilégié pour les systèmes embarqués soumis à des contraintes de ressources.
- EKF vs. filtre de Kalman unscented (UKF) : Le filtre de Kalman unscented offre un compromis en utilisant des points d'échantillonnage déterministes pour gérer la non-linéarité sans le calcul différentiel complexe requis par l'EKF, bien que l'EKF reste une norme du secteur pour de nombreux systèmes de contrôle.
Exemple d’implémentation#
Dans le package ultralytics, les algorithmes de suivi utilisent en interne des concepts de filtrage de Kalman pour lisser les trajectoires et associer les détections entre les images. Même si tu ne codes pas manuellement les calculs matriciels de l'EKF lorsque tu utilises des outils de haut niveau, comprendre qu'il alimente le tracker t'aide à configurer les paramètres de l'Ultralytics Platform.
Voici comment initialiser un tracker avec un modèle YOLO, qui utilise ces techniques de filtrage pour estimer l'état :
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()}")








