Outils pour utilisateurs

Outils du site


yolo_darknet_avec_un_vrai_semaphore

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
Prochaine révisionLes deux révisions suivantes
y:yolo_darknet_avec_un_vrai_semaphore [2019/05/13 16:30] sergeyolo_darknet_avec_un_vrai_semaphore [2020/02/04 16:27] – ↷ Liens modifiés en raison d'un déplacement. serge
Ligne 3: Ligne 3:
 **{{tagpage>semaphore|Sémaphores}}**  ....  **{{tagpage>bge|Blender Game Engine}}** ....  **{{tagpage>ia|Intelligence Artificielle}}** **{{tagpage>semaphore|Sémaphores}}**  ....  **{{tagpage>bge|Blender Game Engine}}** ....  **{{tagpage>ia|Intelligence Artificielle}}**
 </WRAP> </WRAP>
-<WRAP center round box 60% centeralign>+ 
 +<WRAP group> 
 +<WRAP half column> 
 +<WRAP center round box 95% centeralign>
 C'est quoi un sémaphore ? C'est quoi un sémaphore ?
 {{ youtube>F3sY6_fOx2I?medium }} {{ youtube>F3sY6_fOx2I?medium }}
 {{ :chappe.jpeg?400 }} {{ :chappe.jpeg?400 }}
 </WRAP> </WRAP>
-\\ \\  +</WRAP> 
-<WRAP center round box 60% centeralign>+ 
 +<WRAP half column> 
 +<WRAP center round box 95% centeralign>
 //**Reconnaissance d'un vrai sémaphore avec YOLO Darknet**//\\ //**Reconnaissance d'un vrai sémaphore avec YOLO Darknet**//\\
 </WRAP> </WRAP>
-<WRAP center box 60% centeralign>{{ :2019_05:shot_106_y.png?600 |}} +{{ shot_106_y.png?400 |}} 
-Ce sémaphore est une image virtuelle, mais c'est copie conforme du vrai !+Ce sémaphore est une image virtuelle ! 
 +</WRAP>
 </WRAP> </WRAP>
- 
  
 =====Suite et fin===== =====Suite et fin=====
-De **[[y:yolo_darknet_sur_un_portable_optimus|Yolo Darknet sur un portable Optimus]]**+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===== =====Apprentissage=====
 ====cfg==== ====cfg====
 Relire tout le readme pour bien configurer en particulier: Relire tout le readme pour bien configurer en particulier:
-  * for training for both small and large objects use modified models: yolov3-tiny_3l.cfg+  * 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   * 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==== ====Apprentissage====
-   export PATH=/usr/local/cuda-10.0/bin${PATH:+:${PATH}} +Adapter les chemins ! 
-  ./darknet detector train blend/obj.data blend/yolov3-obj_3l_blend.cfg darknet53.conv.74 -map+  ./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==== ====3 calcul====
Ligne 34: Ligne 73:
   * **jpg 90, faible variation d'angle, faible variation de couleur et lumière**   * **jpg 90, faible variation d'angle, faible variation de couleur et lumière**
   * 9 000 itérations   * 9 000 itérations
-{{ :y:chart_avec_blur_sub_16_9000.png?400 |}} +{{ media_03:chart_avec_blur_sub_16_9000.png?200 |}} 
-<code txt> +  * Détails des résultats: [[:yolo_darknet_avec_un_vrai_semaphore_resultat_des_calculs#calcul_1|Calcul 1]]
- calculation mAP (mean average precision)... +
-6000 +
- detections_count = 17645, unique_truth_count = 5987   +
-class_id = 0, name = a, ap = 97.74%    (TP = 220, FP = 46)  +
-class_id = 1, name = space, ap = 91.95%    (TP = 205, FP = 75)  +
-class_id = 2, name = b, ap = 99.55%    (TP = 220, FP = 0)  +
-class_id = 3, name = c, ap = 97.65%    (TP = 214, FP = 14)  +
-class_id = 4, name = d, ap = 100.00%    (TP = 218, FP = 0)  +
-class_id = 5, name = e, ap = 95.70%    (TP = 210, FP = 8)  +
-class_id = 6, name = f, ap = 100.00%    (TP = 212, FP = 0)  +
-class_id = 7, name = g, ap = 97.59%    (TP = 209, FP = 25)  +
-class_id = 8, name = h, ap = 100.00%    (TP = 219, FP = 0)  +
-class_id = 9, name = i, ap = 97.34%    (TP = 209, FP = 60)  +
-class_id = 10, name = j, ap = 100.00%    (TP = 228, FP = 0)  +
-class_id = 11, name = k, ap = 100.00%    (TP = 241, FP = 26)  +
-class_id = 12, name = l, ap = 98.39%    (TP = 199, FP = 50)  +
-class_id = 13, name = m, ap = 98.64%    (TP = 218, FP = 0)  +
-class_id = 14, name = n, ap = 97.77%    (TP = 204, FP = 41)  +
-class_id = 15, name = o, ap = 99.58%    (TP = 237, FP = 16)  +
-class_id = 16, name = p, ap = 98.38%    (TP = 213, FP = 10)  +
-class_id = 17, name = q, ap = 100.00%    (TP = 207, FP = 17)  +
-class_id = 18, name = r, ap = 100.00%    (TP = 195, FP = 0)  +
-class_id = 19, name = s, ap = 99.57%    (TP = 229, FP = 61)  +
-class_id = 20, name = t, ap = 86.73%    (TP = 216, FP = 154)  +
-class_id = 21, name = u, ap = 100.00%    (TP = 213, FP = 10)  +
-class_id = 22, name = v, ap = 94.88%    (TP = 211, FP = 89)  +
-class_id = 23, name = w, ap = 99.99%    (TP = 235, FP = 14)  +
-class_id = 24, name = x, ap = 93.46%    (TP = 199, FP = 81)  +
-class_id = 25, name = y, ap = 99.55%    (TP = 223, FP = 0)  +
-class_id = 26, name = z, ap = 95.30%    (TP = 219, FP = 96) +
  
- for thresh 0.25, precision 0.87, recall 0.97, F1-score 0.92  +===Calcul 2 sur 1060 GTX=== 
- for thresh 0.25, TP 5823FP = 893FN = 164, average IoU = 77.65 % +Suite du calcul 1en repartant à 12000et 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]]
  
