Table des matières
Yolo Darknet avec un vrai sémaphore
Suite et fin
De Yolo Darknet sur un portable Optimus
Un sémaphore a été construit dans le monde réel avec des pièces réalisées sur Imprimante 3D. Ce projet crée ce même sémaphore dans le Blender Game Engine donc dans un monde virtuel dans lequel je suis dieu tout puissant. Ce sémaphore est parfait. Cela permet d'obtenir 60 000 images pour l'apprentissage et le test de l'intelligence de Yolo Darknet V3. Le BGE permet de faire varier les éclairage et leur couleurs, de le faire bouger et donner du random sur les angles des bras.
Par contre, le BGE ne permet une sortie d'image qu'en png. Il faut les convertir en jpg et les flouter en convolutive.
Les sources sur GitHub
Installation
Voir
Blender 2.79b mais pas 2.80 qui n'a plus de BGE. Sur Xubuntu 18.04:
sudo apt-get install blender
Fabrication des images
Avec le lanceur create_shot.sh
Important: Ne pas déplacer ou agrandir la fenêtre de Blender pendant que les images défilent.
Contrôle de la pertinence des fichiers txt
Avec le script control.py du dossier control, en modifiant les chemins.
Conversion en jpg
Avec convert_png_to_jpg.py, en modifiant les chemins.
Ajout d'un flou convolutionnel
Avec blur_jpg.py, en modifiant les chemins.
Le flou est important (0 à 5), enregistrées en jpg 90%. Des images parfaites semble ne pas convenir pour l'apprentissage.
Apprentissage
cfg
Relire tout le readme pour bien configurer en particulier:
- for training for both small and large objects use modified models: yolov3-tiny_3l.cfg soit calcul_1_9000_jpg_90_small_var.cfg
- If you train the model to distinguish Left and Right objects as separate classes (left/right hand, left/right-turn on road signs, …) then for disabling flip data augmentation - add flip=0
Apprentissage
Adapter les chemins !
./darknet partial blend/calcul_1_9000_jpg_90_small_var.cfg yolov3-tiny.weights yolov3-tiny.conv.15 15 ./darknet detector train blend/obj.data blend/calcul_1_9000_jpg_90_small_var.cfg yolov3-tiny.conv.15 -map
3 calcul
Calcul 1 sur 1060 GTX
- jpg 90, faible variation d'angle, faible variation de couleur et lumière
- 9 000 itérations
- Détails des résultats: Calcul 1
Calcul 2 sur 1060 GTX
Suite du calcul 1, en repartant à 12000, et avec 54 000 itérations.
- Détails des résultats: Calcul 2
Calcul 3 sur 765 GTX
- jpg 100, forte variation d'angle, forte variation de couleur et lumière, grand mât
- 12 000 itérations sur carte 765 GTX et subdivision=32 pour palier à la trop faible RAM du GPU.
- Détails des résultats: Calcul 3
Comparaison
Reconnaissance dans le monde réel
La partie reconnaissance est dans le dossier semaphore_blend_yolo/darknet
Une webcam regarde le sémaphore. Cette webcam ne peut-être que:
- Microsoft HD5000 ça m’attriste cette pub !
Rappel des pages pour l'installation sur xubuntu amd64
- Installation de cuda, cudnn, opencv, …. installation_de_cuda_100_sur_xubuntu_1804
- Installation de darnet installation_de_yolo_darknet
Mise à jour des sources
- Dans le dossier /data/projets/semaphore_blend_yolo
git reset --hard origin/master
Copier le fichier libdarknet.so des sources compilées de darknet dans semaphore_blend_yolo/darknet .
Exécution de la reconnaissance
Dans le dossier semaphore_blend_yolo/darknet
python3 get_semaphore_message 0 2
Arguments
- numéro de cam: 0 de /dev/video0
- numéro du calcul: 2 (1 ou 2 ou 3 sont possibles, 2 semble le meilleur)!
Fenêtre de message
- Espace: reset du message
- Echap: Quitter
Fenêtre de réglage
- threshold: entre 1 et 100, commencer entre 20 et 50.
- pile_size: Taille de la pile FIFO qui sert à valider les lettres, entre 1 et 2 fois le FPS (sur 1060GTX: FPS = 30)
Principe de la construction du message
- une lettre est validée si toutes les lettres de la pile sont les mêmes, cela bloque l'ajout de lettre
- une nouvelle lettre est possible si il y a au moins un intrus dans la pile, c'est le débloquage.
- Retour à la ligne toutes les 20 lettres
- Reset du message si plus de 100 lettres
Nvidia Jetson Nano
- Reconnaissance sur une Nvidia Jetson Nano
Bonus: Réglage d'une webcam en cours d'utilisation par un programme
sudo apt install v4l2ucp v4l2ucp
Reporter dans un fichier de configuration.