Maison développement back-end Tutoriel Python Une brève introduction à l'algorithme de suivi SORT et à son exemple d'implémentation Python

Une brève introduction à l'algorithme de suivi SORT et à son exemple d'implémentation Python

Jan 23, 2024 pm 11:18 PM
机器学习 Notion d'algorithme

Une brève introduction à lalgorithme de suivi SORT et à son exemple dimplémentation Python

SORT (Simple Online and Realtime Tracking) est un algorithme de suivi de cible basé sur le filtre de Kalman, qui peut suivre de manière robuste des cibles en mouvement dans des scènes en temps réel. L'algorithme SORT a été initialement proposé par Alex Bewley et d'autres en 2016. Il a été largement utilisé dans diverses applications dans le domaine de la vision par ordinateur, telles que la vidéosurveillance, la conduite autonome, la navigation des robots, etc.

L'algorithme SORT est principalement basé sur deux idées principales : le filtrage de Kalman et l'algorithme hongrois. Le filtre de Kalman est un algorithme d'estimation de l'état du système. Il peut utiliser le modèle dynamique du système et les mesures des capteurs pour prédire et mettre à jour l'état du système, améliorant ainsi la précision de l'estimation de l'état. L'algorithme hongrois est un algorithme utilisé pour résoudre le problème de correspondance de poids maximum des graphes bipartis. Il peut trouver la correspondance de poids maximum étant donné un graphe biparti.

Les principales étapes de l'algorithme SORT sont les suivantes :

Détection de cible : utilisez des algorithmes de détection de cible (tels que YOLO, SSD, etc.) pour extraire les informations sur la cible dans la trame actuelle.

Prédiction d'état : pour chaque cible suivie, utilisez le filtre de Kalman pour prédire son état.

Association de données : en fonction de l'état de prédiction et des informations sur la cible dans la trame actuelle, utilisez l'algorithme hongrois pour effectuer une association de données afin de trouver la cible correspondant à chaque cible suivie dans la trame actuelle.

Mise à jour du statut : pour chaque cible suivie, utilisez le filtre Kalman pour mettre à jour son statut.

Sortie cible : affiche les informations d'état et les résultats de suivi de chaque cible suivie.

En vision par ordinateur, l'algorithme SORT peut être appliqué à divers scénarios de suivi de cible. Par exemple, en vidéosurveillance, l’algorithme SORT peut suivre des cibles en mouvement en temps réel, permettant ainsi la détection et l’alerte précoce des comportements anormaux sur la scène. Dans le domaine de la conduite autonome, l'algorithme SORT peut suivre d'autres véhicules, piétons et autres usagers de la route pour parvenir à une navigation autonome et éviter les obstacles des véhicules. Dans la navigation du robot, l'algorithme SORT peut suivre des cibles en mouvement pour parvenir à une navigation autonome et éviter les obstacles du robot.

Ce qui suit est un exemple de code simple implémenté en Python :

#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]
Copier après la connexion

Le code ci-dessus implémente un algorithme de suivi SORT simple, utilisant le filtre de Kalman pour prédire et estimer la position et la vitesse de la cible, puis utilisant l'algorithme hongrois pour effectuer suivi sur la cible. Association, et enfin déterminer si la cible est morte en fonction du nombre de fois invisibles consécutives de la cible et supprimer la cible morte. Le code ci-dessus implémente un algorithme de suivi SORT simple, utilisant le filtre de Kalman pour prédire et estimer la position et la vitesse de la cible, puis utilisant l'algorithme hongrois pour associer la cible, et enfin juger si la cible est morte et supprimer la mort en fonction du nombre. de temps invisibles consécutifs de la cible.

En plus de l'algorithme SORT, il existe de nombreux autres algorithmes de suivi de cible, tels que le filtre de Kalman, le filtre à particules, le suivi multi-cibles, etc. Chaque algorithme a ses scénarios applicables, ses avantages et ses inconvénients. Dans les applications pratiques, il est nécessaire de sélectionner un algorithme approprié pour le suivi de cible en fonction de scénarios et de besoins spécifiques.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

15 outils d'annotation d'images gratuits open source recommandés 15 outils d'annotation d'images gratuits open source recommandés Mar 28, 2024 pm 01:21 PM

15 outils d'annotation d'images gratuits open source recommandés

Cet article vous amènera à comprendre SHAP : explication du modèle pour l'apprentissage automatique Cet article vous amènera à comprendre SHAP : explication du modèle pour l'apprentissage automatique Jun 01, 2024 am 10:58 AM

Cet article vous amènera à comprendre SHAP : explication du modèle pour l'apprentissage automatique

Transparent! Une analyse approfondie des principes des principaux modèles de machine learning ! Transparent! Une analyse approfondie des principes des principaux modèles de machine learning ! Apr 12, 2024 pm 05:55 PM

Transparent! Une analyse approfondie des principes des principaux modèles de machine learning !

Identifier le surapprentissage et le sous-apprentissage grâce à des courbes d'apprentissage Identifier le surapprentissage et le sous-apprentissage grâce à des courbes d'apprentissage Apr 29, 2024 pm 06:50 PM

Identifier le surapprentissage et le sous-apprentissage grâce à des courbes d'apprentissage

L'évolution de l'intelligence artificielle dans l'exploration spatiale et l'ingénierie des établissements humains L'évolution de l'intelligence artificielle dans l'exploration spatiale et l'ingénierie des établissements humains Apr 29, 2024 pm 03:25 PM

L'évolution de l'intelligence artificielle dans l'exploration spatiale et l'ingénierie des établissements humains

Implémentation d'algorithmes d'apprentissage automatique en C++ : défis et solutions courants Implémentation d'algorithmes d'apprentissage automatique en C++ : défis et solutions courants Jun 03, 2024 pm 01:25 PM

Implémentation d'algorithmes d'apprentissage automatique en C++ : défis et solutions courants

IA explicable : Expliquer les modèles IA/ML complexes IA explicable : Expliquer les modèles IA/ML complexes Jun 03, 2024 pm 10:08 PM

IA explicable : Expliquer les modèles IA/ML complexes

Perspectives sur les tendances futures de la technologie Golang dans l'apprentissage automatique Perspectives sur les tendances futures de la technologie Golang dans l'apprentissage automatique May 08, 2024 am 10:15 AM

Perspectives sur les tendances futures de la technologie Golang dans l'apprentissage automatique

See all articles