Floutage panoramax... annotation collaborative?

Le floutage est un élément essentiel car indispensable du projet Panoramax.

Geovisio utilise des briques existantes, des modèles déjà entraînés, mais les résultats sont soit longs en calcul, soit en dessous du niveau espéré.

Une des causes vient des modèles qui sont soit trop généralistes, soit entraînés sur des images assez différentes provenant par exemple de prises de vues faites un peu loin de chez nous. Je pense en particulier au jeu d’entraînement “cityscape” qui est basé sur des prises de vues plutôt urbaines et toutes en Allemagne à ce que j’ai compris.

Dans l’idéal il nous faut un jeu modèle entraîné sur des images qui correspondent plus à celles que nous allons collecté, des vues urbaines de villes françaises et des vues plus rurales.

J’ai commencé à explorer quelques outils permettant d’annoter des images soit localement, soit en ligne et de façon collaborative.

Pour l’instant Label Studio semble un bon compromis car il permet de partager la tâche d’annotation, il est opensource et déployable “on premise” (important pour ne pas transmettre à des tiers des images non floutées contenant donc visages et plaques d’immatriculation).

Voici une vue de l’interface d’annotation accessible avec un navigateur web :

Pour chaque image, il suffit de choisir la classe de l’objet qu’on va annoter (dans notre cas “face” ou"plate"), puis de tracer un rectangle autour, et ainsi de suite. Ctrl-ENTER pour enregistrer et passer à l’image suivante.

Cela va relativement vite, j’en ai fait 200 lors de mon test en un peu plus d’une heure et en découvrant l’outil et ses raccourcis.

Pour avoir une grande quantité d’images annotées, qui serait partant pour participer à une annotation collaborative pour se répartir cette tâche un peu ingrate mais des plus utile ?

Je peux déployer Label Studio chez moi et n’autoriser que l’ouverture de compte sur invitation pour que les images ne soient pas publiques.

Avec mes premières annotations, je vais maintenant tester un premier apprentissage en me basant sur YOLOv8 qui peut servir de modèle pré-entraîné car dès qu’un modèle même imparfait est entraîné, il peut ensuite être utilisé par Label Studio pour proposer des annotations et donc être encore plus efficace.

YOLO peut aussi être utilisé pour sélectionner des images où figurent des personnes ou des véhicules, car la sélection des images prend elle aussi du temps.

PS: YOLO pour You Only Look Once

1 Like

Vu que ça fait longtemps qu’on en parle, je ne peux pas ne pas participer à ça :smile:

Par contre, une bonne annotation étant vraiment, vraiment importante pour obtenir de bon résultats par la suite, il faut bien s’informer sur les bonnes pratiques.

Exemple : J’ai un jeune arbre qui cache le centre d’une plaque minéralogique.

  • Est ce que j’encadre toute la plaque avec le morceau de tronc ?
  • est-ce que je n’annote rien ?
  • Est-ce que je créé 2 zones ?
  • Autre solution ?

Et hop… c’est ouvert ici pour le moment:

https://label-studio.cquest.org/ qui tourne sur ma station de travail, pour bénéficier à terme de sa carte graphique et de ses TPU.

Lien d’invitation à demander par message privé.


Oui, il faut être bien clair sur la façon d’annoter.

Après avoir fait cette série, il semble nécessaire de savoir jusqu’où on va:

  • plaques lointaines, quasi illisibles ou déjà illisibles
  • pareil pour les visages
  • plaques partiellement masquées (coupées en deux dont on ne voit que le début ou la fin)
  • visages de personnes de profil voir de dos

Je n’ai pas assez d’expérience pour déterminer si cela joue beaucoup sur la qualité du modèle.

Différents options sont possibles:

  • des classes différentes pour les différents cas, ensuite on pourra toujours les regrouper ou pas
    • plate
    • plate_partial
    • face
    • face_partial

Je pense aussi qu’il serait judicieux de créer des jeux d’entraînement différents en fonction du type de prise de vue: sphérique 360, grand angle 170-190° et classiques

Un modèle adapté à ces trois grandes catégories de prises de vues permettra sûrement d’obtenir de meilleurs résultats car on pourra analyser les images en fonction de leur catégorie récupérée dans les données EXIF.

Je vais essayer de joindre quelqu’un qui pourrait nous donner quelques infos sur les bonnes pratiques, ou bien qui pourrait nous rediriger vers d’autres personnes.

Il y a un outil à suivre, qui est dédié à la vérification des annotations, et qui pourrait nous être utile un jour :

des explications : Labeling tools are great, but what about quality checks?

Il me semble qu’il faut une grande variété d’images, pour s’adapter à des conditions de prise de vues variables entre la lumière, les cadrages, les variations d’un smartphone/caméra à l’autre

Quelques exemples visuels de bonne/mauvaise pratique:

Pour la diversité des images, je suis en train de replonger dans 10 ans de photo-mapping !

Petit tuto pour annoter correctement:

J’ai fait un essai d’entraînement de modèle avec seulement 300 images annotées.
1h20 de calcul environ sur mon petit GPU (GTX1060).

Les résultats sont très prometteurs !



Le premier chiffre est la classe de l’objet, le nombre qui suit la confiance dans la détection.

1 Like

C’est pas mal pour se détendre le soir après le travail (mais sans enfant) :grin:. On avait déjà fait ce genre de travail pour OpenSolarMap pour la détection des pentes de toits.

