yolo_darknet_sur_un_portable_optimus
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédenteDernière révisionLes deux révisions suivantes | ||
yolo_darknet_sur_un_portable_optimus [2019/04/03 07:39] – [Apprentissage] serge | yolo_darknet_sur_un_portable_optimus [2020/10/29 13:53] – ↷ Liens modifiés en raison d'un déplacement. serge | ||
---|---|---|---|
Ligne 3: | Ligne 3: | ||
**{{tagpage> | **{{tagpage> | ||
</ | </ | ||
+ | <WRAP center round box 60% centeralign> | ||
+ | C'est quoi un sémaphore ? | ||
+ | {{ youtube> | ||
+ | {{ media_05: | ||
+ | </ | ||
+ | \\ \\ | ||
<WRAP center round box 80% centeralign> | <WRAP center round box 80% centeralign> | ||
// | // | ||
//**Test avec des images du sémaphore**// | //**Test avec des images du sémaphore**// | ||
- | //**et un succès très honorable | + | //**Valable aussi pour un Desktop |
</ | </ | ||
- | {{ chappe.jpeg? | + | |
+ | |||
=====Considération générales===== | =====Considération générales===== | ||
- | * **Xubuntu 18.04 CUDA 10.0 CUDNN 7.4.1.5 ** Ne pas utiliser | + | * **Xubuntu 18.04 CUDA 10.0 CUDNN 7.4.1.5 |
- | * **Valable aussi pour un Desktop avec une carte graphique Nvidia** | + | * **Ne pas utiliser |
- | * **Sur Ubuntu, il est possible d' | + | * **Sur Ubuntu, |
- | <WRAP center round todo 60%> | + | * **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** |
- | Tester ce tuto sur Debian | + | |
- | </ | + | |
=====Ressources et documentation de YOLO Darknet===== | =====Ressources et documentation de YOLO Darknet===== | ||
===Darknet=== | ===Darknet=== | ||
- | * **[[https:// | + | * **[[https:// |
=====Installation de CUDA 10.0 sur Xubuntu 18.04===== | =====Installation de CUDA 10.0 sur Xubuntu 18.04===== | ||
- | * https:// | + | * [[https:// |
====Installation du driver Nvidia==== | ====Installation du driver Nvidia==== | ||
Avec le Gestionnaire de pilotes supplémentaires | Avec le Gestionnaire de pilotes supplémentaires | ||
- | ====Installation==== | + | ====Installation |
Le tout va télécharger 3 à 4 Go ! | Le tout va télécharger 3 à 4 Go ! | ||
< | < | ||
Ligne 37: | 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 | sudo apt-get install --no-install-recommends libcudnn7=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 |
</ | </ | ||
- | =====Installation de YOLO Darknet===== | ||
+ | Après installation, | ||
+ | |||
+ | Pour faire les mises à jour, il faudrait d' | ||
+ | |||
+ | ====Installation complémentaire pour mes projets==== | ||
+ | Installation de mon module personnel: [[: | ||
+ | |||
+ | |||
+ | |||
+ | =====Installation de YOLO Darknet===== | ||
+ | Dans les [[https:// | ||
- | ====Avec GPU avec CUDA avec OPENCV==== | + | Pour ajouter la libération de la RAM GPU entre 2 détections dans un script python, |
- | Recommencer avec une copie des sources originale de darknet | + | [[Darknet Letters unload GPU RAM in python script|Darknet Letters unload GPU RAM in python script]] |
- | ===Options de Makefile=== | + | ====Options de Makefile avec GPU avec CUDA avec OPENCV==== |
< | < | ||
GPU=1 | GPU=1 | ||
Ligne 53: | Ligne 69: | ||
AVX=0 | AVX=0 | ||
OPENMP=0 | OPENMP=0 | ||
- | LIBSO=0 | + | LIBSO=1 |
ZED_CAMERA=0 | ZED_CAMERA=0 | ||
</ | </ | ||
- | ===Compil=== | + | ====Compil==== |
< | < | ||
export PATH=/ | export PATH=/ | ||
Ligne 65: | Ligne 81: | ||
make -j8 | make -j8 | ||
</ | </ | ||
+ | L' | ||
- | =====Application sur le sémaphore===== | + | Le fichier libdarknet.so de 1060GTX: {{ media_07: |
- | Voir la page **[[yolo_sans_carte_graphique|YOLO sans carte graphique]]** pour la construction | + | =====Préparation===== |
+ | Voir la page **[[yolo_avec_mes_propres_images|Yolo avec mes propres images]]** pour la construction | ||
+ | Ici nous utilisons **[[https:// | ||
+ | |||
+ | Les axes blanc sont probablement important pour la reconnaissance. | ||
+ | |||
+ | {{media_01: | ||
+ | {{media_01: | ||
+ | {{media_01: | ||
+ | {{media_01: | ||
+ | {{media_01: | ||
+ | | ||
**darknet53.conv.74** | **darknet53.conv.74** | ||
wget https:// | wget https:// | ||
+ | Coller le fichier dans le dossier darknet | ||
+ | Créer un dossier axe où nous allons ranger les éléments de notre projet. Pourquoi " | ||
<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. | ||
< | < | ||
classes= 27 | classes= 27 | ||
- | train = train.txt | + | train = axe/train.txt |
- | valid = test.txt | + | valid = axe/test.txt |
- | names = obj.names | + | names = axe/obj.names |
- | backup = backup/ | + | backup = axe/backup |
</ | </ | ||
</ | </ | ||
<WRAP half column> | <WRAP half column> | ||
- | **cfg/tiny-yolo.cfg** | + | **Créer un fichier axe/obj.names:** |
< | < | ||
- | Line 2: batch=24 | + | a |
- | Line 3: set subdivisions=8 | + | space |
- | Line 4: width=416 | + | b |
- | Line 5: height=416 | + | c |
- | Line 114: filters=160 | + | d |
- | Line 120: classes=1 | + | etc ..... |
+ | x | ||
+ | y | ||
+ | z | ||
</ | </ | ||
</ | </ | ||
</ | </ | ||
- | **test.txt et train.txt** sont à coller dans le dossier darknet\\ | ||
- | Les chemins dans ces fichiers sont absolus ! | ||
- | ====Apprentissage==== | + | ===train.txt et test.txt=== |
- | | + | Les créer en collant le script **[[https://github.com/sergeLabo/ |
- | ./darknet detector | + | * installer [[:pymultilame|pymultilame]] |
+ | | ||
+ | python3 create_train_test_txt.py | ||
+ | Les fichiers | ||
- | ça crée des fichiers dans dossier darknet/backup: | + | ===Le fichier *cfg=== |
+ | * **[[https:// | ||
+ | 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 | ||
- | **yolov3-tiny_1000.weights\\ | + | =====Training===== |
- | yolov3-tiny_2000.weights\\ | + | |
- | yolov3-tiny_3000.weights | + | |
- | ** | + | |
- | <file sh tiny-yolo.cfg> | + | {{ media_01: |
- | [net] | + | |
- | batch=24 | + | |
- | subdivisions=8 | + | |
- | width=416 | + | |
- | height=416 | + | |
- | channels=3 | + | |
- | momentum=0.9 | + | |
- | decay=0.0005 | + | |
- | angle=0 | + | |
- | saturation = 1.5 | + | |
- | exposure = 1.5 | + | |
- | hue=.1 | + | |
- | learning_rate=0.001 | + | ===Message final=== |
- | max_batches | + | |
- | policy=steps | + | |
- | steps=-1, | + | |
- | scales=.1, | + | |
- | + | ||
- | [convolutional] | + | |
- | batch_normalize=1 | + | |
- | filters=16 | + | |
- | size=3 | + | |
- | stride=1 | + | |
- | pad=1 | + | |
- | activation=leaky | + | |
- | + | ||
- | [maxpool] | + | |
- | size=2 | + | |
- | stride=2 | + | |
- | + | ||
- | [convolutional] | + | |
- | batch_normalize=1 | + | |
- | filters=32 | + | |
- | size=3 | + | |
- | stride=1 | + | |
- | pad=1 | + | |
- | activation=leaky | + | |
- | + | ||
- | [maxpool] | + | |
- | size=2 | + | |
- | stride=2 | + | |
- | + | ||
- | [convolutional] | + | |
- | batch_normalize=1 | + | |
- | filters=64 | + | |
- | size=3 | + | |
- | stride=1 | + | |
- | pad=1 | + | |
- | activation=leaky | + | |
- | + | ||
- | [maxpool] | + | |
- | size=2 | + | |
- | stride=2 | + | |
- | + | ||
- | [convolutional] | + | |
- | batch_normalize=1 | + | |
- | filters=128 | + | |
- | size=3 | + | |
- | stride=1 | + | |
- | pad=1 | + | |
- | activation=leaky | + | |
- | + | ||
- | [maxpool] | + | |
- | size=2 | + | |
- | stride=2 | + | |
- | + | ||
- | [convolutional] | + | |
- | batch_normalize=1 | + | |
- | filters=256 | + | |
- | size=3 | + | |
- | stride=1 | + | |
- | pad=1 | + | |
- | activation=leaky | + | |
- | + | ||
- | [maxpool] | + | |
- | size=2 | + | |
- | stride=2 | + | |
- | + | ||
- | [convolutional] | + | |
- | batch_normalize=1 | + | |
- | filters=512 | + | |
- | size=3 | + | |
- | stride=1 | + | |
- | pad=1 | + | |
- | activation=leaky | + | |
- | + | ||
- | [maxpool] | + | |
- | size=2 | + | |
- | stride=1 | + | |
- | + | ||
- | [convolutional] | + | |
- | batch_normalize=1 | + | |
- | filters=1024 | + | |
- | size=3 | + | |
- | stride=1 | + | |
- | pad=1 | + | |
- | activation=leaky | + | |
- | + | ||
- | ########### | + | |
- | + | ||
- | [convolutional] | + | |
- | batch_normalize=1 | + | |
- | size=3 | + | |
- | stride=1 | + | |
- | pad=1 | + | |
- | filters=1024 | + | |
- | activation=leaky | + | |
- | + | ||
- | [convolutional] | + | |
- | size=1 | + | |
- | stride=1 | + | |
- | pad=1 | + | |
- | filters=160 | + | |
- | activation=linear | + | |
- | + | ||
- | [region] | + | |
- | anchors = 0.738768, | + | |
- | bias_match=1 | + | |
- | classes=27 | + | |
- | coords=4 | + | |
- | num=5 | + | |
- | softmax=1 | + | |
- | jitter=.2 | + | |
- | rescore=1 | + | |
- | + | ||
- | object_scale=5 | + | |
- | noobject_scale=1 | + | |
- | class_scale=1 | + | |
- | coord_scale=1 | + | |
- | + | ||
- | absolute=1 | + | |
- | thresh = .6 | + | |
- | random=1 | + | |
- | </ | + | |
- | ====Test==== | + | |
- | Créer un fichier obj.names: | + | |
< | < | ||
- | a | + | |
- | space | + | 6000 |
- | b | + | |
- | c | + | class_id = 0, name = a, ap = 100.00% |
- | d | + | class_id = 1, name = space, ap = 98.59% |
+ | class_id = 2, name = b, ap = 100.00% | ||
+ | class_id = 3, name = c, ap = 99.99% | ||
+ | class_id = 4, name = d, ap = 100.00% | ||
+ | class_id = 5, name = e, ap = 86.90% | ||
+ | class_id = 6, name = f, ap = 100.00% | ||
+ | class_id = 7, name = g, ap = 100.00% | ||
+ | class_id = 8, name = h, ap = 100.00% | ||
+ | class_id = 9, name = i, ap = 98.82% | ||
+ | class_id = 10, name = j, ap = 100.00% | ||
+ | class_id = 11, name = k, ap = 100.00% | ||
+ | class_id = 12, name = l, ap = 100.00% | ||
+ | class_id = 13, name = m, ap = 100.00% | ||
+ | class_id = 14, name = n, ap = 93.93% | ||
+ | class_id = 15, name = o, ap = 100.00% | ||
+ | class_id = 16, name = p, ap = 100.00% | ||
+ | class_id = 17, name = q, ap = 100.00% | ||
+ | class_id = 18, name = r, ap = 99.52% | ||
+ | class_id = 19, name = s, ap = 100.00% | ||
+ | class_id = 20, name = t, ap = 99.98% | ||
+ | class_id = 21, name = u, ap = 100.00% | ||
+ | class_id = 22, name = v, ap = 74.66% | ||
+ | class_id = 23, name = w, ap = 100.00% | ||
+ | class_id = 24, name = x, ap = 100.00% | ||
+ | class_id = 25, name = y, ap = 100.00% | ||
+ | class_id = 26, name = z, ap = 100.00% | ||
- | etc ..... | + | 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 % | |
- | x | + | IoU threshold = 50 %, used Area-Under-Curve for each unique Recall |
- | y | + | mean average precision (mAP@0.50) = 0.982366, or 98.24 % |
- | z | + | mean_average_precision (mAP@0.5) = 0.982366 |
</ | </ | ||
- | | + | =====Testing===== |
- | ./darknet detector test cfg/ | + | ====Test sur une image==== |
+ | ./darknet detector test axe/ | ||
- | Le résultat est dans l' | + | Le résultat est dans l' |
- | <WRAP center round todo 60%> | + | |
- | comment tester toutes les images définies dans test.txt | + | |
- | </ | + | |
<WRAP group> | <WRAP group> | ||
<WRAP half column> | <WRAP half column> | ||
- | {{:2019_03: | + | {{media_01: |
</ | </ | ||
<WRAP half column> | <WRAP half column> | ||
- | {{:2019_03: | + | {{media_01: |
shot_36_space.jpg: | shot_36_space.jpg: | ||
space: 40% | space: 40% | ||
</ | </ | ||
+ | </ | ||
+ | | ||
+ | ====Test sur une video et enregistrement du résultat==== | ||
+ | ./darknet detector demo axe/ | ||
- | =====64 000 images 704x704===== | + | {{ vimeo> |
- | 3 jours entiers de calcul ! 15 fichiers de poids | + | ====Test avec webcam et enregistrement du résultat==== |
+ | Pour webcam=0 | ||
+ | ./darknet detector demo axe/ | ||
+ | {{ vimeo> | ||
- | ./darknet detector train cfg/obj.data cfg/tiny-yolo.cfg darknet53.conv.74 | + | =====Avec un vrai sémaphore===== |
+ | * **[[yolo_darknet_avec_un_vrai_semaphore|Yolo Darknet avec un vrai sémaphore]]** | ||
+ | * **[[https://github.com/sergeLabo/ | ||
+ | {{tag> ia sb semaphore yolo_darknet }} | ||
- | =====Plus grand, plus gros, plus puissant===== | ||
- | **[[yolo_darknet_sur_un_gros_centre_de_calcul|Yolo Darknet sur un gros centre de calcul]]** avec 50000 images plus grandes. | ||
- | |||
- | ===== Laptop ===== | ||
- | <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 half column> | ||
- | * NVIDIA Corporation GK106M [[https:// | ||
- | * Core | ||
- | * Architecture: | ||
- | * 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/ | ||
- | * Date de présentation: | ||
- | </ | ||
- | </ | ||
- | {{tag> ia sb semaphore }} |
yolo_darknet_sur_un_portable_optimus.txt · Dernière modification : 2020/12/27 15:09 de serge