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
Avec le Gestionnaire de pilotes supplémentaires
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 de mon module personnel: Python: pymultilame
Dans les 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
GPU=1 CUDNN=1 CUDNN_HALF=0 OPENCV=1 AVX=0 OPENMP=0 LIBSO=1 ZED_CAMERA=0
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.
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
Les créer en collant le script create_train_test_txt.py dans le dossier axe. Puis:
python3 create_train_test_txt.py Les fichiers train.txt et test.txt sont dans le dossier axe.
Pour avoir Yolo v3 avec:
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
./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.
./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
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