======Yolo Darknet avec un vrai sémaphore====== **{{tagpage>ia|Intelligence Artificielle}}** **[[http://translate.google.com/translate?hl=&sl=auto&tl=en&u=https%3A%2F%2Fressources.labomedia.org%2Fyolo_darknet_avec_un_vrai_semaphore|English Version]]** **[[les_pages_intelligence_artificielle_en_details|Les Pages Intelligence Artificielle en détails]]** **{{tagpage>semaphore|Sémaphores}}** .... **{{tagpage>bge|Blender Game Engine}}** C'est quoi un sémaphore ? {{ youtube>F3sY6_fOx2I?medium }} {{ media_05:chappe.jpeg?400 }} //**Reconnaissance d'un vrai sémaphore avec YOLO Darknet**//\\ {{ media_03:shot_106_y.png?400 |}} Ce sémaphore est une image virtuelle ! =====Suite et fin===== De **[[yolo_darknet_sur_un_portable_optimus|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===== * **[[https://github.com/sergeLabo/semaphore_blend_yolo|semaphore_blend_yolo]]** =====Installation===== Voir * [[yolo_darknet_sur_un_portable_optimus#installation_de_cuda_100_sur_xubuntu_1804|Cuda]] * [[yolo_darknet_sur_un_portable_optimus#installation_de_yolo_darknet|Darknet]] 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 [[https://github.com/sergeLabo/semaphore_blend_yolo/blob/master/darknet/calcul_1/calcul_1_9000_jpg_90_small_var.cfg|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 {{ media_03:chart_avec_blur_sub_16_9000.png?200 |}} * Détails des résultats: [[:yolo_darknet_avec_un_vrai_semaphore_resultat_des_calculs#calcul_1|Calcul 1]] ===Calcul 2 sur 1060 GTX=== Suite du calcul 1, en repartant à 12000, et avec 54 000 itérations. {{ media_03:chart_54000.png?200 |}} * Détails des résultats: [[:yolo_darknet_avec_un_vrai_semaphore_resultat_des_calculs#calcul_2|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. {{ media_03:chart_big_var_12000.png?200 |}} * Détails des résultats: [[:yolo_darknet_avec_un_vrai_semaphore_resultat_des_calculs#calcul_3|Calcul 3]] ====Comparaison==== {{ media_03:result.pdf |}} {{media_03:result.png?300|}} =====Reconnaissance dans le monde réel===== La partie reconnaissance est dans le dossier [[https://github.com/sergeLabo/semaphore_blend_yolo/tree/master/darknet|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, .... [[yolo_darknet_sur_un_portable_optimus#installation_de_cuda_100_sur_xubuntu_1804]] * Installation de darnet [[yolo_darknet_sur_un_portable_optimus#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|Nvidia Jetson Nano]]** {{ media_12:semaphore_jetson_nano_1.jpg?400 |}}\\ Affichage d'un sémaphore virtuel devant la webcam du Jetson Nano {{ media_12:semaphore_jetson_nano_2.jpg?400 |}}\\ La reconnaissance sur le jetson Nano {{ vimeo>344757901?large }} =====Bonus: Réglage d'une webcam en cours d'utilisation par un programme===== sudo apt install v4l2ucp v4l2ucp Reporter dans un fichier de configuration. {{tag> bge ia sb semaphore yolo_darknet }}