======Yolo Darknet sur un portable Optimus======
**{{tagpage>ia|Intelligence Artificielle}}** **[[http://translate.google.com/translate?hl=&sl=auto&tl=en&u=https%3A%2F%2Fressources.labomedia.org%2Fyolo_darknet_sur_un_portable_optimus|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 }}
\\ \\
//**Installation de YOLO Darknet sur un portable avec Optimus**//\\
//**Test avec des images du sémaphore**//\\
//**Valable aussi pour un Desktop avec une carte graphique Nvidia**//\\
=====Considération générales=====
* **Xubuntu 18.04 CUDA 10.0 CUDNN 7.4.1.5 **
* **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=====
===Darknet===
* **[[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=====
* [[https://www.tensorflow.org/install/gpu#ubuntu_1804_cuda_10| CUDA 10 sur Ubuntu 18.04 @ tensorflow.org]]
====Installation du driver Nvidia====
Avec le Gestionnaire de pilotes supplémentaires
====Installation de cuda,cudnn, opencv-python====
Le tout va télécharger 3 à 4 Go !
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
sudo apt-get update
sudo apt install ./nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
sudo apt-get update
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 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 scikit-image
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=====
Dans les [[https://github.com/AlexeyAB/darknet|sources]] décompressée de darknet:
Pour ajouter la libération de la RAM GPU entre 2 détections dans un script python,
[[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====
GPU=1
CUDNN=1
CUDNN_HALF=0
OPENCV=1
AVX=0
OPENMP=0
LIBSO=1
ZED_CAMERA=0
====Compil====
export PATH=/usr/local/cuda-10.0/bin${PATH:+:${PATH}}
# Vérification du bon fonctionnement de CUDA
nvidia-smi
nvcc -V
# Pour 8 coeurs
make -j8
L'excécutable est dans le dossier root de darknet.
Le fichier libdarknet.so de 1060GTX: {{ media_07:libdarknet.so.zip |}}
=====Préparation=====
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**
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 !
**axe/obj.data**\\
Ce fichier définit les chemins vers les fichiers de configuration.
classes= 27
train = axe/train.txt
valid = axe/test.txt
names = axe/obj.names
backup = axe/backup
**Créer un fichier axe/obj.names:**
a
space
b
c
d
etc .....
x
y
z
===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:
* installer [[:pymultilame|pymultilame]]
* adapter le chemin vers le dossier root des images dans le script
python3 create_train_test_txt.py
Les fichiers train.txt et test.txt sont dans le dossier axe.
===Le fichier *cfg===
* **[[https://github.com/sergeLabo/semaphore_cv_yolo/blob/master/axe/yolov3-obj_3l_labo_axe.cfg|yolov3-obj_3l_labo_axe.cfg]]**
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=====
./darknet detector train axe/obj.data axe/yolov3-obj_3l_labo_axe.cfg darknet53.conv.74 -map
{{ media_01:chart.png?300 |}}
===Message final===
calculation mAP (mean average precision)...
6000
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
=====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 axe.
{{media_01:predictions_b_h.jpg?400|}}
{{media_01:predictions_space.jpg?400|}}\\
shot_36_space.jpg: Predicted in 58.519000 milli-seconds:\\
space: 40%
====Test sur une video et enregistrement du résultat====
./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
{{ vimeo>330471526?medium }}
====Test avec webcam et enregistrement du résultat====
Pour webcam=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]]**
{{tag> ia sb semaphore yolo_darknet }}