⚗️ PoC Panoramax: détection/classification de panneaux

L’API de floutage utilisée par les instances IGN et OSM-FR détecte visages et plaques, mais aussi les panneaux de signalisation car ils font partie de l’entraînement du modèle.

Lorsque des panneaux sont détectés dans les photos, ils sont conservés avec les métadonnées de l’image.

Je viens de faire le décompte et on en est à plus de 300.000 panneaux détectés dans les images.

Voici une carte umap qui permet de visualiser un échantillon d’un peu plus d’un millier de ces détections :

https://umap.openstreetmap.fr/fr/map/poc-panoramax-detection-de-panneaux_929898#11/44.0363/4.9596

image

Prochaine étape… la classification pour reconnaître le type de panneau !

1 Like

Yeah !!! :star_struck: :star_struck:
C’est top ca !

A priori ce sont les panneaux habituellement traités par Mapillary par exemple.
Leurs géométrie et contenu sont fixe.
Je serais intéressé par les paneaux de tailles et contenus variables comme les panneaux d’entrée et sortie d’agglomération EB10 et EB20.
si il le faut, je veux bien annoté pour entraîner l’algorithme.

En regardant dans ma zone de contribution habitelle, j’ai vu un faux positif, celui centré sur ⚗️ PoC Panoramax : détection de panneaux - uMap
C’est le “o” de bowling qui est une boule de bowling.

En tout cas ça montre que du prémachage automatique de photos est faisable. Ensuite a voir qui veut se saisir de quoi ? :smiley:

Avant de courrir il faut apprendre à marcher :wink:

Voici le résultat d’un premier entraînement sur 25 types de panneaux :

C’est une matrice de confusion qui indique le taux d’erreur constaté sur un échantillon d’images conservées pour valider le modèle.

C’est quasi parfait !

L’entraînement a pris moins d’une heure sur mon laptop (avec son GPU RTX3060) et chaque classification se fait ensuite en 10ms environ.

Exemple, sur des panneaux bien déformés ou flous…

00a4bfb9a67fba7e27b69ed1e8e9391beb23fa767c0901164f054f4e95be58fa

00a8709913a318dc9819f51ae63916887260dc854aa5a4a6a7f440e118d46b72

00ada0958b6845d971ecc4f9bec1b3f74420b1b6e3ddd0b9101acf58f300d6f2

Bon exemple qui est ensuite classifié à 87% comme un “Stop”.

ff7c4aa092e991965b3dbf14dcf7a3fdcf46c235d8387f6c869fe5b2371842d4

Il faudra voir quelle limite de confiance mettre pour la classification. Vu que sur les autres exemples, on a des taux de 100%, je pense qu’une limite très haute peut être utilisée.

Bref, tout ceci est fort prometteur :slight_smile:

Afin de réduire encore le taux de confiance de ces faux positifs, ne serait-il pas interressant de rajouter les photos avec ces faux positifs dans les lots de photos annotées ? Vu qu’elles sont floutées sur les visages et plaques, il faudrait peut-être faire une nouvelle catégorie pour l’entraînement des algorythmes.

Il y a deux choses à ajuster:

  • la limite de confiance lors de la détection des panneaux, pour éviter les faux positifs… sans trop faire monter les faux négatifs
  • la limite de confiance dans la classification

La première est sûrement trop basse car les panneaux sont quand même très standardisés et on n’a pas la même diversité que sur les visages.

Pour limiter les faux positifs, j’ai créé quelques classes “poubelle”…

Une pour le verso des panneaux…
image

Une pour les logos…

Désormais, les images annotées couvrent 189 classes, y compris pour des panneaux non officiels… le fameux “interdit aux camping-car”, mais aussi “interdit aux chiens” ou “tenir les chiens en laisse” ou “danger hélicoptère”… mais aussi le C2 (Hôpital) qui n’existe plus officiellement depuis plus de 20 ans !

J’ai progressé en utilisant le premier modèle entraîné pour faire une pré-annotation ce qui permet de se concentrer sur les erreurs et les remettre dans la bonne classe pour l’entraînement suivant ce qui aide le modèle à se concentrer un peu plus sur les cas complexes.