- IoU threshold 50 %used Area-Under-Curve for each unique Recall  +===Calcul 3 sur 765 GTX=== 
- mean average precision (mAP@0.50) 0.977692, or 97.77 % +  * **jpg 100forte 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]]
  
- mean_average_precision (mAP@0.5) = 0.977692  
-</code> 
  
-===Calcul 2 sur 1060 GTX=== +====Comparaison==== 
-Suite du calcul 1, en repartant à 12000, et avec 54 000 itérations+{{ media_03:result.pdf |}} 
-{{ :y:chart_54000.png?400 |}} +{{media_03:result.png?300|}} 
-<code txt> +=====Reconnaissance dans le monde réel===== 
- calculation mAP (mean average precision)... +La partie reconnaissance est dans le dossier [[https://github.com/sergeLabo/semaphore_blend_yolo/tree/master/darknet|semaphore_blend_yolo/darknet]]
-6000 +
- detections_count 9682, unique_truth_count 5987   +
-class_id 0, name a, ap 97.65%    (TP 232, FP 118)  +
-class_id 1, name space, ap 91.08%    (TP = 152, FP = 0)  +
-class_id = 2, name = b, ap = 99.55%    (TP = 220, FP = 0)  +
-class_id = 3, name = c, ap = 97.35%    (TP = 227, FP = 40)  +
-class_id = 4, name = d, ap = 100.00%    (TP = 218, FP = 0)  +
-class_id = 5, name = e, ap = 94.33%    (TP = 215, FP = 0)  +
-class_id = 6, name = f, ap = 100.00%    (TP = 212, FP = 0)  +
-class_id = 7, name = g, ap = 96.39%    (TP = 207, FP = 0)  +
-class_id = 8, name = h, ap = 100.00%    (TP = 219, FP = 0)  +
-class_id = 9, name = i, ap = 97.12%    (TP = 205, FP = 61)  +
-class_id = 10, name = j, ap = 100.00%    (TP = 228, FP = 0)  +
-class_id = 11, name = k, ap = 100.00%    (TP = 241, FP = 0)  +
-class_id = 12, name = l, ap = 99.25%    (TP = 180, FP = 3)  +
-class_id = 13, name = m, ap = 98.64%    (TP = 218, FP = 0)  +
-class_id = 14, name = n, ap = 98.89%    (TP = 218, FP = 96)  +
-class_id = 15, name = o, ap = 99.58%    (TP = 237, FP = 18)  +
-class_id = 16, name = p, ap = 97.62%    (TP = 220, FP = 58)  +
-class_id = 17, name = q, ap = 100.00%    (TP = 207, FP = 35)  +
-class_id = 18, name = r, ap = 100.00%    (TP = 195, FP = 0)  +
-class_id = 19, name = s, ap = 99.57%    (TP = 229, FP = 57)  +
-class_id = 20, name = t, ap = 91.33%    (TP = 215, FP = 138)  +
-class_id = 21, name = u, ap = 99.99%    (TP = 213, FP = 6)  +
-class_id = 22, name = v, ap = 97.73%    (TP = 180, FP = 0)  +
-class_id = 23, name = w, ap = 99.99%    (TP = 235, FP = 15)  +
-class_id = 24, name = x, ap = 97.32%    (TP = 177, FP = 0)  +
-class_id = 25, name = y, ap = 99.55%    (TP = 223, FP = 0)  +
-class_id = 26, name = z, ap = 97.29%    (TP = 199, FP = 10) +
  
- for thresh = 0.25, precision = 0.90, recall = 0.96, F1-score = 0.93  +Une webcam regarde le sémaphoreCette webcam ne peut-être que: 
- for thresh = 0.25, TP = 5722, FP = 655, FN = 265, average IoU = 83.17 % +  * **Microsoft HD5000** ça m’attriste cette pub !
  
- mean_average_precision (mAP@0.5) = 0.981556  
-</code> 
-L'efficacité est quasi la même qu'avec 9 000 itérations:  
-  9000  --> 0.977692 
-  54000 --> 0.981556 
-  pour 2 jours de calcul de plus! 
  
-{{:y:yolov3-blend_54000_final.weights.zip|Le fichier de poids}} 
  
-===Calcul 3 sur 765 GTX=== 
-  * **jpg 100, forte variation d'angle, forte variation de couleur et lumière** 
-  * 12 000 itérations sur carte 765 GTX et subdivision=32 
-{{ :y:chart_big_var_12000.png?400 |}} 
-<code txt> 
- calculation mAP (mean average precision)... 
-6000 
- detections_count = 17161, unique_truth_count = 5987   
-class_id = 0, name = a,  17161   ap = 82.72 %  
-class_id = 1, name = space, ap = 80.00 %  
-class_id = 2, name = b, ap = 100.00 %  
-class_id = 3, name = c, ap = 94.55 %  
-class_id = 4, name = d, ap = 100.00 %  
-class_id = 5, name = e, ap = 79.73 %  
-class_id = 6, name = f, ap = 100.00 %  
-class_id = 7, name = g, ap = 88.52 %  
-class_id = 8, name = h, ap = 99.72 %  
-class_id = 9, name = i, ap = 94.52 %  
-class_id = 10, name = j, ap = 99.88 %  
-class_id = 11, name = k, ap = 97.39 %  
-class_id = 12, name = l, ap = 96.58 %  
-class_id = 13, name = m, ap = 100.00 %  
-class_id = 14, name = n, ap = 93.39 %  
-class_id = 15, name = o, ap = 98.15 %  
-class_id = 16, name = p, ap = 94.77 %  
-class_id = 17, name = q, ap = 97.96 %  
-class_id = 18, name = r, ap = 100.00 %  
-class_id = 19, name = s, ap = 97.23 %  
-class_id = 20, name = t, ap = 81.34 %  
-class_id = 21, name = u, ap = 98.94 %  
-class_id = 22, name = v, ap = 65.49 %  
-class_id = 23, name = w, ap = 98.84 %  
-class_id = 24, name = x, ap = 88.67 %  
-class_id = 25, name = y, ap = 99.96 %  
-class_id = 26, name = z, ap = 81.75 %  
- for thresh = 0.25, precision = 0.94, recall = 0.86, F1-score = 0.90  
- for thresh = 0.25, TP = 5175, FP = 343, FN = 812, average IoU = 82.32 %  
  
- IoU threshold 50 %  +====Rappel des pages pour l'installation sur xubuntu amd64==== 
- mean average precision (mAP@0.50) = 0.929660, or 92.97 % +  * 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]]
  
