Yolo Vision Shenzhen
Shenzhen
Iscriviti ora
Glossario

Filtro di Kalman esteso (EKF)

Esplora il filtro di Kalman esteso (EKF) per la stima dello stato non lineare. Scopri come migliora il tracciamento degli oggetti in Ultralytics e nei sistemi autonomi.

Il filtro di Kalman esteso (EKF) è un algoritmo matematico robusto progettato per stimare lo stato di un sistema dinamico che si comporta in modo non lineare. Mentre il filtro di Kalman standard (KF) fornisce una soluzione ottimale per i sistemi che si muovono in linea retta o seguono semplici equazioni lineari, la fisica del mondo reale raramente è così prevedibile. La maggior parte degli oggetti fisici, come un drone che combatte la resistenza del vento o un braccio robotico che ruota su più assi, segue percorsi curvi o complessi. L'EKF affronta questa complessità creando un'approssimazione lineare del sistema in un punto specifico nel tempo, consentendo agli ingegneri e ai data scientist di applicare tecniche di filtraggio efficienti alle attività di modellazione predittiva anche quando la meccanica sottostante è complicata.

Meccanismo e linearizzazione

Per gestire dinamiche complesse, l'EKF impiega un processo matematico chiamato linearizzazione, che essenzialmente stima la pendenza di una funzione nel punto operativo corrente. Ciò spesso comporta il calcolo di una matrice jacobiana per approssimare il modo in cui il sistema cambia in brevi intervalli. L'algoritmo opera in un ciclo ricorsivo composto da due fasi principali: previsione e aggiornamento. Nella fase di previsione, il filtro proietta lo stato corrente in avanti utilizzando un modello fisico di movimento. Nella fase di aggiornamento, corregge questa proiezione utilizzando nuovi dati, spesso rumorosi, provenienti da sensori come giroscopi o accelerometri. Questo ciclo continuo di previsione e correzione aiuta a ridurre il rumore dei dati e fornisce una stima più fluida e accurata dello stato reale rispetto a quella che potrebbe fornire un singolo sensore da solo.

Rilevanza nella Computer Vision

Nel campo della visione artificiale (CV), il filtro di Kalman esteso svolge un ruolo fondamentale nel mantenere l'identità degli oggetti in movimento. Modelli avanzati come YOLO26 sono eccezionali nel rilevare oggetti in singoli fotogrammi, ma non comprendono intrinsecamente la continuità del movimento nel tempo. Integrando un EKF o una logica simile, un sistema di tracciamento degli oggetti può prevedere dove dovrebbe apparire un riquadro di delimitazione nel fotogramma video successivo in base alla sua velocità e traiettoria precedenti. Ciò è particolarmente utile per gestire le occlusioni, in cui un oggetto è temporaneamente nascosto alla vista; il filtro mantiene attiva la "track" stimando la posizione dell'oggetto fino a quando non è nuovamente visibile, una tecnica essenziale per un robusto tracciamento multi-oggetto (MOT).

Applicazioni nel mondo reale

La versatilità dell'EKF lo rende una tecnologia fondamentale in vari settori high-tech in cui l'apprendimento automatico (ML) si interseca con l'hardware fisico .

  • Veicoli autonomi: Le auto a guida autonoma si affidano alla fusione dei sensori per navigare in sicurezza. Un EKF unisce flussi di dati distinti provenienti da sistemi di posizionamento globale (GPS), LiDAR e radar per calcolare la posizione precisa del veicolo e il suo orientamento sulla strada, compensando le interruzioni del segnale o il rumore ambientale.
  • Robotica: i robot che operano in ambienti non strutturati utilizzano algoritmi di localizzazione e mappatura simultanea (SLAM) . L'EKF aiuta un robot a costruire una mappa di una stanza determinando contemporaneamente la propria posizione all'interno di tale mappa, correggendo lo slittamento delle ruote o la deriva dei sensori per garantire un movimento accurato.
  • Stima della posa: in applicazioni come la realtà virtuale o l'analisi sportiva, il tracciamento delle articolazioni umane richiede la levigatura dei punti chiave instabili. Gli algoritmi EKF perfezionano l'output dei modelli di deep learning per creare animazioni fluide e naturali per i sistemi di riconoscimento delle azioni.

Confronto con concetti correlati

È utile distinguere il filtro di Kalman esteso dai metodi di filtraggio correlati per comprenderne l'utilità specifica :

  • EKF vs. Filtro di Kalman (KF): Il KF standard è matematicamente ottimale e computazionalmente più economico, ma fallisce quando i sistemi sono altamente non lineari. L' EKF estende il KF per funzionare con sistemi non lineari tramite approssimazione.
  • EKF vs. Filtro particellare: un filtro particellare gestisce molto bene la non linearità e il rumore non gaussiano utilizzando molti campioni casuali (particelle) per rappresentare la probabilità. Tuttavia, richiede una potenza di calcolo significativamente maggiore , rendendo l'EKF la scelta preferita per i sistemi embedded con risorse limitate.
  • EKF vs. Unscented Kalman Filter (UKF): L' Unscented Kalman Filter offre una via di mezzo, utilizzando punti di campionamento deterministici per gestire la non linearità senza il complesso calcolo richiesto dall' EKF, sebbene quest'ultimo rimanga uno standard industriale per molti sistemi di controllo.

Esempio di implementazione

Nel ultralytics pacchetto, gli algoritmi di tracciamento utilizzano internamente i concetti di filtraggio di Kalman per uniformare le traiettorie e associare i rilevamenti tra i fotogrammi. Sebbene non sia necessario codificare manualmente la matrice matematica EKF quando si utilizzano strumenti di alto livello, comprendere che essa alimenta il tracciatore aiuta a configurare i parametri per il Piattaforma Ultralytics.

Ecco come avviare un tracker con un YOLO , che utilizza queste tecniche di filtraggio per la stima dello stato:

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()}")

Unitevi alla comunità di Ultralytics

Entra nel futuro dell'AI. Connettiti, collabora e cresci con innovatori globali

Iscriviti ora