A chaque cycle, environ 30000 images sont pré-annotées en utilisant le modèle précédent, puis passées en revue manuellement pour chaque classe, exemple :

Les panneaux avec un taux de confiance de 100% sont mis à part, les autres sont triés par taux de confiance pour faciliter le tri manuel. Au fur et à mesure des cycles entraînement/annotation, le taux de confiance monte et il y a de moins en moins de tri à faire.

J’ai aussi ajouté les nouvelles classes au fur et à mesure que les panneaux correspondants s’accumulaient en faux positifs.

J’ai maintenant environ 50000 images annotées, une sélection est faite pour chaque classe d’au maximum 250 images pour l’entraînement et de 50 images pour validation en priorisant celles avec un faible taux de confiance obtenu sur les étapes précédentes. Certaines classes ont très peu d’images annotées car ce sont des panneaux peu fréquents.

Cela fait en tout environ 25000 images sélectionnées pour l’entraînement (j’en suis au huitième).

Le modèle arrive désormais à correctement séparer les A15a1 des A15a2 ou les A9a des A9b… ce qui a pris du temps, mais est très bon signe !

Petite antisèche :

Quelques panonceaux ont aussi leur classe, le M9v pour les DSC, les M12 et c’est un autre challenge, voire peut être un entraînement spécifique à faire.

2 Likes

A15b mon amour …

Plus sérieusement, merci Christian, c’est très intéressant de voir les progrès.
As-tu déjà envisagé de détecter les enseignes plutôt que de les mettre dans une catégorie poubelle ? On a commencé un listing sur https://nsi.guide et rajouté les logos sur les pages wikidata indiquées.

1 Like

C’est faisable, mais une nouvelle annotation sera nécessaire pour la passe de détection car là il n’y a que les enseignes prises pour des panneaux qui sont détectées. Le logo McDo n’est par exemple pas détecté.

1 Like

Petit complément “perfs”…

La classification d’un panneau prend environ 5ms, je viens de le faire sur plus de 14000 images en 71s sur mon laptop équipé d’une GTX3060 :slight_smile:

A suivre aussi sur…

Si je comprend bien, il existe deux étapes :

Je n’ai pas trouvé où ça se passe pour “vérifier” les erreurs sur les panneaux

L’annotation dans label-studio s’est limitée à la phase détection, qui consiste à repérer dans une images les panneaux (ainsi que les visages et plaques d’immatriculation.

Lorsqu’une image est envoyée à l’API de floutage, celle-ci en profite pour conserver les parties de photos où des panneaux sont détectés et on y recopie les métadonnées de la photo d’origine (date, heure, position, direction, etc).

Je pense qu’on doit avoir un demi million de panneaux ainsi collectés et j’ai puisé là dedans pour la deuxième annotation qui ne se fait pas avec label-studio car son interface est peu adaptée pour la classification avec un grand nombre de classes (ou alors je m’y suis mal pris).

C’est donc à la main que j’ai commencé l’annotation en rangeant les images de panneaux dans des dossiers pour le premier entraînement, puis utilisé les premiers modèles entraînés pour pre-ranger, etc, etc…

Je suis allé faire un petit tour sur la carte et je suis étonné du petit nombre de panneaux qui y figurent le long d’un tronçon (1/10 en ville).
Ce test a-t-il été réalisé sur un échantillon restreint de panneaux à reconnaître ?
Comment est faite la géolocalisation ? J’ai des écarts de plus de 30 m, il est parfois difficile de retrouver où le panneau se situe réellement (en regardant dans streetview). Exemple carrefour Charles De Gaulle à Orange. J’ai également trouvé un faux positif : l’horloge au dessus du panneau publicitaire
image.

Oui, c’est un échantillon pas l’intégralité sur les photos de la zone.

Comment participer à label studio ?

Voici quelques exemple de détection :slight_smile:

Une jolie Zone 30

Une limite de hauteur… qui semble manquer dans OSM

2 Likes