Existe-t-il des techniques d'apprentissage automatique pour identifier les points sur les tracés / images?

8

J'ai des données pour la position latérale de chaque véhicule dans le temps et le numéro de voie comme indiqué dans ces 3 graphiques dans l'image et des exemples de données ci-dessous.

entrez la description de l'image ici

> a
   Frame.ID   xcoord Lane
1       452 27.39400    3
2       453 27.38331    3
3       454 27.42999    3
4       455 27.46512    3
5       456 27.49066    3

La position latérale varie dans le temps car un conducteur humain n'a pas un contrôle parfait sur la position du véhicule. La manœuvre de changement de voie commence lorsque la position latérale change radicalement et se termine lorsque la variation redevient «normale». Cela ne peut pas être identifié directement à partir des données. Je dois regarder manuellement le tracé de chaque véhicule pour déterminer les points de début et de fin de la manœuvre de changement de voie afin d'estimer la durée du changement de voie. Mais j'ai des milliers de véhicules dans l'ensemble de données. Pourriez-vous s'il vous plaît me diriger vers un algorithme d'analyse d'image / d'apprentissage automatique pertinent qui pourrait être formé pour identifier ces points? Je travaille dans R. Merci d'avance.

umair durrani
la source
Avez-vous essayé d'identifier mathématiquement ce que vous faites lorsque vous classifiez manuellement les manœuvres de changement de voie? Recherchez-vous globalement un changement par rapport à une période de gradient stable proche de zéro de la fonction de position de voie suivie d'une forte augmentation de l'amplitude du gradient, conduisant soit à une autre période de gradient proche de zéro, soit à la fin des données?
image_doctor
Avez-vous un certain nombre d'images originales à expérimenter?
image_doctor
L'axe et les échelles sont des légendes qui ne sont pas particulièrement cohérentes dans les images d'exemple, existe-t-il un moyen de standardiser les tracés, ou n'avez-vous aucun contrôle sur la création d'image?
image_doctor
1
Oui, je comprends que vous souhaitez identifier la fin de la manœuvre de changement de voie, mais si vous avez déjà la voie du véhicule à chaque fois, il n'est pas difficile de détecter ces changements. Je commencerai par définir quand il faut considérer que le véhicule ne change plus de voie (par exemple après un nombre de secondes donné sur la même voie). Vous pouvez utiliser une fenêtre pour détecter les segments dans lesquels le véhicule garde la même voie et les points au début et à la fin de ces segments décrivent votre "début de changement de voie" et "fin de changement de voie", respectivement.
Robert Smith
1
Génial. Je pensais que vous n'aviez pas d'origine et de voie cible, mais si vous les avez toujours, votre solution devrait fonctionner et utiliser en outre les données dont vous disposez déjà pour construire une définition du changement de voie.
Robert Smith,

Réponses:

2

Une dérivée première, en surface, le ferait. Cependant, les données que vous montrez contiennent beaucoup de bruit, nous avons donc besoin d'un moyen d'évaluer la dérivée première d'une manière quelque peu silencieuse, ou au moins dans un domaine de fréquence qui élimine la gigue et préserve le changement dérivé majeur.

L'analyse des ondelettes pourrait vous permettre d'atteindre cet objectif, surtout si vous utilisez la première dérivée d'un gaussien comme ondelette mère. R a quelques paquets d'ondelettes décents (voir r-project.org pour commencer). Si vous effectuez la transformation en ondelettes à de courtes échelles, cela identifiera les emplacements des bits de gigue dans la direction. Si vous le faites à des échelles plus grandes (c'est-à-dire une fréquence plus basse), vous pouvez probablement trouver uniquement les changements de voie et non les petites tremblements.

Si vous entraînez la transformation avec un ensemble de données raisonnable, vous devriez être en mesure d'identifier une échelle ou une plage d'échelles correspondant aux changements de voie. Mais notez que si vous ne comprenez pas cela, c'est quelque chose comme O (n ^ 2), essayez donc de réduire un peu la plage d'échelle pour gagner du temps de calcul.

CJ Sullivan
la source
1

On dirait que vous pouvez simplement rechercher pendant quelques secondes une dérivée plus élevée que le bruit. Il suffit de calculer la valeur absolue de la différence finie de chaque pas de temps au dernier (ou l'un des premiers) et d'attendre une série de valeurs élevées. C'est alors qu'un changement de voie se produit.

Tobias Würfl
la source
C'est en fait ce que j'ai fait en premier lieu. Le problème est que le seuil de différence et les valeurs "élevées" sont très subjectifs car le trajet de chaque véhicule est différent.
umair durrani
1

Essayez le package changepoint . Je l'ai utilisé dans un cas similaire.

L'analyse des points de changement est le nom statistique des méthodes qui détectent les changements entre deux "régimes". Une voiture restant dans une voie est une ligne avec un gradient 0 au milieu d'une voie. Vous pouvez facilement adapter un modèle statistique aux voitures roulant dans les voies. Une voiture qui change de voie roule sur une ligne dont la pente n'est pas nulle. Le modèle a changé. L'analyse des points de changement et le package de points de changement sont exactement ce dont vous avez besoin pour déterminer le point où un modèle passe de y=a' (straight and level) toy = a + bx` (en montant ou en descendant).

AlbertoD
la source
Il s'agit essentiellement d'une réponse de lien uniquement et a tendance à être découragée sur SE. Peut-être pourriez-vous expliquer ce que c'est et pourquoi c'est utile.
Sean Owen du
@AlbertoD Le langage archaïque de la vignette que vous avez partagée n'est pas utile pour quelqu'un de nouveau dans le concept de l'analyse des points de changement.
umair durrani
@AlbertoD Pourriez-vous donner un exemple de la façon dont vous avez utilisé le package cp dans votre cas?
umair durrani