Outils pour utilisateurs

Outils du site


yolo_darknet_sur_un_portable_optimus

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édentes Révision précédente
Prochaine révision
Révision précédente
yolo_darknet_sur_un_portable_optimus [2019/04/09 16:19]
serge [Préparation]
yolo_darknet_sur_un_portable_optimus [2020/02/04 17:27] (Version actuelle)
serge ↷ Liens modifiés en raison d'un déplacement.
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>​
 +C'est quoi un sémaphore ?
 +{{ youtube>​F3sY6_fOx2I?​medium }}
 +{{ :​chappe.jpeg?​400 }}
 +</​WRAP>​
 +\\ \\ 
 <WRAP center round box 80% centeralign>​ <WRAP center round box 80% centeralign>​
 //​**Installation de YOLO Darknet sur un portable avec Optimus**//​\\ //​**Installation de YOLO Darknet sur un portable avec Optimus**//​\\
Ligne 8: Ligne 14:
 //**Valable aussi pour un Desktop avec une carte graphique Nvidia**//​\\ //**Valable aussi pour un Desktop avec une carte graphique Nvidia**//​\\
 </​WRAP>​ </​WRAP>​
-{{ chappe.jpeg?​400 }}+ 
 + 
  
 =====Considération générales===== =====Considération générales=====
-  * **Xubuntu 18.04 CUDA 10.0 CUDNN 7.4.1.5 ** Ne pas utiliser ​Ubuntu ​Mate, il y a un conflit de dépendances entre CUDA et Mate Desktop +  * **Xubuntu 18.04 CUDA 10.0 CUDNN 7.4.1.5 ​**  
-  * **Sur Ubuntu, il est possible d'​avoir le driver Nvidia en permanence.** Sur Debian, bbswitch permet d'​utiliser la carte Intel à Nvidia en lançant un programme avec optirun.  ​+  * **Ne pas utiliser ​le bureau ​Mate**, il y a un conflit de dépendances entre CUDA et Mate Desktop 
 +  * **Sur Ubuntu, ​l'​installation du driver propriétaire est facile, et il est possible d'​avoir le driver Nvidia en permanence.** Sur Debian, bbswitch permet d'​utiliser la carte Nvidia en lançant un programme avec optirun. ​Ce serait bien d'​essayer cette installation sur Debian !  
 +  * **Ce tuto a été écrit avec des tests réalisés sur un portable avec une carte 765GTX et sur une tour avec une carte 1060GTX**
 =====Ressources et documentation de YOLO Darknet===== =====Ressources et documentation de YOLO Darknet=====
 ===Darknet=== ===Darknet===