- mean_average_precision (mAP@0.5) 0.929660  +====Mise à jour des sources==== 
-</code>+  * Dans le dossier /data/projets/semaphore_blend_yolo
  
-=====Reconnaissance dans le monde réel===== +  git reset --hard origin/master
-====Réglage d'une webcam en cours d'utilisation par un programme, python par exemple==== +
-  sudo apt install v4l2ucp +
-  v4l2ucp +
-Noter les bonnes valeurs et les reporter dans le fichier darknet.ini+
  
 +Copier le fichier libdarknet.so des sources compilées de darknet dans semaphore_blend_yolo/darknet .
  
-=====Les sources sur GitHub===== +====Exécution de la reconnaissance===
-  * [[https://github.com/sergeLabo/semaphore_blend_yolo|semaphore_blend_yolo]]+Dans le dossier semaphore_blend_yolo/darknet 
 +  python3 get_semaphore_message 0 2  
 +   
 +===Arguments=== 
 +  * numéro de cam0 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
  
-{{tag> ia sb semaphore}}+===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]]** 
 + 
 +<WRAP group> 
 +<WRAP half column> 
 +{{ semaphore_jetson_nano_1.jpg?400 |}}\\ 
 +Affichage d'un sémaphore virtuel devant la webcam du Jetson Nano 
 +</WRAP> 
 +<WRAP half column> 
 +{{ semaphore_jetson_nano_2.jpg?400 |}}\\ 
 +La reconnaissance sur le jetson Nano 
 +</WRAP> 
 +</WRAP> 
 + 
 +{{ 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> ia sb semaphore bge yolo_darknet deap_learning}}
  
yolo_darknet_avec_un_vrai_semaphore.txt · Dernière modification : 2020/12/27 15:09 de serge