Yolo Darknet sur un portable Optimus

C'est quoi un sémaphore ?

chappe.jpeg



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

  • 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

Darknet

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

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

sudo apt install python3-pip
sudo pip3 install numpy scikit-image

Installation de mon module personnel: Python: pymultilame

Dans les sources décompressée de darknet:

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: libdarknet.so.zip

Voir la page Yolo avec mes propres images pour la construction de 60 000 images 640×640 et des fichiers *.txt correspondants.

Ici nous utilisons Création d'images pour utiliser Yolo Darknet avec OpenCV.

Les axes blanc sont probablement important pour la reconnaissance.

Les commandes pour exécuter .darknet ont comme argument:

axe/obj.data axe/yolov3-obj_3l_labo_axe.cfg darknet53.conv.74

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 create_train_test_txt.py dans le dossier axe. Puis:

  • installer 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

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
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

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 % 
Total Detection Time: 78.000000 Seconds

Set -points flag:
 `-points 101` for MS COCO 
 `-points 11` for PascalVOC 2007 (uncomment `difficult` in voc.data) 
 `-points 0` (AUC) for ImageNet, PascalVOC 2010-2012, your custom dataset

 mean_average_precision (mAP@0.5) = 0.982366 
Saving weights to axe/backup/yolov3-obj_3l_labo_axe_54000.weights
Saving weights to axe/backup/yolov3-obj_3l_labo_axe_last.weights
Saving weights to axe/backup/yolov3-obj_3l_labo_axe_final.weights

Le fichier final obtenu

Test sur une image

export PATH=/usr/local/cuda-10.0/bin${PATH:+:${PATH}}
./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.


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

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 
  • yolo_darknet_sur_un_portable_optimus.txt
  • Dernière modification: 2019/08/08 18:59
  • par serge