-  * **[[https://​github.com/​AlexeyAB/​darknet|darknet de AlexeyAB sur GitHub]] Nous allons suivre à la lettre ​ce README**+  * **[[https://​github.com/​AlexeyAB/​darknet|darknet de AlexeyAB sur GitHub]] Nous allons suivre ​ce README ​à la lettre.**
  
 =====Installation de CUDA 10.0 sur Xubuntu 18.04===== =====Installation de CUDA 10.0 sur Xubuntu 18.04=====
-  * https://​www.tensorflow.org/​install/​gpu#​ubuntu_1804_cuda_10+  * [[https://​www.tensorflow.org/​install/​gpu#​ubuntu_1804_cuda_10| CUDA 10 sur Ubuntu 18.04 @ tensorflow.org]]
 ====Installation du driver Nvidia==== ====Installation du driver Nvidia====
 Avec le Gestionnaire de pilotes supplémentaires Avec le Gestionnaire de pilotes supplémentaires
-====Installation====+====Installation ​de cuda,cudnn, opencv-python====
 Le tout va télécharger 3 à 4 Go ! Le tout va télécharger 3 à 4 Go !
 <​code>​ <​code>​
Ligne 33: Ligne 43:
 sudo apt-get install --no-install-recommends cuda-10-0 sudo apt-get install --no-install-recommends cuda-10-0
 sudo apt-get install --no-install-recommends libcudnn7=7.4.1.5-1+cuda10.0 ​ libcudnn7-dev=7.4.1.5-1+cuda10.0 sudo apt-get install --no-install-recommends libcudnn7=7.4.1.5-1+cuda10.0 ​ libcudnn7-dev=7.4.1.5-1+cuda10.0
-sudo apt-get install cmake clang python3-pip libopencv-dev libopencv-core-dev libopencv-highgui-dev libopencv-flann-dev libopencv-photo-dev libopencv-video-dev libopencv-dev +sudo apt-get install cmake clang python3-pip libopencv-dev libopencv-core-dev libopencv-highgui-dev libopencv-flann-dev libopencv-photo-dev libopencv-video-dev 
-sudo pip3 install opencv-python==3.4.5.20+sudo pip3 install opencv-python==3.4.5.20 ​scikit-image
 </​code>​ </​code>​
 +
 +Après installation,​ ne pas faire de mises à jour système: ça casserai libcudnn7=7.4.1.5-1+cuda10.0
 +
 +Pour faire les mises à jour, il faudrait d'​abord bloquer les versions de cuda et cudnn, y compris les dev.
 +
 +====Installation complémentaire pour mes projets====
 +Installation de mon module personnel: [[:​pymultilame|Python:​ pymultilame]]
 +
 +
 +
 =====Installation de YOLO Darknet===== =====Installation de YOLO Darknet=====
-Dans les sources décompressée de darknet: +Dans les [[https://​github.com/​AlexeyAB/​darknet|sources]] décompressée de darknet: 
-====Avec GPU avec CUDA avec OPENCV==== + 
-Recommencer avec une copie des sources originale de darknet +Pour ajouter la libération de la RAM GPU entre 2 détections dans un script python, 
-===Options de Makefile===+[[Darknet Letters unload GPU RAM in python script|Darknet Letters unload GPU RAM in python script]] 
 +====Options de Makefile avec GPU avec CUDA avec OPENCV====
 <​code>​ <​code>​
 GPU=1 GPU=1
Ligne 48: Ligne 69:
 AVX=0 AVX=0
 OPENMP=0 OPENMP=0
-LIBSO=0+LIBSO=1
 ZED_CAMERA=0 ZED_CAMERA=0
 </​code>​ </​code>​
-===Compil===+====Compil====
 <​code>​ <​code>​
 export PATH=/​usr/​local/​cuda-10.0/​bin${PATH:​+:​${PATH}} export PATH=/​usr/​local/​cuda-10.0/​bin${PATH:​+:​${PATH}}
Ligne 61: Ligne 82:
 </​code>​ </​code>​
 L'​excécutable est dans le dossier root de darknet. L'​excécutable est dans le dossier root de darknet.
 +
 +Le fichier libdarknet.so de 1060GTX: {{ libdarknet.so.zip |}}
 =====Préparation===== =====Préparation=====
-Voir la page **[[yolo_sans_carte_graphique|YOLO sans carte graphique]]** pour la construction ​des images et des fichiers ​train.txt et test.txt+Voir la page **[[yolo_avec_mes_propres_images|Yolo avec mes propres images]]** pour la construction ​de **60 000 images ​640x640** ​et des fichiers ​*.txt correspondants.
  
 +Ici nous utilisons **[[https://​github.com/​sergeLabo/​semaphore_cv_yolo|Création d'​images pour utiliser Yolo Darknet avec OpenCV]]**.
 +
 +Les axes blanc sont probablement important pour la reconnaissance.
 +
 +{{media_01:​shot_53_z.jpg?​200|}}
 +{{media_01:​shot_455_w.jpg?​200|}}
 +{{media_01:​shot_894_c.jpg?​200|}}
 +{{media_01:​shot_1916_z.jpg?​200|}}
 +{{media_01:​shot_59248_j.jpg?​200|}}
 +  ​
 **darknet53.conv.74** **darknet53.conv.74**
   wget https://​pjreddie.com/​media/​files/​darknet53.conv.74   wget https://​pjreddie.com/​media/​files/​darknet53.conv.74
 +Coller le fichier dans le dossier darknet
  
 +Créer un dossier axe où nous allons ranger les éléments de notre projet. Pourquoi "​axe"​ ? parce que mon sémaphore à des axes !
 <WRAP group> <WRAP group>
 <WRAP half column> <WRAP half column>
-**cfg/​obj.data**\\ +**axe/​obj.data**\\ 
-Ce fichier définit les chemins vers les fichiers de configuration. ​Par exemple, tout mettre dans un dossiers, ici "​axe"​+Ce fichier définit les chemins vers les fichiers de configuration.
 <​code>​ <​code>​
 classes= 27 classes= 27
Ligne 81: Ligne 116:
  
 <WRAP half column> <WRAP half column>
-**Créer un fichier obj.names:​**+**Créer un fichier ​axe/obj.names:​**
 <​code>​ <​code>​
 a a
Ligne 98: Ligne 133:
 ===train.txt et test.txt=== ===train.txt et test.txt===
 Les créer en collant le script **[[https://​github.com/​sergeLabo/​semaphore_cv_yolo/​blob/​master/​get_opencv_shot/​create_train_test_txt.py|create_train_test_txt.py]]** dans le dossier axe. Puis: Les créer en collant le script **[[https://​github.com/​sergeLabo/​semaphore_cv_yolo/​blob/​master/​get_opencv_shot/​create_train_test_txt.py|create_train_test_txt.py]]** dans le dossier axe. Puis:
-  * installer [[pymultilame|pymultilame]]+  * installer [[:pymultilame|pymultilame]]
   * adapter le chemin vers le dossier root des images dans le script   * adapter le chemin vers le dossier root des images dans le script
   python3 create_train_test_txt.py   python3 create_train_test_txt.py
 +Les fichiers train.txt et test.txt sont dans le dossier axe.
  
 ===Le fichier *cfg=== ===Le fichier *cfg===
-Nous utiliserons ​Yolo v3 avec: +  * **[[https://​github.com/​sergeLabo/​semaphore_cv_yolo/​blob/​master/​axe/​yolov3-obj_3l_labo_axe.cfg|yolov3-obj_3l_labo_axe.cfg]]** 
-  * Des objets ​+Pour avoir Yolo v3 avec: 
 +  * Des objets ​main droite différent des objets main gauche 
 +  * Des petits et des grands objets 
 +  * vérifier avec le readme de Alexei
  
 =====Training===== =====Training=====
-  ​export PATH=/​usr/​local/​cuda-10.0/​bin${PATH:​+:​${PATH}} +  ./darknet detector train axe/​obj.data ​axe/yolov3-obj_3l_labo_axe.cfg darknet53.conv.74 -map
-  ​./darknet detector train cfg/​obj.data ​cfg/tiny-yolo.cfg darknet53.conv.74 -map+
  
-{{ :2019_04:chart.png?800 |}}+{{ media_01:chart.png?300 |}}
  
-Le calcul crée des fichiers de poids dans le dossier darknet/​backup:​\\ +===Message final=== 
-**yolov3-tiny_1000.weights ​... yolov3-tiny_2000.weights ​... yolov3-tiny_3000.weights** +<​code>​ 
-====Test==== + ​calculation mAP (mean average precision)... 
-  ​export PATH=/​usr/​local/​cuda-10.0/bin${PATH:​+:​${PATH}} +6000 
-  ./darknet detector test cfg/​obj.data ​cfg/yolov3-tiny.cfg backup/​yolov3-tiny_15000.weights ​predictions_space.jpg+ ​detections_count = 9091, unique_truth_count = 6000   
 +class_id = 0, name = a, ap = 100.00%    (TP = 216, FP = 1)  
 +class_id = 1, name = space, ap = 98.59%    (TP = 218, FP = 6)  
 +class_id = 2, name = b, ap = 100.00%    (TP = 203, FP = 0)  
 +class_id = 3, name = c, ap = 99.99%    (TP = 227, FP = 0)  
 +class_id = 4, name = d, ap = 100.00%    (TP = 223, FP = 0)  
 +class_id = 5, name = e, ap = 86.90%    (TP = 129, FP = 26)  
 +class_id ​6, name f, ap 100.00% ​   (TP 225, FP 1)  
 +class_id ​7, name g, ap 100.00% ​   (TP = 218, FP = 0)  
 +class_id = 8, name = h, ap = 100.00% ​   (TP = 252, FP = 1)  
 +class_id = 9, name = i, ap = 98.82% ​   (TP = 196, FP = 2)  
 +class_id ​= 10, name = j, ap = 100.00%    (TP = 217, FP = 0)  
 +class_id = 11, name = k, ap = 100.00% ​   (TP = 243, FP = 0)  
 +class_id = 12, name = l, ap = 100.00% ​   (TP = 222, FP = 1)  
 +class_id = 13, name = m, ap = 100.00% ​   (TP = 229, FP = 0)  
 +class_id = 14, name = n, ap = 93.93% ​   (TP = 200, FP = 88)  
 +class_id = 15, name = o, ap = 100.00% ​   (TP = 217, FP = 4)  
 +class_id = 16, name = p, ap = 100.00% ​   (TP = 241, FP = 16)  
 +class_id = 17, name = q, ap = 100.00% ​   (TP = 235, FP = 15)  
 +class_id = 18, name = r, ap = 99.52% ​   (TP = 184, FP = 0)  
 +class_id = 19, name = s, ap = 100.00% ​   (TP = 222, FP = 2)  
 +class_id = 20, name = t, ap = 99.98% ​   (TP = 212, FP = 24)  
 +class_id = 21, name = u, ap = 100.00% ​   (TP = 198, FP = 1)  
 +class_id = 22, name = v, ap = 74.66% ​   (TP = 76, FP = 0)  
 +class_id = 23, name = w, ap = 100.00% ​   (TP = 205, FP = 0)  
 +class_id = 24, name = x, ap = 100.00% ​   (TP = 245, FP = 0)  
 +class_id = 25, name = y, ap = 100.00% ​   (TP = 223, FP = 0)  
 +class_id = 26, name = z, ap = 100.00% ​   (TP = 223, FP = 0)  
 + 
 + for thresh = 0.25, precision = 0.97, recall = 0.95, F1-score = 0.96  
 + for thresh = 0.25, TP = 5699, FP = 188, FN = 301, average IoU = 87.69 %  
 + IoU threshold = 50 %, used Area-Under-Curve for each unique Recall  
 + mean average precision (mAP@0.50) = 0.982366, or 98.24 %  
 + ​mean_average_precision (mAP@0.5) = 0.982366  
 +</code> 
 + 
 +=====Testing===== 
 +====Test sur une image==== 
 +  ./darknet detector test axe/​obj.data ​ axe/yolov3-obj_3l_labo_axe.cfg axe/backup/​yolov3-obj_3l_labo_axe_final.weights ​axe/​shot_36_space.jpg
  
-Le résultat est dans l'​image predictions.jpg du dossier ​darknet+Le résultat est dans l'​image predictions.jpg du dossier ​axe
 <WRAP group> <WRAP group>
 <WRAP half column> <WRAP half column>
-{{:2019_03:​predictions_b_h.jpg?​400|}}+{{media_01:​predictions_b_h.jpg?​400|}}
 </​WRAP>​ </​WRAP>​
 <WRAP half column> <WRAP half column>
-{{:2019_03:​predictions_space.jpg?​400|}}\\+{{media_01:​predictions_space.jpg?​400|}}\\
 shot_36_space.jpg:​ Predicted in 58.519000 milli-seconds:​\\ shot_36_space.jpg:​ Predicted in 58.519000 milli-seconds:​\\
 space: 40% space: 40%
 </​WRAP>​ </​WRAP>​
 </​WRAP>​ </​WRAP>​
-=====64 000 images 704x704===== 
-====Essai 1==== 
-===Apprentissage=== 
-3 jours entiers de calcul ! 15 fichiers de poids 
-  export PATH=/​usr/​local/​cuda-10.0/​bin${PATH:​+:​${PATH}} 
-  ./darknet detector train cfg/​obj.data cfg/​tiny-yolo.cfg darknet53.conv.74 
-===Test sur une image=== 
-  export PATH=/​usr/​local/​cuda-10.0/​bin${PATH:​+:​${PATH}} 
-  ./darknet detector test cfg/​obj.data cfg/​tiny-yolo.cfg backup/​tiny-yolo_15000.weights /​media/​data/​projets/​64k_704/​shot/​shot_50004_n.jpg 
   ​   ​
-  i: 64% +====Test sur une video et enregistrement du résultat==== 
-  ​n: 34% +  ./darknet detector demo axe/​obj.data axe/​yolov3-obj_3l_labo_axe.cfg axe/​backup/​yolov3-obj_3l_labo_axe_final.weights axe/​semaphore.avi -i 0 -thresh 0.10 -out_filename axe/​res_semaphore.avi
-Très décevant, c'est un **n**! +
-{{ :​2019_04:​predictions_n.jpg?400 |}}+
  
-===Test sur des videos=== +{{ vimeo>​330471526?medium ​}} 
-  ./darknet detector demo ./​cfg/​obj.data ./​cfg/​tiny-yolo.cfg ./​backup/​tiny-yolo_15000.weights /​media/​data/​projets/​video/​semaphore.avi -i 0 -thresh 0.25 +====Test avec webcam ​et enregistrement du résultat====
-{{ :​2019_04:​video_1_single.png?400 |}} +
-Détection à 15 FPS, mais trop d'​erreurs !! +
- +
-===Test avec webcam===+
 Pour webcam=0 Pour webcam=0
-  ./darknet detector demo ./cfg/​obj.data ​./cfg/tiny-yolo.cfg ./backup/tiny-yolo_15000.weights -c 0+  ./darknet detector demo axe/​obj.data ​axe/yolov3-obj_3l_labo_axe.cfg axe/backup/yolov3-obj_3l_labo_axe_final.weights ​-thresh 0.25 -c 0  
 +{{ vimeo>​330723924?​medium }}
  
 +=====Avec un vrai sémaphore=====
 +  * **[[yolo_darknet_avec_un_vrai_semaphore|Yolo Darknet avec un vrai sémaphore]]**
 +  * **[[https://​github.com/​sergeLabo/​semaphore_blend_yolo|et les sources correspondantes sur GitHub]]**
  
-=====Plus grand, plus gros, plus puissant===== +{{tag> ia sb semaphore ​ yolo_darknet deap_learning}}
-**Avec une carte graphique 1060GTX et 6 Go de RAM.**+
  
- 60000 images 640x640 
-{{ :​2019_04:​shot_2382_f.jpg?​400 |}} 
-====Yolo v3 tiny==== 
-  * [[https://​github.com/​AlexeyAB/​darknet#​how-to-train-tiny-yolo-to-detect-your-custom-objects|How to train tiny-yolo (to detect your custom objects) ]] 
-{{ :​2019_04:​yolo_labo_v3_tiny.png?​400 |}} 
- 
-  export PATH=/​usr/​local/​cuda-10.0/​bin${PATH:​+:​${PATH}} 
-  ./darknet partial cfg/​yolov3-tiny.cfg yolov3-tiny.weights yolov3-tiny.conv.15 15 
-  ./darknet detector train cfg/​obj.data cfg/​yolov3-tiny_obj_labo.cfg yolov3-tiny.conv.15 -map 
-===== Le portable Optimus utilisé ===== 
-Les calculs vont en gros 6 fois mois vite que sur une carte 1060GTX 
-<WRAP group> 
-<WRAP half column> 
-  * Intel® Core™ i7-Intel® Core™ i7-4702MQ CPU @ 2.20GHz × 84702MQ CPU @ 2.20GHz × 8 
-  * Memory Device 
-    * Total Width: 64 bits 
-    * Size: 8192 MB 
-    * Type: DDR3 
-    * Speed: 1600 MHz 
-    * Configured Clock Speed: 1600 MHz 
-  * Vitesse maximale du processeur en MHz : 3200,0000 
-  * Vitesse minimale du processeur en MHz : 800,0000 
-  * Ram 7,7 Gio 
-</​WRAP>​ 
- 
-<WRAP half column> 
-  * NVIDIA Corporation GK106M [[https://​www.notebookcheck.biz/​NVIDIA-GeForce-GTX-765M.94344.0.html|GeForce GTX 765M]] 
-    * Core 
-      * Architecture:​ Kepler 
-      * CUDA Cores 768 
-      * Clock Freq (MHz) 850 + Boost 
-    * Memory 
-      * Memory Clock (MHz) 2000 
-      * Standard Memory Configuration GDDR5 
-      * Memory Interface Width 128 bit 
-    * Memory Bandwidth (GB/​sec)64.0 
-    * Date de présentation:​ 30.05.2013 
-</​WRAP>​ 
-</​WRAP>​ 
  
-{{tag> ia sb semaphore yolo_darknet}} 
yolo_darknet_sur_un_portable_optimus.1554819560.txt.gz · Dernière modification: 2019/04/09 16:19 par serge