Eine kurze Einführung in den SORT-Tracking-Algorithmus und sein Python-Implementierungsbeispiel

WBOY
Freigeben: 2024-01-23 23:18:05
nach vorne
1287 Leute haben es durchsucht

Eine kurze Einführung in den SORT-Tracking-Algorithmus und sein Python-Implementierungsbeispiel

SORT (Simple Online and Realtime Tracking) ist ein auf dem Kalman-Filter basierender Zielverfolgungsalgorithmus, der sich bewegende Ziele in Echtzeitszenen zuverlässig verfolgen kann. Der SORT-Algorithmus wurde ursprünglich 2016 von Alex Bewley und anderen vorgeschlagen. Er wird häufig in verschiedenen Anwendungen im Bereich Computer Vision eingesetzt, wie z. B. Videoüberwachung, autonomes Fahren, Roboternavigation usw. Der

SORT-Algorithmus basiert hauptsächlich auf zwei Kernideen: der Kalman-Filterung und dem ungarischen Algorithmus. Der Kalman-Filter ist ein Algorithmus zur Schätzung des Systemzustands. Er kann das dynamische Modell des Systems und Sensormessungen verwenden, um den Systemzustand vorherzusagen und zu aktualisieren und so die Genauigkeit der Zustandsschätzung zu verbessern. Der ungarische Algorithmus ist ein Algorithmus zur Lösung des Problems der maximalen Gewichtsanpassung bei zweiteiligen Diagrammen. Er kann die maximale Gewichtsanpassung bei gegebenen zweiteiligen Diagrammen ermitteln.

Die Hauptschritte des SORT-Algorithmus sind wie folgt:

Zielerkennung: Verwenden Sie Zielerkennungsalgorithmen (wie YOLO, SSD usw.), um Zielinformationen im aktuellen Frame zu extrahieren.

Zustandsvorhersage: Verwenden Sie für jedes verfolgte Ziel den Kalman-Filter, um seinen Zustand vorherzusagen.

Datenzuordnung: Basierend auf dem Vorhersagestatus und den Zielinformationen im aktuellen Frame verwenden Sie den ungarischen Algorithmus, um eine Datenzuordnung durchzuführen und das Ziel zu finden, das jedem verfolgten Ziel im aktuellen Frame entspricht.

Statusaktualisierung: Verwenden Sie für jedes verfolgte Ziel den Kalman-Filter, um seinen Status zu aktualisieren.

Zielausgabe: Geben Sie die Statusinformationen und Tracking-Ergebnisse jedes verfolgten Ziels aus.

In der Computer Vision kann der SORT-Algorithmus auf verschiedene Zielverfolgungsszenarien angewendet werden. Bei der Videoüberwachung kann der SORT-Algorithmus beispielsweise sich bewegende Ziele in Echtzeit verfolgen und so ungewöhnliches Verhalten am Tatort erkennen und frühzeitig warnen. Im Bereich des autonomen Fahrens kann der SORT-Algorithmus andere Fahrzeuge, Fußgänger und andere Verkehrsteilnehmer verfolgen, um eine autonome Navigation und Hindernisvermeidung von Fahrzeugen zu erreichen. Bei der Roboternavigation kann der SORT-Algorithmus sich bewegende Ziele verfolgen, um eine autonome Navigation und Hindernisvermeidung des Roboters zu erreichen.

Das Folgende ist ein einfacher Beispielcode, der in Python implementiert ist:

#python
import numpy as np
from filterpy.kalman import KalmanFilter
from scipy.optimize import linear_sum_assignment

class Track:

def init(self,prediction,track_id,track_lifetime):
    self.prediction=np.atleast_2d(prediction)
    self.track_id=track_id
    self.track_lifetime=track_lifetime
    self.age=0
    self.total_visible_count=1
    self.consecutive_invisible_count=0

def predict(self, kf):
    self.prediction = kf.predict()
    self.age += 1

def update(self, detection, kf):
    self.prediction = kf.update(detection)
    self.total_visible_count += 1
    self.consecutive_invisible_count = 0

