Niveau
Moyen
Env.
Google Colab
Code
Python
Libs
cv2, darknet
Sources

YOLO (Partie 5) Créer son modèle avec YOLO : Préparation des données

Modèle personnalisé

Dans cet article et les trois prochains de cette série nous allons créer notre modèle personnalisé avec YOLO. L’idée est de faire apprendre à YOLO la détection de nouveaux objets. Nous allons donc devoir entraîner YOLO (avec le réseau de neurones darknet que nous avons déjà vu précédemment). Mais qui dit entraîner un modèle dit respecter d’une part un certain nombre de pré-requis (techniques, configuration et matériels) et d’autres part de posséder un jeu de données pour pouvoir faire apprendre correctement notre modèle.

Voici donc notre liste de courses pour pouvoir entrainer un modèle avec YOLO:

  • Google colab (sans quoi il vous faudra un ordinateur possédant un GPU)
  • Un jeu de données assez conséquent (env. 500-1000 images minimum, pour ce tuto je vais prendre un échantillon de 300 images seulement … nous verrons bien le résultat !)
  • De la patience ! car l’entrainement dure longtemps, pour ce tuto il a prit plus de 12 heures !
  • Nous aurons besoin d’un logiciel pour labelliser nos images. Il existe aujourd’hui pas mal d’outils tels que KILI Technology qui sont très intéressants, surtout dés lors que l’on doit collaborer dans cette tâche vitale qu’est la labellisation. Dans le cadre de ce tuto j’utiliserai LabelImg que vous pouvez télécharger ici.

Jeux de données

Pour ce qui est du jeu de données, je vais aller en prendre un ou plutôt un morceau de jeu de données public. SI comme moi vous chercher un jeu de données libre d’accès et d’usage, allez piocher sur ce site : https://paperswithcode.com/datasets

Pour ce tuto nous allons entraîner YOLO à détecter des documents de toute sorte. Notre entrainement ne portera donc que sur une seule classe et nous entraînerons YOLO avec 300 images. Vous trouverez les images que j’ai utilisées dans Github.

Pour résumer:

  • 1 seule classe (document)
  • Entrainement sur 300 images (de tailles et format différentes)

Labellisation

Maintenant que nous avons les images, il va falloir préciser où dans l’image se situent la ou les documents que nous allons devoir ensuite détecter. C’est ce que l’on appelle l’étape de labellisation. Malheureusement ce n’est pas l’étape la plus sympathique car vous allez vous en rendre compte qu’elle est longue et rébarbative ! Le but est très simple pour chacune des photos/images (donc 300 ici) nous allons devoir déterminer et annoter les cadres qui contiennent un document (ou plusieurs !).

Pas le choix, il faut faire ce travail sur chaque photo … et manuellement !

Pour faire simple je vous propose de télécharger et installer le logiciel gratuit LabelImg. Une fois installé vous pourrez ouvrir une image ou un répertoire contenant toutes vos images et commencer cette tâche fastidieuse mais si importante de labellisation.

LabelImg

Le logiciel LabelImg est un logiciel très simple d’utilisation, même si il n’est pas forcément adapté dans un contexte professionnel, il va nous aider ici a créer:

  • Un fichier txt par image contenant les coordonnées de chaque cadre comprenant le ou les objets à détecter.
  • Le fichier contenant les libellés ou classes. Dans notre cas nous ne créerons qu’une seule classe: document.

Ouvrons le logiciel:

Une fois de plus ce logiciel est vraiment très simple et se présente de la sorte:

  • Un panneau à gauche dans lequel on trouve les fonctions.
    • Par défault le format PASCAL/VOC est sélectionné, changez-le tout de suite pour utiliser le format YOLO.
    • Je vous suggère aussi de travailler sur un répertoire dans lequel vous avez placé toutes vos images et ainsi choisir l’option Open Dir, puis pointer dessus. Une fois sélectionné remarquez le volet en bas à droite qui va lister toutes vos images.
  • Dans le menu:
    • Sélectionnez dans View, l’option Auto Save Mode
    • Puis « Single Class Mode » (car nous n’aurons que la classe document)

Maintenant on peut commencer à parcourir image après image et sélectionner ce que nous trouvons comme documents. Une fois que vous avez une nouvelle image, appuyez sur la touche « w », c’est un raccourci qui vous permet de directement tracer un cadre et vous fait gagner du temps.

Attention, une fois de plus LabelImg est un petit utilitaire (bien pratique tout de même) mais dont il faut connaître quels trucs comme:

  • Si l’image est trop grande par rapport au cadre, vous ne pourrez pas créer de boite autour d’un objet qui est sur les bords. Dans ce cas, zoomez.
  • Si vous fermez LabelImg en cours de votre tâche de labellisation, il vous faudra ressaisir le nom du label (le logiciel n’est pas capable de le retrouver via le fichier classes.txt). Veillez à resaisir exactement le même label sans quoi vous aurez un doublon dans votre fichier classes.txt
  • Etc.

Résultat

Une fois que vous aurez passé en revue vos images (300 dans notre cas ici), vous devez avoir:

  • Dans le même répertoire que vos images, un fichier txt qui porte le même nom que l’image et qui contient les coordonnées du ou des rectangles contenant les objets. Voici un exemple pour une image contenant 4 documents :
0 0.827519 0.587640 0.344961 0.804048
0 0.374273 0.542205 0.557171 0.645995
0 0.602713 0.080319 0.452519 0.159776
0 0.208697 0.110680 0.339874 0.220500
  • un fichier classes.txt, qui ne contient qu’une seule ligne:
document

Conclusion

Vos données sont maintenant prêtes à être entraînées par le réseau YOLO darknet. Nous allons voir dans le chapitre suivant comment configurer le réseau pour qu’il puisse prendre en charge l’entrainement de ces nouveaux objets.

Lire la suite

Dans l’article suivant nous allons configurer le réseau darknet pour pouvoir l’entrainer avec colab.

Partager cet article

One Reply to “YOLO (Partie 5) Créer son modèle avec YOLO : Préparation des données”

  1. Bonjour,
    Merci pour cette série sur Yolo.
    Vos explications sont très pertinentes.
    J’attends avec impatience les 2 prochains chapitres.

    Bon courage
    A.M

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.