On doit pouvoir gamifier ça un peu plus…

Voici par exemple ce que détecte le modèle entraîné cette nuit en un peu moins de 4h sur une série d’image complètement nouvelle provenant en partie d’autres smartphones (par exemple un vieil Aquaris) :

Un petite interface pour confirmer les détections permettrait de les ajouter comme nouvelles données d’entraînement. Le problème ce sont les non détections.

Je suis étonné que les visages avec masque soient bien détectés alors qu’il n’y en a quasiment aucun dans les annotations utilisées pour cet entraînement.

On voit que des textes sont en faux positifs pour les plaques, alors qu’il y a moins de FP sur les visages.

Les panneaux

Si j’ai ajouté les panneaux routiers en plus des visages et plaques à flouter, c’est pour pouvoir ensuite faire de la classification, c’est à dire reconnaître de quel type de panneau il s’agit. C’est pour cela qu’il faut les annoter un à un, bien séparément quand ils sont empilés :wink:

Je suis convaincu que les aller-retour crowdsourcing - IA peuvent donner d’excellents résultats.

3 Likes

Il y a un passage après pour dire dans les panneaux que la pancarte de la banque postale n’est pas un panneau ?

Non justement, je ne pense pas qu’il y ait un moyen de déclarer les faux positifs, c’est vraiment en augmentant le nombre d’exemples corrects à l’entraînement qu’on fait converger le modèle.

Je viens d’ajouter un lot de nouvelle images, il y en a donc 500 environ en stock à annoter !

Il me semble que si, via une boucle de rétroaction.

Petite question, dans label-studio, comment je filtre pour avoir les images non encore annotées ?
Dans https://label-studio.cquest.org/projects/2, je vois bien qu’il reste environ 500 images non traitées, mais je n’arrive pas à les voir…
Passer après @gendy54 c’est moins efficace que s’occuper d’images non encore analysées :slight_smile:

Sur le projet, tu cliques sur les 3 points en haut à droite puis sur label.

1 Like

“Lien d’invitation à demander par message privé” : je n’ai pas accès à cette fonctionnalité (je ne suis probablement pas assez gradé), Christian : peux-tu m’ouvrir cet accès et/ou me donner plus de droits dans ce forum ?

Réponse de sa part (Nicolas Audebert, Computer Vision and Machine Learning researcher) :

Dans l’ensemble vous êtes plutôt sur la bonne piste (usage de Label Studio, pré-annotation avec un modèle déjà entraîné).

Ce qui manque, c’est ce qu’on veut annoter précisément. La question « J’ai un jeune arbre qui cache le centre d’une plaque minéralogique, qu’est-ce que j’annote ? » est légitime mais la réponse n’est pas une réponse de bonne pratique en machine learning, tout dépend de votre cahier des charges. Qu’est-ce qu’on attend du système ? Est-ce qu’on accepte de flouter au-delà de la plaque ?
Si oui, alors peu importe : on trace des rectangles qui entourent la plaque, même derrière une occlusion (c’est de l’annotation « amodale », on annote même ce qu’on ne voit pas).

Si non, alors il faut créer des zones séparées. Mais là on touche aux limites de la détection par rectangles englobants, parce qu’on risque rapidement d’avoir des formes biscornues.

Moi, je privilégierais plutôt une annotation par polygone pour faire de la segmentation (plutôt que la détection). L’inconvénient, c’est que c’est plus long à annoter.

In fine, ce qu’il faudra aussi c’est reboucler pour annoter les faux positifs ou les faux négatifs, histoire d’augmenter la taille du jeu d’entraînement avec de plus en plus de cas difficiles.

Il aura peu-être un peu de dispo fin avril pour en discuter plus précisément.

Je trouve que le floutage fait par Geovisio des silhouettes est bien plus pertinent que le floutage des seuls visages. Il est très facile de reconnaître une personne à partir de ses vêtements ou d’un sac par exemple. Est-ce qu’on pourrait plutôt continuer sur ce choix, qui me semble important ?

Attention également à prendre en compte les personnes dont la peau n’est pas blanche, le floutage fait par GSW est parfois complètement foireux pour ces personnes.

Je pense que c’est un choix à faire par instance et que cela dépend aussi de la pertinence de l’algo et des ressources que ça mobilise.

Du point de vue légal, la CNIL se contente du floutage des visages et plaques d’immatriculation.

L’algo de segmentation est plus ou moins pertinent, j’ai vu des personnes dont le corps est flouté, mais pas le visage ou très partiellement. Le mieux peut ici être l’ennemi du bien !

Pour les ressources, il faut penser “à l’échelle” et je ne suis pas sûr que le calcul soit similaire entre détection d’objets et segmentation… c’est à tester !

Pour cela, il faut de la diversité dans les données d’entraînement.

J’ai repris un paquet de photos datant de 2020-2021 pour avoir des visages avec masque en plus des visages sans. Il va falloir reboucler avec les faux négatifs pour compléter l’entraînement entre autre sur la couleur de peau, mais aussi avec ou sans chapeau, casquette, casque (vélo, moto), etc…

En entraînant notre propre modèle, on peut affiner tout ça contrairement à un modèle prêt à l’usage.

J’ai repéré des données d’entraînement déjà annotées pour les visages que je pense ajouter au prochain entraînement.