def mark_missed(self):
    self.consecutive_invisible_count += 1

def is_dead(self):
    return self.consecutive_invisible_count >= self.track_lifetime

class Tracker:

def init(self,track_lifetime,detection_variance,process_variance):
    self.next_track_id=0
    self.tracks=[]
    self.track_lifetime=track_lifetime
    self.detection_variance=detection_variance
    self.process_variance=process_variance
    self.kf=KalmanFilter(dim_x=4,dim_z=2)
    self.kf.F=np.array([[1,0,1,0],
                    [0,1,0,1],
                    [0,0,1,0],
                    [0,0,0,1]])
    self.kf.H=np.array([[1,0,0,0],
                    [0,1,0,0]])
    self.kf.R=np.array([[self.detection_variance,0],
                    [0,self.detection_variance]])
    self.kf.Q=np.array([[self.process_variance,0,0,0],
                    [0,self.process_variance,0,0],
                    [0,0,self.process_variance,0],
                    [0,0,0,self.process_variance]])

def update(self, detections):
    # predict track positions using Kalman filter
    for track in self.tracks:
        track.predict(self.kf)

    # associate detections with tracks using Hungarian algorithm
    if len(detections) > 0:
        num_tracks = len(self.tracks)
        num_detections = len(detections)
        cost_matrix = np.zeros((num_tracks, num_detections))
        for i, track in enumerate(self.tracks):
            for j, detection in enumerate(detections):
                diff = track.prediction - detection
                distance = np.sqrt(diff[0,0]**2 + diff[0,1]**2)
                cost_matrix[i,j] = distance
        row_indices, col_indices = linear_sum_assignment(cost_matrix)
        unassigned_tracks = set(range(num_tracks)) - set(row_indices)
        unassigned_detections = set(range(num_detections)) - set(col_indices)
        for i, j in zip(row_indices, col_indices):
            self.tracks[i].update(detections[j], self.kf)
        for i in unassigned_tracks:
            self.tracks[i].mark_missed()
        for j in unassigned_detections:
            new_track = Track(detections[j], self.next_track_id, self.track_lifetime)
            self.tracks.append(new_track)
            self.next_track_id += 1

    # remove dead tracks
    self.tracks = [track for track in self.tracks if not track.is_dead()]

    # return list of track positions
    return [track.prediction.tolist()[0] for track in self.tracks]
Nach dem Login kopieren

Der obige Code implementiert einen einfachen SORT-Tracking-Algorithmus, der den Kalman-Filter verwendet, um die Zielposition und -geschwindigkeit vorherzusagen und zu schätzen, und dann den ungarischen Algorithmus zur Ausführung verwendet Verfolgung des Ziels und schließlich Bestimmung, ob das Ziel tot ist, basierend auf der Anzahl der aufeinanderfolgenden Unsichtbarkeiten des Ziels, und Entfernung des toten Ziels. Der obige Code implementiert einen einfachen SORT-Verfolgungsalgorithmus, der den Kalman-Filter verwendet, um die Position und Geschwindigkeit des Ziels vorherzusagen und zu schätzen, dann den ungarischen Algorithmus zum Zuordnen des Ziels zu verwenden und schließlich zu beurteilen, ob das Ziel tot ist, und den Tod anhand der Zahl zu entfernen von aufeinanderfolgenden unsichtbaren Zeiten des Ziels.

Neben dem SORT-Algorithmus gibt es viele weitere Zielverfolgungsalgorithmen, wie z. B. Kalman-Filter, Partikelfilter, Multizielverfolgung usw. Jeder Algorithmus hat seine anwendbaren Szenarien, Vor- und Nachteile. In praktischen Anwendungen ist es notwendig, basierend auf spezifischen Szenarien und Anforderungen einen geeigneten Algorithmus zur Zielverfolgung auszuwählen.

Das obige ist der detaillierte Inhalt vonEine kurze Einführung in den SORT-Tracking-Algorithmus und sein Python-Implementierungsbeispiel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:163.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage