TRACE · v0.2

La plupart des systèmes de suivi s’arrêtent à “où”. Celui-ci continue.

Le suivi dans le monde réel n’est jamais continu. Un véhicule passe derrière un bâtiment, une personne sort du champ de la caméra. La plupart des systèmes traitent ça comme la fin de la piste. Pas TRACE : il tient une piste comme une probabilité que quelque chose soit encore là, plutôt que comme un oui ou un non, si bien que la piste s’estompe pendant le trou au lieu de s’y arrêter, et peut être reprise de l’autre côté.

Rien dans le cœur ne sait ce qu’il suit. Caméras, navires, palettes, animaux et joueurs sont le même problème avec un profil différent. Les chiffres MOT17 et MOT20 ci-dessous sont la précision de suivi multi-objets (MOTA), le chiffre unique que le domaine emploie pour dire si un système de suivi s’est bien débrouillé.

LangageC++23
MOT17 MOTA53.0%
MOT20 MOTA62.5%
Boîtes évaluées1.47M
Dernier envoirécemment
Ce que le nom veut dire
TTrajectographie — où se trouve chaque chose, et à quel point nous en sommes sûrs
RRéidentification — la même chose, après l’avoir perdue
AAssociation — quelle observation appartient à quelle piste
CConvergence — qui est sur le point de rencontrer qui
EÉvénements — un comportement qui mérite l’attention de quelqu’un
En clair

Ce que c’est, en une minute

Le problème

Les capteurs ratent des choses. Une caméra n’attrape pas tous ceux qui passent devant elle, un navire peut couper son transpondeur, un couloir peut n’avoir aucune caméra du tout. La plupart des systèmes de suivi lisent “pas vu” comme “pas là”, donc quand la chose réapparaît, elle est consignée comme quelque chose de nouveau. Où est-elle passée, qui a-t-elle rencontré, est-ce normal pour elle — plus rien de tout cela ne peut recevoir de réponse.

La solution

TRACE garde pour chaque piste un nombre disant à quel point il est probable que la chose soit encore là. Une observation manquée abaisse ce nombre et élargit la zone où elle pourrait se trouver ; elle n’efface rien. La piste continue sur la prédiction, son incertitude grandissant honnêtement, et quand quelque chose réapparaît, le moteur décide si c’est le même. Les deux démonstrations ici vous laissent pousser jusqu’à ce qu’il se trompe de décision.

À qui cela s’adresse

Quiconque suit des choses à travers plus d’un capteur, avec des trous entre eux : un site dont les caméras ne couvrent pas tous les couloirs, ou une surveillance maritime où un navire peut couper son transpondeur en pleine traversée. Le cœur ne sait pas ce qu’il suit — caméras, navires, palettes, animaux et joueurs sont le même problème avec un profil différent. Il prend des détections en entrée ; les produire est le travail de quelqu’un d’autre.

Un trou dans la couverture, ce n’est pas la même chose qu’une absence. Le reste de cette page, c’est l’ingénierie : le moteur lui-même qui tourne dans votre navigateur sur deux scénarios, les chiffres des benchmarks, ce qu’il coûte par piste, et une liste franche de ce qu’il ne fait pas.
Le problème

Une piste supprimée à la première image manquée n’a jamais été une piste

Les capteurs ratent des choses. Une caméra a une probabilité de détection, pas une garantie ; un navire peut couper son transpondeur ; un couloir peut n’avoir aucune caméra du tout. Dès que la couverture tombe, un système de suivi qui confond “pas vu” et “pas là” perd l’identité, et quand l’entité réapparaît elle en reçoit une nouvelle. Toute question en aval — où est-elle passée, qui a-t-elle rencontré, est-ce normal pour elle — est désormais sans réponse.

TRACE sépare deux choses que la plupart des systèmes de suivi confondent. Chaque piste porte r, la probabilité qu’elle existe tout court, tenue à l’écart de sa position. Un balayage manqué abaisse r et élargit l’estimation de position ; il ne supprime rien. La piste se poursuit par extrapolation, et son incertitude croît honnêtement pendant ce temps.

C’est ce que les deux démonstrations ci-dessous vous montrent. Le cercle en pointillés, c’est le moteur qui dit il est quelque part là-dedans et j’en suis moins sûr de seconde en seconde — ce qui est une chose utile à s’entendre dire, et ce qu’une piste supprimée ne peut pas vous dire.

Existence

Bernoulli, pas booléen

Un système de suivi à mélange de Poisson multi-Bernoulli (PMBM) au-dessus d’un filtre à 320 particules. L’existence est une probabilité qui décroît avec les détections manquées et se rétablit sur preuve, si bien qu’une occlusion coûte de la confiance plutôt que l’identité.

Possibilité

Un second avis sur les preuves

À côté de la probabilité tourne une existence possibiliste qui suit la qualité des preuves plutôt que leur quantité. Quand les deux divergent, c’est que beaucoup de détections faibles ont été blanchies en fausse certitude.

Le moteur lui-même

Un parc de caméras, avec des couloirs que personne ne regarde

Un labyrinthe est un substitut bon marché à un vrai parc de caméras, et il vous donne toutes les propriétés qui rendent le suivi multi-caméras difficile : les murs imposent des trajets non linéaires, chaque panneau coloré est une caméra, donc franchir une frontière est un vrai transfert, et les panneaux hachurés sont désactivés — des couloirs aveugles où le moteur doit tenir l’identité sur rien du tout et la reprendre de l’autre côté.

trace::Engine — WebAssembly

chargement…
Vérité — sujet Vérité — autres Piste, observée Piste, extrapolée à l’aveugle Caméra éteinte

Évalué face à la vérité terrain

Détection
—
De ce que les caméras ont donné
—
Erreur moyenne
—
Changements d’identité
—
Fausses pistes
—
Balayage médian
—

Ce balayage

Détection jusqu’ici
—
Erreur jusqu’ici
—

Événements déclenchés —

Prochaine rencontre prévue —

De ce que les caméras ont donné est le dénominateur honnête : aucun système de suivi ne peut rapporter une entité qu’aucun capteur n’a détectée, donc un taux de détection brut mélange les échecs du système de suivi et ceux du parc. Au-dessus de 100 %, cela veut dire que le moteur a tenu des entités à travers des balayages où rien ne les voyait. Éteignez les caméras et regardez-le grimper.

trace::Engine issu de libtrace_core.a, la même bibliothèque que lient les outils natifs — —. L’exécution entière est calculée d’un coup puis rejouée, donc l’animation n’est pas la vitesse du moteur ; le temps de balayage médian à côté, si.
Comment ça marche

Cinq étapes, et un rapport

T · A

Trajectographie et association

Un système de suivi PMBM avec existence de Bernoulli au-dessus d’un filtre d’Ornstein–Uhlenbeck mixte à 320 particules — la vitesse suit un processus OU dont le régime (à pied, en véhicule, à l’arrêt) est lui-même une chaîne de Markov, et c’est ce que veut dire le “mixte”. Échantillonnage de Gibbs pour l’affectation un-à-un sur 14 passes, puis une fusion des doublons. L’association tourne par capteur, parce que l’exclusivité est un fait qui concerne un capteur et non le monde — deux caméras qui se recouvrent et rapportent toutes deux une seule personne, c’est une corroboration, pas deux personnes. L’imposer globalement coûtait 2,08 fausses pistes par balayage ; par capteur, c’est 0,08.

R

Réidentification par la routine

Une piste dormante est réacquise grâce à ses habitudes de vie — un mélange gaussien par entité sur l’heure, x et y. Les descripteurs d’apparence sont pris en charge et délibérément désactivés sur les benchmarks publics, parce qu’un descripteur oracle parfait n’y déplace pas du tout le score : 88 % de la pénalité, ce sont des détections manquées, auxquelles l’apparence ne peut rien.

C

Trois prédicteurs de convergence, empilés

L’interception géométrique est exacte pour deux entités qui marchent l’une vers l’autre et inutile si l’une manœuvre. L’extrapolation du taux de rapprochement gère un trajet courbe. La prédiction croisée par habitudes de vie est la seule qui puisse se déclencher pendant que les deux parties sont encore immobiles. Elles échouent dans des circonstances différentes, donc les trois tournent et la plus confiante l’emporte.

E

Huit comportements, interchangeables à chaud

BRUSH_PASS, SDR_PATTERN, DEAD_DROP, PARALLEL_ROUTE, MODE_TRANSITION, LOITER, COVER_STOP, CHOKEPOINT. Le score de menace fusionne huit dimensions de preuve par un Beta–Monte-Carlo, et le rapport porte le détail plutôt que le chiffre unique.

Le moteur lui-même

Un navire coupe son transpondeur

Couverture du système d’identification automatique (AIS) par satellite sur un bassin océanique. Cinq navires sont en transit ; l’un d’eux coupe son transpondeur en pleine traversée et revient plus tard. Rien ne le signale entre-temps — aucun capteur, aucune détection, aucune preuve d’aucune sorte.

Regardez ce que le moteur en fait. Au premier balayage manqué, l’estimation de position passe de quelques centaines de mètres à environ douze kilomètres et la piste se poursuit sur la seule prédiction. Quelques balayages plus tard, elle est mise au repos dans un réservoir de pistes dormantes plutôt que supprimée, et quand le navire refait surface, le moteur doit décider s’il s’agit de quelque chose de nouveau ou de quelque chose qu’il connaît déjà.

Allongez la période de silence et il se trompe sur cette décision. Cinq balayages de silence et l’identité survit ; au-delà d’une dizaine, non, et le navire revient comme une nouvelle piste. C’est le résultat honnête et il vaut plus qu’une démonstration réglée pour gagner à tous les coups — la raison est sous les commandes.

dark-vessel — WebAssembly

chargement…
Suspect, en émission Suspect, au silence Autre trafic La propre piste du suspect Autres pistes

Le suspect, à l’instant

État selon le moteur
—

Sur toute la traversée

Après réapparition
—
Extrapolation la plus large
—
Trou avant son retour
—
Détection jusqu’ici
—

Pourquoi cela échoue. La réidentification fonctionne ici par habitudes de vie — un mélange par entité sur l’heure et la position, qui demande si cette nouvelle observation correspond à quelque chose dont le moteur connaît déjà la routine. Un navire sur un seul transit rectiligne n’a pas de routine. Il a été vu allant dans un sens, une fois. Donc au-delà de quelques balayages, il ne reste que la prédiction de mouvement, et à douze nœuds avec des balayages horaires, cette incertitude dépasse tout ce qui est utile en moins d’un jour.

Le même mécanisme est décisif là où une routine à apprendre est bel et bien présente, ce que montre le labyrinthe ci-dessus. Une limite dont la cause est énoncée vaut plus qu’une capacité qui n’en a aucune, et celle-ci figure dans la propre liste du dépôt.

Le même scénario dark-vessel que trace_sim exécute nativement, avec le même profil, le même capteur et le même bassin.
Preuves

Rejoué face à de vraies détections, pas seulement face à son propre simulateur

Les séquences MOTChallenge — de vraies détections, produites par de vrais détecteurs sur de vraies vidéos — sont les seuls chiffres ici que le propre simulateur de TRACE n’a pas produits.

BenchmarkBoîtesMOTARécupération du plafond du détecteur
MOT17 train, 21 séquences336,89153.0%108.2%
MOT20 train, 4 séquences, 62–226 personnes/image1,134,61462.5%114.7%
Chiffres sur la partition d’entraînement uniquement. Ceux-ci sont rejoués et évalués en local. Rien n’a été soumis au serveur d’évaluation de MOTChallenge, ce qu’exigerait un chiffre comparable au classement public. Le plafond est ce qu’obtiendrait un système de suivi parfait en répétant chaque détection qu’on lui a donnée ; le battre est tout le travail, et cela se fait en extrapolant à travers les images que le détecteur a ratées.
Coût

Pratiquement linéaire en taille de foule

PistesMédiane ms/balayageµs par piste
101.7135
12026.6152
27072.1159
400127.5159

Un cœur de processeur, build Release, Advanced Vector Extensions (AVX-512). Le coût croît en gros comme n1.17 et le suivi seul reste plat à 135–159 µs par piste, de dix pistes à quatre cents — à lire comme “la constante compte et l’exposant non”.

C’était n1.82 jusqu’à ce que le détecteur de convergence cesse de reconstruire la prévision d’habitudes de vie de chaque piste une fois par paire. Cela a rapporté un facteur vingt sur la constante et pas un meilleur exposant — le filtre d’index spatial ajouté au passage avait un rayon plus large que la scène, donc il renvoyait toutes les paires et ne faisait rien. Borner chaque paire par ses deux propres vitesses a fait passer ce détecteur de 56 % du moteur à 44 % et l’exposant à quasi linéaire.

À 400 pistes simultanées, cela fait environ 8 balayages par seconde sur un cœur de processeur : bien pour un parc de caméras à 1 Hz, pas pour 25 fps sans partitionner entre plusieurs workers. La page le dit parce que le benchmark le dit.

Limites honnêtes

Ce qu’il ne fait pas

Pas de détecteur, et pas de modèle de réidentification

TRACE consomme des détections. Les produire est le travail de quelqu’un d’autre.

Une estimation de vitesse a un plancher

Il lui faut un produit vitesse × maintien de cap bien au-dessus du bruit de position. En dessous d’un rapport d’environ 5, ce n’est pas une estimation, et l’extrapolation ne vaut que ce que vaut cette estimation. Une cible vraiment sinueuse vue par un capteur grossier n’a pas de vitesse mesurable — une contrainte de modélisation plutôt qu’un défaut, mais une chose à vérifier sur un profil avant d’affirmer quoi que ce soit sur l’extrapolation.

La disponibilité des capteurs est déduite, pas connue

Un trou de couverture est deviné à partir du seul fait que quelque chose ait été rapporté ou non. Un déploiement réel sait quelles caméras sont en panne et n’a actuellement aucun moyen de le dire.

Pas de journalisation d’audit, de contrôle d’accès ni de politique de rétention

Plusieurs des choses vers lesquelles on peut braquer ceci sont des capacités de surveillance de masse. Quiconque le déploie contre des personnes doit construire cet échafaudage autour, et il n’est délibérément pas fourni par défaut.

Le chemin CUDA est un échafaudage

src/cuda/kernels.cu existe et rien dans le moteur ne l’appelle. Les noyaux n’ont jamais tourné. Traitez-le comme une branche inachevée plutôt que comme un backend — le dépôt dit la même chose.

À source ouverte

La licence publique générale GNU Affero, avec une licence commerciale à côté

AGPL-3.0+, et les mêmes conditions que tout le reste ici : lisez-le, faites-le tourner, vérifiez-le. Si l’AGPL ne convient pas à ce que vous voulez construire, il existe une licence commerciale par paliers.