Tuto : détection d'objets avec YOLO, Panoramax et OSM

Bonjour à tous,

Petit message pour annoncer la publication d’un tutoriel “faire de la détection d’objets avec YOLO, Panoramax et OSM” sur GitHub (en :fr: et :uk: ) :

Comme ça vous allez pouvoir faire chauffer vos cartes graphiques et détecter automatiquement toutes sortes d’objets à partir des photos Panoramax :smile: Le tuto se veut autant pas à pas que possible, mais n’hésitez pas à faire part de vos remarques ou suggestions pour qu’on l’améliore :wink:

Cordialement,

Adrien.

12 Likes

Ooooh mais que c’est bien ça, avec en plus le meilleur exemple du monde : les bornes incendie ! :wink:
Merci @PanierAvide pour ce tuto !

1 Like

merci pour ce tuto. C’est impressionnant !
Je ne sais pas si j’en aurais les compétences, mais j’espère pouvoir le tester à titre pro mais j’ai un peu peur de me faire taper sur les doigts si ça mange trop de ressources… à suivre.

J’ai eu le temps de lire le contenu en détail. C’est vraiment très bien détaillé et facile à prendre en main pour des non spécialistes du domaine ! Félicitations. Si je peux me permettre juste quelques remarques.

Dans le titre du document je rajouterai juste le mot OSM : détection automatique d’objets avec YOLO, OSM et Panoramax ! C’est juste qu’'on s’est fait de temps en temps la remarque qu’on oubliait souvent de mettre en valeur OSM et voilà une bonne occasion ! :wink:

Dans la partie Export du jeu de données, je trouve la partie sur les 80% / 20% d’images un poil confuse.
Je ne suis pas un spécialiste mais d’après mes maigres connaissances, il me semble que les images de validation doivent être différentes des images d’entraînement. Or là la manip proposée pour découper les images en 2 jeux pourrait pousser à ne pas faire correctement la séparation. Au lieu d’extraire 2 fois le zip pourquoi ne pas proposer de couper/coller les 20% du jeu de validation dans un nouveau répertoire hydrants_data_validation. Bon c’est vrai qu’il faudrait aussi faire créer par l’utilisateur les deux sous-répertoires pictures et labels… Mais il y aurait moins de souci que la séparation soit mal faite par ceux qui ne se poseraient pas trop de question. :thinking:

Pour finir je me posais une question en mode grosse feignasse. Vu que tu as fait l’exemple sur les poteaux incendie, j’imagine que tu as déjà créé un jeu d’entraînement pour eux ? Est-ce qu’on peut le trouver quelque part pour l’utiliser tel quel ? Oui je sais, je suis un peu gourmand ! :smirk:

2 Likes

Super tuto pour les néophytes.

Je pensais avoir un ordi avec carte graphique assez puissant pour entrainer un modèle pour les balises J3.

Mais j’ai message d’erreur de mémoire, dommage
Win10
i5-7300HQ CPU @ 2.50GHz
24 Go
NVIDIA GeForce GTX 1050 Ti

Ou alors, il y a une configuration à faire mais, il me faut de l’aide.

Pour l’usage de la mémoire, il y a notamment le paramètre batch=-1 qui peut éviter les dépassements de mémoire, @operon tu l’as bien utilisé ?

@Ptigrouick merci pour les remarques, je vais intégrer ça dans le dépôt :wink: Et le jeu d’entraînement des bornes incendies est ici, mais à retravailler car je n’ai pas remis toutes les annotations de toutes les catégories supplémentaires sur toutes les photos : SwissTransfer - Envoi sécurisé et gratuit de gros fichiers

Merci Adrien ! Pour le moment je ne vais pas trop avoir le temps de travailler sur ça, mais dès que je peux j’essaierai d’améliorer les annotations des autres catégories. Ce serait peut-être une bonne idée de partager un dépôt de jeux d’entraînement qu’on pourrait améliorer de façon collaborative ?

On peut sans doute réutiliser l’instance qu’avait monté @cquest au moment de l’entraînement du floutage ? En ouvrant un peu plus les accès étant donné que les photos ici sont déjà floutées, plus de soucis RGPD :smile:

1 Like

Ah oui en effet bien vu, j’y avais pas pensé !

4Go de VRAM pour ce modèle… ça peut être très juste en effet pour l’entrainement en détection.

Les deux paramètres qui vont beaucoup jouer sont:

  • batch comme déjà indiqué par Adrien
  • imgsz c’est à dire la taille maximale des images utilisées, si elles sont plus grande, elles sont d’abord réduite… ce qui du coup limite la qualité de l’entrainement, surtout sur des images à 360°.

Les modèles pré-entraînés l’ont été sur des images de 640 pixels de côté… les photos des Go Pro Max font 5760x2880.
Il faudrait envisager un prétraitement des photos annotées pour ne garder qu’une partie autour des objets annotés et pas l’image intégrale.
Ceci permettrait d’augmenter la valeur de batch ce qui semble avoir un effet très positif sur la qualité du modèle.

Sur les entrainements de classification sur les panneaux, je suis actuellement à un batch de 64 à 80 sur un GPU avec 6Go de VRAM, mais on parle ici d’images de 224 pixels de côté !

Adrien,

Il est indiqué dans le tuto :
" Notez également que le paramètre imgsz=2048 doit correspondre à la largeur réelle des images téléchargées. Dans le script find_pics.py que nous avons utilisé, toutes les images ont été téléchargées avec une largeur de 2048 pixels. N’oubliez pas de changer la valeur ici si vous avez une taille d’image différente."

Toutes images doivent avoir absolument la même largeur, ça ne peut pas être panaché ?
Si panachage possible on indique quelle valeur (la plus petite, la plus grande,…)

Olivier

C’est la taille maximale utilisée par YOLO, si les images sont plus larges ou plus hautes, elles seront réduites, sinon elle ne sont pas modifiées.

Ce paramètre a un impact sur la quantité de mémoire GPU nécessaire.

Merci @PanierAvide et @cquest ,

  • J’arrive à suivre toute la procédure avec mon ordi portable équipé de NVIDIA GeForce GTX 1050 Ti. Il faut comme indiqué, par cquest, modifier batch que j’ai mis à 5.

  • J’avais des arrêts suite à des erreurs de comptabilité de paramètres utilisables entre instance Osm/Ign et le metacatalogue. Le problème doit être réglé.

Il va me rester à exploiter le fichier JSON pour pour ouvrir les photos géolocalisées et compléter OSM avec les objets détectés.

Merci encore pour ce tuto.